本文へスキップ
BecomeCoder

C#実践コース · 第6章 代表的なNuGetパッケージとその使い方 · レッスン40

Refit ― 型安全なHTTP APIクライアント(ローカル実施)

ローカル実施

導入

HTTP通信の回でHttpClientによるAPI呼び出しを学びました。実務では、URLの組み立てやJSON変換を毎回書くのは退屈でミスの元です。Refitは、インターフェースに属性を付けるだけでHTTPクライアントを自動生成します。呼び出しがただのC#メソッド呼び出しになり、型安全になります。

図解

flowchart LR
    IF["interface IGitHubApi<br/>[Get(&quot;/users/{user}&quot;)]<br/>Task&lt;GitHubUser&gt; GetUser(...)"]
    -->|RestService.For&lt;T&gt;| CLIENT["自動生成クライアント"]
    CLIENT -->|HTTP GET| API["Web API"]
    API -->|JSON→オブジェクト| CLIENT

進め方

  1. スターター124-refit/starter.zipを展開し、RefitLesson.slnを開く(Refit導入済み)
  2. IGitHubApiインターフェースのTODO(属性付きメソッド)を埋める
  3. dotnet runで実際にAPIを呼び、結果が返ることを確認する(ネットワーク接続が必要)
Visual StudioでRefitを実行し、インターフェース定義だけでGitHub APIを呼び出しユーザー情報が取得された様子
URL組み立てやJSON変換を書かず、メソッド呼び出しでAPIを叩ける

学ぶこと

using Refit;

// 1) APIの形を「属性付きインターフェース」として宣言する
public interface IGitHubApi
{
    [Get("/users/{user}")]
    Task<GitHubUser> GetUser(string user);
}

// 2) 実装は Refit が自動生成。ベースURLを渡すだけ
IGitHubApi api = RestService.For<IGitHubApi>("https://api.github.com");

// 3) あとは普通のメソッド呼び出し。JSONは自動でオブジェクトに変換される
GitHubUser user = await api.GetUser("octocat");
Console.WriteLine($"{user.Login}: {user.Name}");

public record GitHubUser(string Login, string Name);
  • [Get] / [Post] / [Put] / [Delete]属性でHTTPメソッドとパスを宣言する
  • {user}のようなプレースホルダはメソッド引数と対応づく(URL組み立てを書かなくてよい)
  • 戻り値の型に合わせてJSONを自動デシリアライズ(JSON知識が土台)
  • 実務ではDIでHttpClientと組み合わせて登録する。生のHttpClientが「何を自動化してくれているか」を理解できる

期待される動作

octocat: The Octocat

まとめ

  • Refitは属性付きインターフェースからHTTPクライアントを自動生成する
  • URL組み立て・JSON変換が消え、API呼び出しが型安全なメソッドになる
  • HttpClientを一段楽にする、API連携の実務定番

テンプレート構成(教材制作用メモ)

124-refit/
├── starter.zip   # Refit導入済み / IGitHubApi(TODO入り) / Program.cs
└── solution/

次章: 複雑な業務をコードに写し取る「DDD(ドメイン駆動設計)」へ進みます。