Skip to content

go

chiでproxy

grpc-gatewayでgRPCとREST両対応のサーバを作る | フューチャー技術ブログのサンプルでmux.Handle("/docs/", docsProxy)となっているところを、go-chi/chi: lightweight, idiomatic and composable router for building Go HTTP servicesを使っているのでrouter.Handle Read more

proto

昨日のエラーは、grpc-ecosystem/grpc-gateway: gRPC to JSON proxy generator following the gRPC HTTP specにあるようにbuf.yamlに deps: - buf.build/googleapis/googleapis を追記してbuf mod updateを実行したら直ったような気がする。 気がする、というのは他にもprotoファイルをダウンロードしてきたりとかいろいろやっていて何が決定打だ Read more

proto

proto定義何もわからない。。 REST用のパスを定義するために option (google.api.http) = { get : "/example-messages/{id}" }; といった定義が必要で、これを使うには import "google/api/annotations.proto"; が必要らしいという理解なのだけど、これをビルドしようとすると event.proto:6:1: Import "google/api/annotations.proto" was not found or had errors. というエラーが出てしまう。 こういうところで躓くの嫌すぎる。

protoをマスターにする

protoをAPIスキーマのマスターにしようとした場合、既存のOpenAPIで用意していたUIとかどうしよう、ということになるけれど、OpenAPI->gRPCとは違って逆の変換はたくさんツールがあることは調査済み。 全体の作りとしてはgrpc-gatewayでgRPCとREST両対応のサーバを Read more

OpenAPIからgRPCへの移行

今あるOpenAPI用の定義yamlファイルからgRPC用のprotoファイルが生成できないかなと思い、検索したら良さそうなものが見つかった。 nytimes/openapi2proto: A tool for generating Protobuf v3 schemas and gRPC service definitions from OpenAPI specifications https://github.com/umemak/eventsite_go/blob/main/openapi.yml でやってみた。 $ go install github.com/NYTimes/openapi2proto/cmd/openapi2proto $ openapi2proto -spec openapi.yml -annotate syntax = "proto3"; package eventsite; import "google/api/annotations.proto"; import "google/protobuf/empty.proto"; service EventsiteService { // Get all events. rpc GetEvents(google.protobuf.Empty) returns (google.protobuf.Empty) { option (google.api.http) = { get: "/events" }; } // Create event. rpc PostEvents(google.protobuf.Empty) returns (google.protobuf.Empty) { option (google.api.http) = { post: "/events" }; } } s Read more

gRPCを触ってみる

gRPCを触ってみたくなったので、gRPCがフロントエンド通信の第一の選択肢になる時代がやってきたかも? | フューチャー技術ブログをやってみる。 frontendでnpm installするところでgitエラーになってしまう。 $ npm install --save-dev bufbuild/protoc-gen-connect-web bufbuild/protoc-gen-es npm ERR! code 128 npm ERR! An unknown git error occurred npm ERR! command git --no-replace-objects ls-remote ssh://git@github.com/bufbuild/protoc-gen-connect-web.git npm ERR! git@github.com: Permission denied (publickey). npm ERR! fatal: Could not read from remote repository. npm Read more

Goで設定を良い感じに処理する方法

コマンドラインで引数を処理する順番は以前調べたことがあるのだけど、これをいい感じに処理してくれるGoのライブラリが欲しい気がする。 まず設定ファイルを読み、環境変数が設定されていれば上書き、コマンドラインで指定されていればさらに上書き joho/godotenv: A Go port of Ruby’s dotenv library (Loads environment variables from .env.) Netflix/go-env: a golang library to manage environment variables caarlos0/env: A simple and zero-dependencies library to parse environment variables into structs. ilyakaznacheev/cleanenv: Read more

MLTファイルを読む

MLTをgoのstructに読み込もうとして、やっぱりよくわからない。 MLT自体の仕様はmltframework/mlt: MLT Multimedia Frameworkにある。 xsdファイルがあればdroyo/go-xml: utility and code-generation libraries for XMLとか使ってgoで使えるようにできそうなんだけど、dtdしかない。 っていうかdtdをs Read more

MLTファイル生成

機能追加していたら、ダメなコードの見本みたいになり始めてきた。 機能ごとに分けるとかし始める必要がありそう。 あと、XMLの出力をベタに文字列結合でやっているので、ちゃんとライブラリ使って生成するようにしたい。 Goだとxml package - encoding/xml - Go PackagesのMarshalを使えば良さそうだけど、構造体の定義面 Read more

Ginkgoやめた

普通にGoのテストとして書いたほうが融通が利くので、そのようにすることにした。 たぶん使いどころが間違っていたのだと思う。 適所であればGinkgoも有効なはず。