🆙

Goa 更新情報 v3.8.3

2022/08/21に公開

概要

Goa の更新情報メモです。

Goa v3.8.3

更新内容

  • gRPCにおいてフィールドのデフォルトをゼロ値に設定するのを省略する #3119
  • Meta("openapi:operationId", <テンプレート>) が追加された #3123, #3124
  • goa example で生成されるサーバにタイムアウトがないので、潜在的に slowloris attack を受ける可能性があったので、60秒のデフォルトタイムアウトが設定されるようになった #3125
  • Union 型を利用するときに初期化がされないことがあるバグが修正された #3126
    • このバグの報告はこちら #3122

更新内容

gRPCにおいてフィールドのデフォルトをゼロ値に設定するのを省略する #3119

gRPC は値を設定しないときに nil を利用できないので、そもそもデフォルト値なのか、ゼロ値がセットされているのか判別が出来ない、という問題があった。この修正はデフォルト値を明示的にデザインにセットすることで、デフォルト値があるのか、デフォルト値の設定を省略しているのかを区別することが出来るようになるというものです。

Meta("openapi:operationId", <テンプレート>) が追加された #3123, #3124

これは Goa v3.7.6 で導入された Meta("openapi:summary", "{path}") と同様の機能です。

var _ = Service("MyService", func() {
    Method("MyMethod", func() {
           // Generates MyService.MyMethod
           Meta("openapi:operationId", "{service}.{method}(.{routeIndex})")
    })
})

こうすることで、OpenAPIドキュメントの operationId の項目をセットできます。ただし、任意の文字列がセットできるわけでなくて、用意されたテンプレート(変数みたいなやつ)の組み合わせだけが利用可能です。上の例では {service}{method}{routeIndex} の組み合わせが指定されています。これ以外のテンプレートは今のところ(?)存在しません。

ちなみに、operationId は何も指定しなければ "{service}#{method}(#{routeIndex})" がデフォルトでセットされています。

Stoplight という OpenAPIドキュメントなどからAPIドキュメントを作成するサービスで、Goa が生成する OpenAPIドキュメントを利用したい、というのがきっかけだったようです。

Happy hacking!

Discussion