ASP.NET Core WebAPI を Swashbuckle でドキュメント作って AutoRest でクライアントを生成してみた記事の続編です。
■ 生成されたクライアントコード
生成されたクライアントコードは .cs ファイルだけです。分かりやすく言うと、.csproj 等のファイルは作られないのでこのままではビルドできません。実際生成されたコードをどういったアプリで使うかは分からないので、これは妥当な仕様でしょう。
しかし、コードを動かすためにひと手間かかるので、ひとまず動作させるまでの流れをメモしておきます。
クライアントコードを実行する最小のアプリとして、今回はコンソールアプリを作っていきます。
■ プロジェクトの新規作成
.NET Core のコンソールアプリプロジェクトを新規に作成します。.NET Core はコンソールからプロジェクトを新規に作成できるので楽でいいですよね。
生成されたクライアントコードのあるディレクトリへ
生成されたクライアントコードのあるディレクトリへ移動します。次のファイルのあるディレクトリです。
- IMyAPI.cs
- MyAPI.cs
- MyAPIExtensions.cs
プロジェクトの新規作成
ディレクトリへ移動したらコマンドを実行します。
dotnet new console
これでプロジェクトが生成されるので、Visual Studio などでプロジェクトを開きます。
.NET Core プロジェクトを作った際は、そのディレクトリ内のファイルはプロジェクト構成として含まれる形式になっているので、前述の IMyAPI.cs、MyAPI.cs、MyAPIExtensions.cs もプロジェクトに含まれて見えているはずです。
■ NuGet パッケージのインストール
生成されたクライアントコードはいくつかのパッケージに依存するコードになっているので、インストールします。インストールすべきパッケージはビルドエラーからわかります。
名前空間 Microsoft.Rest
が見つからないエラー
↓
Microsoft.Rest.ClientRuntime
をインストールします。
名前空間 Newtonsoft
が見つからないエラー
↓
Newtonsoft.Json
をインストールします。
■ Program.cs
実際にクライアントコードを使うコードを Program.cs
に書きます。
書いたコードがこちらです。
using swagger; using System; using System.Text.Json; using System.Threading.Tasks; namespace CSharp_Swagger { class Program { static async Task Main(string[] args) { IMyAPI myAPI = new MyAPI(new Uri("http://localhost:5000/")); var weathers = await myAPI.GetWeatherForecastAsync(); var json = JsonSerializer.Serialize(weathers); Console.WriteLine(json); Console.ReadKey(); } } }
Main メソッド一行目で型推論を使っていないのは、生成されたコードでインタフェースも生まれていたので明示的に使って見たからです。
実際には型推論でも良いでしょうし、DI もするでしょう。
■ 実行
実行してみると、WebAPI が提供する天気の情報が取れます。今回は JSON 文字列にして Console.WriteLine
しています。
[{"Date":"2019-12-23T11:53:50.7695024Z","TemperatureC":47,"TemperatureF":116,"Summary":"Mild"},{"Date":"2019-12-24T11:53:50.769529Z","TemperatureC":23,"TemperatureF":73,"Summary":"Warm"},{"Date":"2019-12-25T11:53:50.7695295Z","TemperatureC":51,"TemperatureF":123,"Summary":"Sweltering"},{"Date":"2019-12-26T11:53:50.7695298Z","TemperatureC":49,"TemperatureF":120,"Summary":"Scorching"},{"Date":"2019-12-27T11:53:50.76953Z","TemperatureC":16,"TemperatureF":60,"Summary":"Cool"}]
フォーマットしてみると次のようになります。フォーマットは VSCode で行いました。見やすいですね。
[ { "Date": "2019-12-23T11:53:50.7695024Z", "TemperatureC": 47, "TemperatureF": 116, "Summary": "Mild" }, { "Date": "2019-12-24T11:53:50.769529Z", "TemperatureC": 23, "TemperatureF": 73, "Summary": "Warm" }, { "Date": "2019-12-25T11:53:50.7695295Z", "TemperatureC": 51, "TemperatureF": 123, "Summary": "Sweltering" }, { "Date": "2019-12-26T11:53:50.7695298Z", "TemperatureC": 49, "TemperatureF": 120, "Summary": "Scorching" }, { "Date": "2019-12-27T11:53:50.76953Z", "TemperatureC": 16, "TemperatureF": 60, "Summary": "Cool" } ]
■ 今回のコード
今回のコードは GitHub にも置いておきました。