Goa v3.14.0 更新情報
概要
Goa の更新情報メモです。
Goa v3.14.0
v3.14.0 の更新情報です。
主な変更内容
#3392
Revert "Use RedirectSlashes middleware by default Goa mux " by @tchssk inv3.13.x において Goa のデフォルトルーターが dlmfeld/httptreemux から go-chi/chi に置き換わりましたが、trailing slash をどう扱うかが混乱していました。この修正によって、Goa においては、trailing slash を go-chi/chi ルータの挙動のままにすることがデフォルトとなりました。go-chi/chi では trailing slash に関してはなにもしないので、これまでの dlmfeld/treemux のような挙動を求める場合には、
で追加された 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 /posts
と POST /posts/
の挙動だけがちょっと違うので注意してください。
厳密に httptreemux の挙動にしたいときは、デフォルトで利用されている mux を chi から httptreemux へ置き換えてやればよいです。cmd 下に生成されるサンプル実装でいうところの、http.go に含まれている
mux = goahttp.NewMuxer()
の部分です。
#3398
Rename the XML encoded http.ErrorResponse by @tchssk inレスポンスのエンコードが 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"}
#3401
Add CookieSameSite DSL by @jaredLunde inGo 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