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

Tips: goa で Consumes 指定したときはデフォルトの Content-Type タイプが読み込まれなくなるので注意

goa はデフォルトで json / xml / gob を受け付けてデコードしてくれるようになっているので特に意識することないと思うのですが,'application/x-www-form-urlencoded' とか,独自のデコーダー作りたいときとかには,Consumes 関数を API の中に書いて指定する必要があります.

たとえば,application/x-www-form-urlencoded をデコードするようにしたいときは,次のようにします.

var _ = API("myapi", func() {
        Scheme("http")
        Host("localhost:8080")

        Consumes("application/x-www-form-urlencoded", func() {  // ★ ← こんなかんじ
                Package("github.com/goadesign/goa/encoding/form")
        })
})

こうしておくと,あとは何も変更しないで指定した Payload に詰めてくれます.

ただそうすると,今まで読めてた json / xml は読めなくなってしまうので (この動作わかりにくい!)

var _ = API("myapi", func() {
        Scheme("http")
        Host("localhost:8080")

        Consumes("application/x-www-form-urlencoded", func() {
                Package("github.com/goadesign/goa/encoding/form")
        })
        Consumes("application/xml") // ★
        Consumes("application/json") // ★
})

としておくといいです.

ハマったので φ(..)メモ

( ‘-`).oO( ・・・あと,goa はデフォルトで gob を受け付けてくれるんですけど,これ使ったことある人いますかね.いたら教えて欲しい.