🆙

Goa v3.14.0 更新情報

2023/11/04に公開

概要

Goa の更新情報メモです。

Goa v3.14.0

v3.14.0 の更新情報です。

主な変更内容

Revert "Use RedirectSlashes middleware by default Goa mux " by @tchssk in #3392

v3.13.x において Goa のデフォルトルーターが dlmfeld/httptreemux から go-chi/chi に置き換わりましたが、trailing slash をどう扱うかが混乱していました。この修正によって、Goa においては、trailing slash を go-chi/chi ルータの挙動のままにすることがデフォルトとなりました。go-chi/chi では trailing slash に関してはなにもしないので、これまでの dlmfeld/treemux のような挙動を求める場合には、

https://github.com/goadesign/goa/pull/3394

で追加された SmartRedirectSlashes ミドルウエアを利用する必要があります。

このミドルウエアで、おおむねこれまでの挙動と同じに出来ますが、POST のアクセスを GET のエンドポイントにリダイレクトする、という挙動だけがちょっと異なるので注意してください。
次のようなエンドポイントが定義されていたときに、treemux と SmartRedirectSlashes を利用したときの挙動の違いです:

  • GET("/about")
  • GET("/posts/")
  • POST("/posts")
Request GET /about GET /about/ GET /posts/ GET /posts POST /posts POST /posts/
httptreemux /about 301 (/about) /posts/ 301 (/posts/) 301 (/posts/) /posts/
SmartRedirectSlashes /about 301 (/about) /posts/ 301 (/posts/) /posts 301 (/posts)

POST /postsPOST /posts/ の挙動だけがちょっと違うので注意してください。

厳密に httptreemux の挙動にしたいときは、デフォルトで利用されている mux を chi から httptreemux へ置き換えてやればよいです。cmd 下に生成されるサンプル実装でいうところの、http.go に含まれている

mux = goahttp.NewMuxer()

の部分です。

Rename the XML encoded http.ErrorResponse by @tchssk in #3398

レスポンスのエンコードが XML のときに、でエラーのトップレベルの要素が <ErrorResponse> から <error> に変更されました。すなわち、

<ErrorResponse>
        <name>name</name>
        <id>id</id>
        <message>message</message>
        <temporary>false</temporary>
        <timeout>false</timeout>
        <fault>false</fault>
</ErrorResponse>

であったのが、以下になります。

<error>
        <name>name</name>
        <id>id</id>
        <message>message</message>
        <temporary>false</temporary>
        <timeout>false</timeout>
        <fault>false</fault>
</error>

この挙動を元に戻したい場合には、以下のようにパッケージ変数にセットすればよいです。

goahttp.ErrorResponseXMLName = xml.Name{Local: "ErrorResponse"}

Add CookieSameSite DSL by @jaredLunde in #3401

Go 1.11 から利用できるようになっている cookie の same-site プロパディをGoa でも DSL として指定できるようになりました。

その他

  • Bug fix SkipRequestBodyEncodeDecode by @emilkor1 in #3384
    • Goのコードとして間違ったコードが生成されてしまうバグが解消されました
  • bugfix: export proper scopes in openapi3 file for oauth2 and jwt security by @server-may-cry in #3399
    • oauth2 と jwt のスコープが OpenAPI ドキュメントに反映されていなかったバグが修正されました。
  • Make struct:pkg:path Meta work for WebSocket endpoints by @raphael in #3400
  • Add CookieSameSite DSL by @jaredLunde in #3401
  • Fix struct:field:name Meta to work for HTTP payloads by @tchssk in #3402
  • Add openapi:generate Meta support to dsl.Server by @tchssk in #3405
  • Add openapi:generate Meta support to dsl.Host by @tchssk in #3406

結構色々修正されました。Hacktoberfest とかもありましたしね╭( ・ㅂ・)و ̑̑ グッ !

Happy hacking!

Discussion