goaとはgoのWebフレームワークです。
goでリクエストとレスポンスを定義してあげると、APIとswagger周りを生成してくれるので、便利なライブラリです。
詳しくはこちら
The goa API Design Language · goa :: Design-first API Generation
今回goaでjsonの例はあるのですが、XMLの生成のサンプルがないので作りました。
基本的にはgoの encodign/xml
を参考にすればできました。
design
基本的には Attribute
を追加すると、タグの間に挿入されます。
属性やCDATAなど内容以外のものはMetadataとしてAttributeに定義してあげると反映されます。
design
各xmlとそれに対応したgoaの書き方をまとめます。
ベース
<User></User>
var User = MediaType("vnd.application/user+xml", func() { TypeName("User") ContentType("application/xml") })
属性
<User id="1234"></User>
var User = Type("User", func() { Attribute("ID", String, "user id", func() { Metadata("struct:tag:xml", "id,attr") }) Required("ID") })
Metadata内の id
が属性名で、attrは属性であることを明示している。
内容
<User> <Name>太郎</Name> </User>
var User = Type("User", func() { Attribute("Name", String) })
CDATA
<URL><![CDATA[http://www.google.com]]></URL>
var URL = Type("URL", func() { Attribute("CDATA", String, func() { Metadata("struct:tag:xml", ",cdata") }) })
属性と同じように cdata
はcdataであることを示している。
キー名はないので空。
配列
<User> <Friend>次郎</Friend> <Friend>三郎</Friend> </User>
var User = Type("User", func() { Attribute("Friend", ArrayOf(String)) })