Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
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
- Host: GitHub
- URL: https://github.com/rensawamo/grpc-connect
- Owner: rensawamo
- Created: 2024-02-27T07:05:06.000Z (9 months ago)
- Default Branch: main
- Last Pushed: 2024-02-27T07:30:37.000Z (9 months ago)
- Last Synced: 2024-02-27T09:39:03.649Z (9 months ago)
- Language: Go
- Size: 10.7 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
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!"}
```