HttpClientをラップしたRestSharpというライブラリがあります。C#でAPIを叩く場合に、HttpClientより簡単に書けるようなので試してみました。
https://restsharp.dev/intro.html
利用準備
パッケージをインストールします
dotnet add package RestSharp
使い方
GET
GETメソッドを実行したい場合は、下記のように使います。
using RestSharp;
var client = new RestClient("https://umayadia-apisample.azurewebsites.net");
var request = new RestRequest("/api/persons");
var response = await client.GetAsync(request);
GetAsync<T> の形で利用することで、自動的に.NETのクラスにデシリアライズしてくれます。
HttpClientだとデシリアライズしたい場合は、レスポンスに対してSystem.Text.Jsonを使っていたので便利に感じます。
using RestSharp;
using RestSharp.Authenticators;
var client = new RestClient("https://umayadia-apisample.azurewebsites.net")
{
Authenticator = new HttpBasicAuthenticator("id", "password"),
};
var request = new RestRequest("/api/persons");
var root= await client.GetAsync<Root>(request);
foreach (var item in response.Data)
{
Console.WriteLine($"{item.Name} {item.Age}歳 {item.Note}");
}
public class Person
{
[JsonPropertyName("name")]
public string Name { get; set; }
[JsonPropertyName("note")]
public string Note { get; set; }
[JsonPropertyName("age")]
public int Age { get; set; }
[JsonPropertyName("registerDate")]
public DateTime RegisterDate { get; set; }
}
public class Root
{
[JsonPropertyName("success")]
public bool Success { get; set; }
[JsonPropertyName("data")]
public List<Person> Data { get; set; }
}
POST
RestRequestにAddJsonBodyでパラメータを渡します。パラメータの渡し方はHttpClientと同様にDictionaryで渡せます。また、匿名型や<T>でも渡せます。
using RestSharp;
using RestSharp.Authenticators;
var param = new Dictionary<string, object>()
{
["name"] = "ぺんた",
["note"] = "大阪府出身",
["age"] = 30,
["registerDate"] = "2021-12-01",
};
var client = new RestClient("https://umayadia-apisample.azurewebsites.net")
{
Authenticator = new HttpBasicAuthenticator("id", "password"),
};
var postRequest = new RestRequest("/api/persons").AddJsonBody(param);
var root = await client.PostAsync<Root>(postRequest);
認証
Basic認証
using RestSharp;
using RestSharp.Authenticators;
var client = new RestClient("https://umayadia-apisample.azurewebsites.net")
{
Authenticator = new HttpBasicAuthenticator("id", "password"),
};
var request = new RestRequest("/api/persons");
var response = await client.GetAsync(request);
Console.WriteLine(response.Content);
OAuth 2
client.Authenticator = new OAuth2AuthorizationRequestHeaderAuthenticator(
"Bearer", beareToken
);
// もしくは
request.AddHeader("Authorization", $"Bearer {beareToken}");