Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/rensawamo/grpc-connect

grpcの多言語通信 for Go
https://github.com/rensawamo/grpc-connect

Last synced: 10 days ago
JSON representation

grpcの多言語通信 for Go

Awesome Lists containing this project

README

        

# gRPC Connect
gRPC 互換の HTTP API を実装するためのフレームワーク。 一般的な gRPC Server と同じように Protocol Buffers を用いて API を定義し、
Server と Client のコードを生成することができる

## メリット
わずか数行の手書きコードで、gRPC プロトコルと Connect プロトコルの両方をサポートする実際の API サーバーを構築可能。手書きの REST サービスとは異なり、URL 階層を設計したり、リクエストと応答の構造体を手書きしたり、独自のマーシャリングを管理したり、クエリ パラメーターから型指定された値を解析したりする必要がない。また、慣用的なタイプセーフなクライアントを取得できる。

1. install
```sh
$ mkdir connect-go-example
$ cd connect-go-example
$ go mod init example
$ go install github.com/bufbuild/buf/cmd/buf@latest
$ go install github.com/fullstorydev/grpcurl/cmd/grpcurl@latest
$ go install google.golang.org/protobuf/cmd/protoc-gen-go@latest
$ go install connectrpc.com/connect/cmd/protoc-gen-connect-go@latest
```

2. protoの定義ファイルの作成
```sh
$ mkdir -p greet/v1
$ touch greet/v1/greet.proto
```

3. greet/v1/greet.proto ファイルの編集
```sh
syntax = "proto3";

package greet.v1;

option go_package = "example/gen/greet/v1;greetv1";

message GreetRequest {
string name = 1;
}

message GreetResponse {
string greeting = 1;
}

service GreetService {
rpc Greet(GreetRequest) returns (GreetResponse) {}
}
```

4. buf.yamlファイルの作成
```sh
$ buf mod init
```

5. buf.gen.yaml ファイルの作成
``` sh
$ touch buf.gen.yaml
```

6. lintとコード自動コード生成
```sh
$ buf lint
$ buf generate
```

7. cmd/server/main.goを作成
```sh
$ mkdir ...
```

8. main.goにサーバーの実装
```sh
$ go get golang.org/x/net/http2
$ go get connectrpc.com/connect
$ go run ./cmd/server/main.go
```

9. 別コマンドからリクエスト
```sh
$ curl \
--header "Content-Type: application/json" \
--data '{"name": "Jane"}' \
http://localhost:8080/greet.v1.GreetService/Greet
```

10. レスポンス
```sh
{"greeting":"Hello, Jane!"}
```