TGViewer
.NET Разработчик .NET Разработчик @netdeveloperdiary · 6.75K subscribers
Post #2670 2.69K
День 2213. #ЗаметкиНаПолях
Создаём Надёжных Клиентов API с Refit. Начало

Работа с внешними API - важная часть современной разработки ПО, но это может быть больно. Мы все боролись с настройками HttpClient, писали повторяющийся код и надеялись, что не пропустили где-то параметр или заголовок. Refit значительно упрощает нам жизнь. Он обрабатывает всю тяжёлую логику работы с HTTP, позволяя сосредоточиться на том, что важно: логике приложения.

Что это?
Refit — это типобезопасная библиотека REST для .NET. Она позволяет определить API как интерфейс, который Refit затем реализует для вас. Такой подход сокращает шаблонный код и делает вызовы API более читаемыми и поддерживаемыми. Вы описываете конечные точки API с помощью сигнатур методов и атрибутов, а Refit заботится обо всём остальном:
1. Автоматическая сериализация и десериализация.
Вам не придётся преобразовывать объекты в JSON и обратно. Refit делает это за вас.
2. Строго типизированные определения API.
Refit помогает выявлять ошибки на ранних этапах. Если вы неправильно введёте параметр или используете неправильный тип данных, вы узнаете об этом во время компиляции, а не когда ваше приложение даст сбой при работе.
3. Поддержка различных методов HTTP: GET, POST, PUT, PATCH, DELETE.
4. Манипуляции с запросами/ответами.
Вы можете легко добавлять пользовательские заголовки или обрабатывать определённые типы контента.
Кроме того, вызовы API становятся самодокументируемыми. Любой, кто читает код, сможет быстро понять, что делает каждый метод, не углубляясь в детали реализации.

Настройка и использование
Мы реализуем полный интерфейс CRUD и продемонстрируем его использование в приложении Minimal API. Сначала установим необходимые NuGet-пакеты:
Install-Package Refit
Install-Package Refit.HttpClientFactory


Теперь создадим интерфейс Refit:
using Refit;

public interface IBlogApi
{
[Get("/posts/{id}")]
Task<Post> GetPostAsync(int id);

[Get("/posts")]
Task<List<Post>> GetPostsAsync();

[Post("/posts")]
Task<Post> CreatePostAsync([Body] Post post);

[Put("/posts/{id}")]
Task<Post> UpdatePostAsync(int id, [Body] Post post);

[Delete("/posts/{id}")]
Task DeletePostAsync(int id);
}

public record Post(int Id, string Title, string Body, int UserId);

Мы определяем интерфейс IBlogApi с методами для CRUD-операций. Запись Post представляет сообщения в блоге.

Затем зарегистрируем Refit в DI-контейнере:
using Refit;

builder.Services
.AddRefitClient<IBlogApi>()
.ConfigureHttpClient(c => c.BaseAddress =
new Uri("https://jsonplaceholder.typicode.com"));


Наконец мы можем использовать IBlogApi в конечных точках Minimal API:
app.MapGet("/posts/{id}",
async (int id, IBlogApi api) =>
await api.GetPostAsync(id));

app.MapGet("/posts",
async (IBlogApi api) =>
await api.GetPostsAsync());

app.MapPost("/posts",
async ([FromBody] Post post, IBlogApi api) =>
await api.CreatePostAsync(post));

app.MapPut("/posts/{id}",
async (int id, [FromBody] Post post, IBlogApi api) =>
await api.UpdatePostAsync(id, post));

app.MapDelete("/posts/{id}",
async (int id, IBlogApi api) =>
await api.DeletePostAsync(id));


Мы создали полностью функциональный API, который взаимодействует с внешним сервисом, всего в нескольких строках кода. Никаких ручных HTTP-запросов, никакой обработки сырого JSON — Refit позаботится обо всём этом за нас.

Продолжение следует…

Источник:
https://www.milanjovanovic.tech/blog/refit-in-dotnet-building-robust-api-clients-in-csharp
  • 👍 23
More from @netdeveloperdiary
  1. Oct 5, 2026День 2805. #ЧтоНовенького #NET11 Аргументы в Выражениях Коллекций в C#15 В C#15 реализован…
  2. Oct 4, 2026День 2804. #ВопросыНаСобеседовании Марк Прайс предложил свой набор из 60 вопросов (как тех…
  3. Oct 3, 2026Post #3360
  4. Oct 3, 2026День 2803. #Оффтоп Чем Заняться, Пока Работают Агенты? У VS Code Есть Ответ Сейчас большую…
  5. Oct 2, 2026День 2802. #Карьера #Юмор Секреты Программирования, Известные Только Легендам Ещё один пос…
  6. Oct 1, 2026Post #3357
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →