背景
Windowsアプリ開発の中でHTTPクライアント周りを調べていたのですが、標準ではHttpClientクラスが用意されています。
HttpClient クラス (System.Net.Http) | Microsoft Docs
が、このクラスが結構曲者らしいのです。(実際使ったことがないのでわかりませんが)
Qiitaで調べてみても結構出てきて、これは使いたくないな、、と正直思いました。
HttpClientをusingで囲わないでください - Qiita
.NET(Framework)のHttpClientの取り扱いには要注意という話 - Qiita
さらに調べたところ、RestSharpというREST APIクライアントライブラリがあることを知り、割と良さそうだと思ったので、Digest認証で試してみることにしました。
導入方法
NuGetパッケージを追加する必要があります。IDEまたはコマンドラインを使用して実行できます。
NuGet Gallery | RestSharp 106.11.4
また、Digest認証をやる場合は以下も追加します。
NuGet Gallery | RestSharp.Authenticators.Digest 1.0.2
使い方
以下のようにusing文で宣言しておきます。
using RestSharp;
using RestSharp.Authenticators;
using RestSharp.Authenticators.Digest;
GET
例えばAPIがGETメソッドで、レスポンスとして以下のJSONデータを返してくるものとします。
{"foo":"bar","baz":{"foo":"bar","baz":"qux"}}まず、JSONデータを受け取るためのデータクラスを作成します。
publicclassFoo{publicstringfoo{get;set;}publicBazbaz{get;set;}}publicclassBaz{publicstringfoo{get;set;}publicstringbaz{get;set;}}そして、以下のようにリクエスト&レスポンスからJSONデータをデシリアライズします。
varclient=newRestClient("https://hogehoge.api/1.1/foobaz");// Digest認証の設定client.Authenticator=newDigestAuthenticator("username","password");// JSONシリアライザーの設定(今回はUtf8Jsonを使用)client.UseUtf8Json();varrequest=newRestRequest();varresponse=client.Get(request);// 同期呼び出し// JSONデータをデシリアライズvarresult=newUtf8JsonSerializer().Deserialize<Foo>(response);大まかにはRestClientクラスのインスタンスを生成し、認証方式やJSONシリアライザーの設定をして、RestRequestクラスのインスタンスをclient.Getメソッドの引数に渡すことでできます。
そして、変数responseに結果が入っているので、あとはJSONデータをデシリアライズします。
POST
また後ほど記載します。