どうもてぃ。
絶賛golangをキャッチアップ中です。
APIとしてgolangを使用し、フロントエンドはnextjs/typescriptで自分で実装していく可能性があるのでどんどんアウトプットしていきます。
環境
やりたいこと
題の通り。
色んなサービスのAPIを触る際、受取側(golang)でstructを作ってやりたいが毎回作るのはめんどうくさい(ものによってはレスポンスめっちゃ多いのあるし)。
例えば、有名な決済サービスサイトstripeを例にしてみる。
{ "id": "txn_1032HU2eZvKYlo2CEPtcnUvl", "object": "balance_transaction", "amount": 400, "available_on": 1386374400, "created": 1385814763, "currency": "usd", "description": "Charge for test@example.com", "exchange_rate": null, "fee": 42, "fee_details": [ { "amount": 42, "application": null, "currency": "usd", "description": "Stripe processing fees", "type": "stripe_fee" } ], "net": 358, "reporting_category": "charge", "source": "ch_1032HU2eZvKYlo2C0FuZb3X7", "status": "available", "type": "charge" }
The balance transaction object
のレスポンスはこんな感じで、まあまあ長いし同じように他のレスポンスのstructを作るとなると結構面倒くさい。
JSON-to-Goを使う
すばらしいサービスです。
jsonをstructに変換してくれます。
上のjsonを入れると
ttype AutoGenerated struct { ID string `json:"id"` Object string `json:"object"` Amount int `json:"amount"` AvailableOn int `json:"available_on"` Created int `json:"created"` Currency string `json:"currency"` Description string `json:"description"` ExchangeRate interface{} `json:"exchange_rate"` Fee int `json:"fee"` FeeDetails []struct { Amount int `json:"amount"` Application interface{} `json:"application"` Currency string `json:"currency"` Description string `json:"description"` Type string `json:"type"` } `json:"fee_details"` Net int `json:"net"` ReportingCategory string `json:"reporting_category"` Source string `json:"source"` Status string `json:"status"` Type string `json:"type"` }
こんな感じでstructに変換してくれます。
structの名前はデフォルトでAutoGenerated
になるので適宜変えるといい感じに出来ますね。
整理すると
type BalanceTransactionObject struct { ID string `json:"id"` Object string `json:"object"` Amount int `json:"amount"` AvailableOn int `json:"available_on"` Created int `json:"created"` Currency string `json:"currency"` Description string `json:"description"` ExchangeRate interface{} `json:"exchange_rate"` Fee int `json:"fee"` FeeDetails []FeeDetails`json:"fee_details"` Net int `json:"net"` ReportingCategory string `json:"reporting_category"` Source string `json:"source"` Status string `json:"status"` Type string `json:"type"` } type FeeDetails struct { Amount int `json:"amount"` Application interface{} `json:"application"` Currency string `json:"currency"` Description string `json:"description"` Type string `json:"type"` }
素晴らしすぎる。
おわり
記事書いたあとに気づいたんですが、JSON-to-GoのInline type Definitions
のチェックボックを外すと整理したstructと同じものを作成できますね。。。
まあ、そういう日もあるか。
備忘録的な感じなので、結構有名なサービスで他にも良いのあったらぜひぜひコメントお願いします。