swaggerhub × mock × client api
現場で swaggerhub を導入したのですが、いかんせん日本語のドキュメントが存在せず、やたら苦戦しました。
一応ほぼ全ての情報が公式ドキュメントに書いてあるんですが、いかんせん書きっぷりがわかりづらく、古い情報も混ざっていて、優しくありません。
備忘録がてら、client 側でやったことを書いていこうと思います。
前提
- hub は private とする
swagger.json をローカルにダウンロードする
curl -H 'Authorization: <API Key>' -X GET 'https://api.swaggerhub.com/apis/{owner}/{api}/{version}/swagger.json' -H 'accept: application/json' >> swagger.json
API Key は「Account Settings」に書いてありますが、恐らくhomeからしか入れないので注意。
swaggerhub 上で Mock を起動する
「Integrations」ってところに起動ボタンがあるので、押してやればオッケーです。
「Integration Settings」にて、「API TOKEN」が設定できます。
client api をダウンロードする
これがすげー大変でした、以下に書く方法も、正規の方法ではないので、もう少し調査が必要です。
swagger-nodegen-cli generate -i swagger.json -l typescript-fetch -o src/services
npm パッケージのswagger-nodegen-cliってやつを入れたら、すんなり動きました。
が、star 数がやたら少ないので、公式のパッケージを使ったほうが良いと思います。
上記の例では typescript 版の fetch ですが、他にも色々あります。
ダウンロードした client api から api を実行する
これも結構ややこしかったです。
services
.DefaultApiFactory()
.sampleGet({
headers: {
Authorization: <API TOKEN>,
accept: 'application/json;charset=utf-8'
}
})
.then((response) => {
console.log(response);
});
header は両方とも必須でした、ここがやたら引っかかった…。
「DefaultApiFactory」の代わりに「DefaultApi」を使うと、オブジェクト指向で書けるっぽいです。
おまけ
Authorization を許容してやるためには、swaggerhub 上の editor に、以下の記述を追記してやる必要があります、多分。
securityDefinitions:
APIKey:
type: apiKey
name: Authorization
in: header
security:
- APIKey: []