カテゴリ: C# 更新日: 2026/08/22

C# HttpClientでREST APIを呼び出す!初心者向け通信プログラム完全解説

C#でREST APIクライアントを作る基本(HttpClientの使い方)
C#でREST APIクライアントを作る基本(HttpClientの使い方)

先生と生徒の会話形式で理解しよう

生徒

「最近よく聞くREST APIって何ですか?C#でWebサイトからデータを取ってくる方法を知りたいです!」

先生

「REST APIは、インターネット越しに別のプログラムとデータをやり取りするための共通の約束事です。C#ではHttpClientという機能を使って、Webサーバーに手紙を送って返事をもらうような感覚で通信を行います。」

生徒

「なるほど!Webサイトの情報を取得するには、具体的にどんなコードを書けばいいんでしょうか?」

先生

「HttpClientを使った基本的なREST APIクライアントの作り方を、順を追って見ていきましょう!」

1. REST APIとHTTP通信の基礎知識

1. REST APIとHTTP通信の基礎知識
1. REST APIとHTTP通信の基礎知識

REST API(レスト エーピーアイ)とは、Webサーバー上のデータへアクセスするための仕組みです。私たちがブラウザでWebサイトを見る時、裏側ではHTTP(エイチティーティーピー)というルールに従って通信が行われています。HTTP通信は、クライアント(あなたのパソコン)がサーバーに対して「このデータください!」というリクエスト(要求)を送り、サーバーがそれに対して「はい、これがデータですよ」というレスポンス(応答)を返す仕組みです。

プログラミング未経験の方にとって、サーバーとの通信は難しそうに感じるかもしれません。しかし、イメージは簡単です。郵便ポストに手紙を入れて、後で返事が届くのを待つ状況とほとんど同じです。C#のHttpClientは、この郵便局の役割を果たすとても便利な道具なのです。

2. HttpClientの準備と基本的な概念

2. HttpClientの準備と基本的な概念
2. HttpClientの準備と基本的な概念

C#でWeb通信を行うために必ず使うのがHttpClientです。HttpClientは、System.Net.Httpという名前空間の中に用意されています。名前空間というのは、プログラムの機能が整理整頓されている箱のようなものです。まず、プログラムの最初でこの箱を使えるように準備(宣言)する必要があります。

HttpClientを扱う際は、メモリを効率よく使うために、なるべく一度作成したインスタンスを使い回すことが推奨されています。インスタンスとは、設計図をもとに実際にパソコンの中に作り出された「具体的な道具」のことです。


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

class Program
{
    static readonly HttpClient client = new HttpClient();

    static async Task Main(string[] args)
    {
        Console.WriteLine("通信を開始します。");
    }
}

ここでは、async(エイシンク)という単語が登場しました。これは非同期処理といって、通信が終わるまでプログラム全体を止めずに、裏側で通信処理を進めるための大切な仕組みです。これを使わないと、通信が終わるまで画面が固まってしまうため、今のC#開発では必須の知識となります。

3. GETリクエストでデータを取得する

3. GETリクエストでデータを取得する
3. GETリクエストでデータを取得する

REST APIから情報を取得する際、最もよく使われるのがGET(ゲット)というメソッドです。GETは「データをください」とお願いする命令です。HttpClientを使えば、指定したURLに向けてGETリクエストを送り、結果を文字列として受け取ることが簡単にできます。

インターネット上の公開されているAPIなどを呼び出して、その内容をコンソール画面に表示してみましょう。


static async Task GetRequestSample()
{
    try
    {
        string url = "https://jsonplaceholder.typicode.com/posts/1";
        string responseBody = await client.GetStringAsync(url);
        Console.WriteLine("取得したデータの内容:");
        Console.WriteLine(responseBody);
    }
    catch (HttpRequestException e)
    {
        Console.WriteLine($"エラーが発生しました: {e.Message}");
    }
}

ここで出てきたtry-catch(トライ・キャッチ)は、予期せぬエラーが起きた時にプログラムが強制終了しないよう、安全装置をつけるための構文です。インターネット通信は、相手のサーバーが落ちていたり、ネットワークが繋がっていなかったりと、失敗する可能性が常にあります。そのため、エラー処理を書くことは非常に重要です。

4. JSONデータの取り扱いと解析

4. JSONデータの取り扱いと解析
4. JSONデータの取り扱いと解析

REST APIから受け取ったデータは、多くの場合JSON(ジェイソン)形式というデータ形式になっています。JSONは、名前と値の組み合わせを波かっこで囲んだ、人にもコンピュータにも読みやすいデータ形式です。例えば、名前は「田中」、年齢は「25」といった情報がテキストとして送られてきます。

C#でこのJSONを扱うには、System.Text.Jsonという機能を使います。これを使うと、受け取った文字列をプログラムで使いやすいC#のオブジェクト(データの塊)に変換できます。これを「デシリアライズ」と呼びます。


using System.Text.Json;

public class Post
{
    public int Id { get; set; }
    public string Title { get; set; }
}

// 取得したJSON文字列を変換する例
string jsonString = "{\"Id\": 1, \"Title\": \"C#入門\"}";
Post post = JsonSerializer.Deserialize<Post>(jsonString);
Console.WriteLine($"ID: {post.Id}, タイトル: {post.Title}");

このように、文字として受け取ったデータを、プログラムが理解できる「クラス」という設計図に基づいたデータに変換することで、タイトルだけを取り出したり、IDで並び替えたりといった高度な操作が可能になります。

5. POSTリクエストでデータを送信する

5. POSTリクエストでデータを送信する
5. POSTリクエストでデータを送信する

データを取得するだけでなく、REST APIには自分のデータをサーバーに送るPOST(ポスト)という方法もあります。例えば、お問い合わせフォームに入力した内容や、SNSへの投稿などがこれに当たります。POSTは「手紙の中に内容を書き込んで送る」ようなイメージです。

HttpClientを使うと、送信するデータ(JSONなど)をセットして、サーバーへ投げることができます。データの送り先と、送る中身をしっかり指定するのがポイントです。


static async Task PostRequestSample()
{
    var content = new StringContent("{\"name\": \"テスト太郎\"}", System.Text.Encoding.UTF8, "application/json");
    var response = await client.PostAsync("https://example.com/api/user", content);
    
    if (response.IsSuccessStatusCode)
    {
        Console.WriteLine("送信成功しました!");
    }
}

IsSuccessStatusCodeという判定は、サーバーからの返事が「成功」であることを示すコード(一般的に200番台)かどうかを確認するものです。通信が完了したからといって、必ずしもデータが正しく処理されたとは限らないため、このチェックを行うことはWeb開発におけるマナーとも言えます。

6. 通信エラーへの対策と安全なコードを書くために

6. 通信エラーへの対策と安全なコードを書くために
6. 通信エラーへの対策と安全なコードを書くために

REST API開発において、最も頭を悩ませるのが通信エラーです。タイムアウト(通信が時間内に終わらない)、DNSエラー(住所が見つからない)、サーバーエラーなどが起こり得ます。これらのリスクに対して、C#ではタイムアウト時間を設定したり、リトライ(再試行)の仕組みを導入したりして対応します。

HttpClientのTimeoutプロパティを変更することで、「10秒待っても返事がなければ諦める」といった制御が可能です。また、大規模なアプリケーションを作る場合は、HttpClientFactory(httpクライアントファクトリー)という仕組みを使って、複数の通信を効率よく管理するのが定石です。これらをマスターすることで、安定したWeb連携プログラムを作成できるようになります。

カテゴリの一覧へ
新着記事
New1
C#
C#とは何か?初心者向けにできること・特徴・インストール手順までやさしく解説
New2
C#
C#のメソッドを引数に渡す方法!高階関数の基本を学ぼう
New3
Azure
Azure Front Door Analytics活用|リアルタイム監視とレポートで通信を分析
New4
COBOL
COBOLで数値比較とALPHABETIC・NUMERIC条件をやさしく解説!初心者でも安心ガイド
人気記事
No.1
Java&Spring記事人気No1
C#
C#のWPFとは?XAMLでGUI開発を基礎から完全解説!初心者向けの入門ガイド
No.2
Java&Spring記事人気No2
COBOL
COBOL教育における教材とリソース完全ガイド!初心者でもわかるプログラミング学習の選び方
No.3
Java&Spring記事人気No3
Azure
Azure SQL Database購入モデル比較!vCoreとDTUの違いと選び方を初心者向けに解説
No.4
Java&Spring記事人気No4
C#
C#のLINQでWhere句を使いこなす!初心者でもわかるデータ抽出とフィルタリング
No.5
Java&Spring記事人気No5
COBOL
COBOLのCOPY句の使い方を完全ガイド!初心者でもわかる共通部品の再利用方法
No.6
Java&Spring記事人気No6
COBOL
COBOLの数値データ型「PIC 9」の使い方と注意点をやさしく解説!
No.7
Java&Spring記事人気No7
C#
C#のLINQでFirstとFirstOrDefaultの違いと使い方を完全解説!初心者向けガイド
No.8
Java&Spring記事人気No8
C#
C#のforeachループを完全ガイド!初心者でもわかるコレクション操作の基本