10yroの開発日記

福岡にある株式会社10yro(トイロ)のエンジニアが書いています

C# Pollyを使った回復力の高いAPIアクセス方法

Pollyとは、APIへのアクセス時のリトライの実装などを助けてくれるライブラリです。
Pollyを使えば、APIのアクセス時に問題が発生した場合に、自動的にリトライすることができます。
この記事では、C#でPollyを使った基本的なAPIアクセス方法について説明します。

NuGetを使ってPollyをインストール

いつものようにNuGetパッケージマネージャーから、Pollyをインストールします。
コマンドでインストールする場合は以下のコマンドを実行してください。

Install-Package Polly

HttpClientの作成

APIアクセスにはHttpClientを使用します。
以下のようにHttpClientを生成します。

var httpClient = new HttpClient();

Policyの作成

Pollyを使うためには、Policyを作成する必要があります。
Policyは、リトライや回復の方法を定義するものです。

以下は、リトライの回数を3回に設定するPolicyの作成例です。

var retryPolicy = Policy
    .Handle<HttpRequestException>()
    .RetryAsync(3);

APIアクセス

Policyを作成したら、APIにアクセスする準備が整いました。
以下は、Pollyを使ったAPIアクセスの例です。

var result = await retryPolicy.ExecuteAsync(async () =>
{
    var response = await httpClient.GetAsync("https://example.com/api/users");
    response.EnsureSuccessStatusCode();
    return await response.Content.ReadAsStringAsync();
});

この例では、HttpClientを使ってhttps://example.com/api/usersにアクセスしています。
リトライの回数が3回に設定されているため、APIアクセスに失敗した場合には、3回まで自動的にリトライされます。

リトライの条件の指定

Pollyでは、リトライの条件を指定することができます。
以下は、ステータスコードが500番台の場合にリトライするPolicyの作成例です。

var retryPolicy = Policy
    .Handle<HttpRequestException>()
    .OrResult<HttpResponseMessage>(r => (int)r.StatusCode >= 500)
    .RetryAsync(3);

このようにすることで、APIアクセスに失敗した場合に、ステータスコードが500番台の場合にはリトライするように設定することができます。

その他のPolicy

以下の公式ドキュメントを御覧ください。

github.com

まとめ

以上が、C#でPollyを使ったAPIアクセス方法の紹介です。
Pollyを使うことで、APIアクセスの際に問題が発生した場合に、自動的にリトライすることができるため、アプリケーションの回復力を高めることができます。