kk-web

swaggerhub × mock × client api

2018-10-18

現場で 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: []
© 2018 kk-web