読者です 読者をやめる 読者になる 読者になる

goa tips : Type と MediaType を使い分けよう

はじめに

MediaType と Type の意味を理解してを適切に使い分けましょう(自戒.

よく間違えます.github の issue とか goa の slack channel にもよく質問が上がってます.

MediaType はレスポンスの形式

MediaType は Type としても利用できますが,本来の意味的にはレスポンスデータです.

Payload の要素に MediaType を利用することは可能ですが,MediaType で指定したいと思っているデータ形式と同等のものを Type で定義してそれで指定するのが無難でしょう.Payload の要素に MediaType を使って,これに Example を適用するとうまく設定できないケースがあるため(バグ?)その観点からも避けた方がよさそうです.

また,MediaType の定義には,MediaType を利用することは出来ません.

要するに,言いたいことは,MediaType はレスポンスデータにだけ使おうということです.

タイプ 説明
MediaType レスポンスデータを表す.MediaType を要素として含むことは出来ない
Type 型を表す.MediaType を要素として含むことが出来るがおすすめできない

かなり個人的な意見が入っているので,もっといい方法があるよ!というご意見がありましたらお教えください.

CollectionOf と ArrayOf の使い分け

CollectionOfArrayOf という配列を作る関数があります. 似たような関数で,よく使い方を混乱してしまうので MediaType と Type の使い分けと一緒に覚えておくと覚えやすいです.

関数 引数に出来る型 返値の型 説明
CollectionOf MediaType MediaType あるレスポンスデータがあるとき,そのレスポンスデータのリストを返すアクションで使うと便利.返値は MediaType
ArrayOf Type または MediaType Type Type でも MediaType でも受け付けられるが,返値は Type になる