ごった煮

色々な事を書いてます

AutoRestを学ぶ

Bot Frameworkのテンプレートに含まれてたAutoRestなるものが非常に気になったのでいろいろまとめです。

ちなみに日本語の資料どころか英語の資料もろくに出てこなかったので誰かまとめてください

 

AutoRestとは

GithubのAzureのリポジトリで公開されてるツールです。

ここ

どうもSwagger.jsonを食わせるといい感じにクライアントのコードを吐き出してくれるみたいなツールっぽいです

結構多言語に渡って生成できるようです。

 

Bot Frameworkのテンプレートに入っているのは下の画像みたいなやつ

image

ちなみにこのClientRuntimeは、REST  APIを叩くための便利ライブラリみたいな感じっぽいです。

 

AutoRestをインストール

ツールのインストール自体はChcolateyで行います。

choco install autorest

これだけ。超簡単

 

早速使ってみる

{
  "swagger": "2.0",
  "info": {
    "title": "MyClient",
    "version": "1.0.0"
  },
  "host": "swaggersample.azurewebsites.net",
  "paths": {
    "/api/HelloWorld": {
      "get": {
        "operationId": "GetGreeting",
        "produces": [
          "application/json"
        ],
        "responses": {
          "200": {
            "description": "GETs a greeting.",
            "schema": {
              "type": "string"
            }
          }
        }
      }
    }
  }
}

とりあえずswagger.jsonはサンプルそのままで

使ってみる

Chocolateyでインストールしてあれば、パスが通ってるので

AutoRest

コマンドが使えます。

C#だったら以下のような感じでコマンド打つとコードが生成されます

AutoRest -CodeGenerator CSharp -Modeler Swagger -Input swagger.json -Namespace MyNamespace

 

処理が完了すると以下の3つのファイルが生成されます。

  • IMyClient.cs
  • MyClient.cs
  • MyClientExtensions.cs

読み込んだSwagger.jsonの情報を基にAPIを叩くクライアントのコードになります。

これを以下のようにして叩くといい感じにAPIと対話ができるみたいな感じになります。

var myClient = new MyClient();
var salutation = myClient.GetGreeting();
Console.WriteLine(salutation);

 

以下みたいなコードとか、Swagger.jsonに記述してある情報をそのまま入れてくれるのでわざわざ何度も書く必要なく自動生成されるのはすごくありがたいですね

public MyClient(HttpClientHandler rootHandler, params DelegatingHandler[] handlers)
            : base(rootHandler, handlers)
        
{

            this._baseUri = new Uri("http://swaggersample.azurewebsites.net");

}

 

まとめ

Swaggerを食わせてクライアントを自動生成する前にSwagger書けるようになったほうがいいと思います。(小並感)

Bot Frameworkだと、いろいろなAPIが出てくると思うのでこういう楽できる方法があれば積極的に入れていったほうがQoLも高まりそう