C#でAPIを呼び出す方法|HttpClientの使い方入門

先生

C#でAPIを叩くならHttpClient!基本から応用まで、わかりやすく解説します。

C#でAPIを呼び出す基本:HttpClientとは

C#でAPIを呼び出す際に最もよく使われるのがHttpClientクラスです。HttpClientは、HTTPリクエストを送信し、HTTPレスポンスを受信する機能を提供します。この記事では、HttpClientの基本的な使い方から、より実践的な応用までを解説します。

HttpClientを使うことで、Web APIとの連携が非常に簡単になります。データの取得、送信、更新など、様々な操作をC#のコードから行うことができます。

まずは、HttpClientを使うための準備をしましょう。通常、.NETプロジェクトを作成すれば、HttpClientはすぐに利用できます。もし利用できない場合は、NuGetパッケージマネージャーからSystem.Net.Httpパッケージをインストールしてください。

HttpClientの基本的な使い方

HttpClientを使ったAPI呼び出しは、以下の手順で行います。

1. HttpClientオブジェクトの作成

2. リクエストの送信 (GET, POST, PUT, DELETEなど)

3. レスポンスの受信

4. レスポンスの処理

以下に、GETリクエストを送信する基本的なコード例を示します。


using System.Net.Http;
using System.Threading.Tasks;

public class ApiClient
{
    private static readonly HttpClient client = new HttpClient();

    public static async Task<string> GetAsync(string uri)
    {
        HttpResponseMessage response = await client.GetAsync(uri);
        response.EnsureSuccessStatusCode(); // エラーレスポンスの場合は例外をスロー
        string responseBody = await response.Content.ReadAsStringAsync();
        return responseBody;
    }
}

このコードでは、HttpClientのインスタンスを作成し、GetAsyncメソッドを使ってGETリクエストを送信しています。EnsureSuccessStatusCodeメソッドは、レスポンスが成功(200番台)であるかどうかを確認し、そうでない場合は例外をスローします。ReadAsStringAsyncメソッドは、レスポンスのボディを文字列として読み込みます。

次に、このメソッドを呼び出す例を示します。


using System;
using System.Threading.Tasks;

public class Example
{
    public static async Task Main(string[] args)
    {
        string apiUrl = "https://jsonplaceholder.typicode.com/todos/1"; // 例としてJSONPlaceholderのAPIを使用
        try
        {
            string response = await ApiClient.GetAsync(apiUrl);
            Console.WriteLine(response);
        }
        catch (HttpRequestException e)
        {
            Console.WriteLine($"Exception caught: {e.Message}");
        }
    }
}

POSTリクエストの送信

POSTリクエストを送信するには、PostAsyncメソッドを使用します。POSTリクエストでは、通常、データをサーバーに送信します。データを送信するためには、HttpContentクラスを使用します。以下に、JSON形式のデータを送信する例を示します。


using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
public class ApiClient
{
    private static readonly HttpClient client = new HttpClient();
    public static async Task<string> PostAsync(string uri, string jsonData)
    {
        StringContent content = new StringContent(jsonData, Encoding.UTF8, "application/json");
        HttpResponseMessage response = await client.PostAsync(uri, content);
        response.EnsureSuccessStatusCode();
        string responseBody = await response.Content.ReadAsStringAsync();
        return responseBody;
    }
}

このコードでは、StringContentクラスを使ってJSONデータをHTTPコンテンツとして作成し、PostAsyncメソッドに渡しています。Encoding.UTF8は文字エンコーディングを指定し、application/jsonはコンテンツタイプを指定しています。

次に、このメソッドを呼び出す例を示します。


using System;
using System.Threading.Tasks;

public class Example
{
    public static async Task Main(string[] args)
    {
        string apiUrl = "https://jsonplaceholder.typicode.com/posts"; // 例としてJSONPlaceholderのAPIを使用
        string jsonData = "{\"title\": \"foo\",\"body\": \"bar\",\"userId\": 1}";

        try
        {
            string response = await ApiClient.PostAsync(apiUrl, jsonData);
            Console.WriteLine(response);
        }
        catch (HttpRequestException e)
        {
            Console.WriteLine($"Exception caught: {e.Message}");
        }
    }
}

エラーハンドリング

API呼び出しでは、様々なエラーが発生する可能性があります。ネットワークの問題、サーバーのエラー、データの形式の問題などです。HttpClientでは、これらのエラーを適切に処理するために、try-catchブロックを使用します。

上記の例でも、HttpRequestExceptionをキャッチしてエラーメッセージを表示しています。EnsureSuccessStatusCodeメソッドを使用することで、エラーレスポンス(400番台、500番台)を例外として処理することができます。

より詳細なエラーハンドリングを行うためには、レスポンスのステータスコードをチェックしたり、レスポンスのボディを解析したりする必要があります。

参考リンク

まとめ

HttpClientを使うことで、C#から簡単にAPIを呼び出すことができます。GETリクエスト、POSTリクエスト、エラーハンドリングなど、基本的な使い方をマスターすることで、様々なWeb APIとの連携が可能になります。ぜひ、HttpClientを使って、Webアプリケーション開発をより効率的に進めてください。