📖
connect-goを2年以上使って
感想
- これからGoでAPIサーバーを書くならこれ以外の選択肢はないと思えるぐらい有能
- Web ClientもGenerateできる
- es-web
- SWR使うとかその辺は好きにやってOK
- gRPC/REST APIの両方をサポートしたサーバーを実装できる
- connect-goを使ったらgRPC-Gateway、gRPC-Webは選択肢に上がらない
- connect-goはWeb対応をものすごくシンプルに問題を解決している
- 何も困ることがない
- validation ruleもprotoファイルに書ける
- OpenAPI Generatorにありがちなimplementで秘伝のタレを作ることがまず無い
- スキーマファースト以外できない
- net/httpのルーターにconnect-goのhandlerをbindしているだけなので、connect-go管理以外の独自endpointを同居させることは可能
慣れが必要な部分
- protoファイルの書き方
- リソース指向でOK
- 規約はconnect-goに倣う
- protoファイルをどこで管理するか
- BSRは値段が高い
- サーバーのリポジトリにおけばいいと思う
- GETのエンドポイントをデフォルトでは作らない、全てPOST
- 副作用のないリクエストはGETで送りたいという原理主義者には辛い
- GETを定義できないことはないが、無理に行う必要はないと考えている
- REST APIではなく、connect-goプロトコルだと思えば良い
-
option idempotency_level = NO_SIDE_EFFECTS
をつけて副作用がないことを知らせよう
- 副作用のないリクエストはGETで送りたいという原理主義者には辛い
- エラーレスポンスのカスタマイズ
- protobuf特有の知識が必要なのでコツが少し必要
- まずはerror codeとmessageだけで進んでいいと思う
- Serviceの切り方
- これを真似ていいと思う
- GoogleもリソースごとにServiceを作っているように見える
- Adsなど公開されているprotoを見た感じ
- DHHルーティングと同じ考えでいい
- 諸説あると思うからより良い方法あったら知りたい
- 開発をテストするときにリクエストを送るツール
- PostmanはgRPCをサポートしている
- 自分は
buf curl
コマンドでリクエスト送っている- Devin AIに動作確認するコマンドとseedデータ作ってって言ったら80点ぐらいの作ってくれる
-
hack/request/local
ディレクトリに動作確認ようのbashスクリプト置いてる
- 値がnullの場合、jsonのfieldごと消える
- そういう仕様だと思えばいい
- 実装上困ることはない
-
{"field_a": null, "field_b": "hoge"}
こういうのは{"field_b": "hoge"}
こうなる
-
Discussion