autorestでAPI呼び出しライブラリを生成 with docker

Tech, ツールautorest, nodejs

autorestとは

autorestとは、オープンソースのAPI呼び出しライブラリ生成ツールです。
.json形式や.yaml形式のAPIドキュメントを元に、言語に対応したライブラリを生成できます。

言語は、
C#, PowerShell, Go, Java, Node.js, TypeScript, Python, Ruby, PHPに対応しているみたいです
https://github.com/Azure/autorest

API呼び出しライブラリ(client libraries for accessing RESTful web services)って何?

これ、調べてもあんまり出てこないんですよね。
apiの呼び出しを簡単にしてくれるツールです。
どれくらい簡単になるかは、下記の例を比較してみてください。

通常のAPI呼び出しの例:ぐるなびで「コーヒー」に一致する店を検索 (Node.js)

var request = require("request");

var options = { method: 'GET',
  url: 'https://api.gnavi.co.jp/RestSearchAPI/v3/',
  qs: 
   { keyid: '757a00fb912aa441a2d9cacec19c7aea',
     name: 'コーヒー' }};

request(options, function (error, response, body) {
  if (error) throw new Error(error);

  console.log(body);
});

autorestで生成したライブラリを使った呼び出しの例:ぐるなびで「コーヒー」に一致する店を検索 (Node.js)

const gnavi = require('gnavi_api');
const restaurants = await gnavi.get.restaurants('コーヒー');
console.log(restaurants);

※ぐるなびがapiドキュメントファイルを公開していないので想定で記述

結構すっきりしますね。言語にもよりますが、ライブラリを作ることでバリデーションもしてくれるので、開発が捗ること間違いなさそうです。

ライブラリを生成する

swaggerでAPIドキュメントを用意する

↓こんな感じのapiドキュメントを用意します
https://generator.swagger.io/api/swagger.json

autorestをインストール

npm install -g autorest

※ nodejsがpcにインストールされている前提です(v10.16.0推奨)

autorestコマンドを実行 (一般的なやり方)

autorest --input-file {apiドキュメントのpath} output-folder={ライブラリの保存先} --{言語}

{apiドキュメントのpath}は、https://generator.swagger.io/api/swagger.json のようにどこかのサーバー上でも問題ありません。もちろん、ローカルのディレクトリパスでもokです。
{ライブラリの保存先} にpackage.jsonとlibが生成されれば成功です。

ちなみに、僕の場合は下記のようなエラーが出ました。おそらくnodeのバージョンマネージャである 「n」 を使っていたのが原因だった気がしたので、後述しますがdockerを利用しました。

Error: ENOENT: no such file or directory, scandir '/Users/apple/.autorest/@microsoft.azure_autorest.nodejs@2.1.128/node_modules/@microsoft.azure/autorest.nodejs

autorestコマンドを実行 (dockerを利用する)

上記でうまくいかない人向け。 あまりdockerに明るくないので、もうちょい効率的なやり方があるかもしれません。

実行イメージ

dockerに不慣れなので図で整理


cd ~
mkdir ~/test

上記でtestフォルダを生成し、~/testにswagger.jsonを保存します。

docker pull azuresdk/autorest
docker run -v /Users/apple/Downloads/test:/test azuresdk/autorest --input-file=/test/swagger.json --output-folder=/test --nodejs

上記で、autorestのdockerイメージをpullし、ホストPCとコンテナのディレクトリを紐づけた上で、testフォルダにライブラリを生成できました。

Tech, ツールautorest, nodejs

Posted by kyogom