導入
HTTP通信の回でHttpClientによるAPI呼び出しを学びました。実務では、URLの組み立てやJSON変換を毎回書くのは退屈でミスの元です。Refitは、インターフェースに属性を付けるだけでHTTPクライアントを自動生成します。呼び出しがただのC#メソッド呼び出しになり、型安全になります。
図解
flowchart LR
IF["interface IGitHubApi<br/>[Get("/users/{user}")]<br/>Task<GitHubUser> GetUser(...)"]
-->|RestService.For<T>| CLIENT["自動生成クライアント"]
CLIENT -->|HTTP GET| API["Web API"]
API -->|JSON→オブジェクト| CLIENT
進め方
- スターター
124-refit/starter.zipを展開し、RefitLesson.slnを開く(Refit導入済み) IGitHubApiインターフェースのTODO(属性付きメソッド)を埋めるdotnet runで実際に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(ドメイン駆動設計)」へ進みます。