TG Telegram Group & Channel
.NET Разработчик | United States America (US)
Create: Update:

День 2215. #ЗаметкиНаПолях
Создаём Надёжных Клиентов API с Refit. Окончание

Начало
Продолжение

Обработка HTTP-ответов
Хотя Refit по умолчанию автоматически десериализует ответы в определённые вами типы, бывают случаи, когда требуется больше контроля над HTTP-ответом. Refit предоставляет два варианта для этих сценариев: HttpResponseMessage и ApiResponse<T>. Обновим IBlogApi для использования этих типов:

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

[Get("/posts/{id}")]
Task<ApiResponse<Post>>
GetPostWithMetadataAsync(int id);

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


Рассмотрим, как их использовать.

1. HttpResponseMessage
HttpResponseMessage resp = 
await blogApi.GetPostRawAsync(1);

if (resp.IsSuccessStatusCode)
{
var content = await resp.Content
.ReadAsStringAsync();
var post = JsonSerializer
.Deserialize<Post>(content);
// …
}
else
{
Console.WriteLine($"Error: {resp.StatusCode}");
}

Этот подход даёт вам полный контроль над HTTP-ответом. Вы можете получить доступ к кодам состояния, заголовкам и необработанному контенту. Но придётся вручную заниматься десериализацией.

2. ApiResponse<T>
Специфичный для Refit тип, который оборачивает десериализованный контент и метаданные ответа:
var newPost = new Post("New Post", "Content", 1);

ApiResponse<Post> resp = await
blogApi.CreatePostAsync(newPost);

if (resp.IsSuccessStatusCode)
{
var post = resp.Content;
var location = resp.Headers.Location;
Console.WriteLine($"ID: {post.Id}");
Console.WriteLine($"Location: {location}");
}
else
{
Console.WriteLine($"Error: {resp.Error.Content}");
Console.WriteLine($"Status: {resp.StatusCode}");
}

Этот подход позволяет получить доступ к созданному ресурсу, проверить определённые заголовки, такие как Location, и легко обрабатывать ошибки.

Итого
Refit преобразует способ нашего взаимодействия с API в приложениях .NET. Преобразование API в строго типизированный интерфейс упрощает код, повышает безопасность типов и улучшает удобство обслуживания.

Основные преимущества Refit:
- упрощённые вызовы API с автоматической сериализацией и десериализацией;
- гибкая обработка параметров для сложных запросов;
- простое управление заголовками и аутентификацией;
- варианты сериализации JSON для соответствия потребностям проекта;
- детальный контроль над ответами HTTP при необходимости.

Refit устраняет шаблонный код, снижает риск ошибок и позволяет вам сосредоточиться на базовой логике приложения, а не на тонкостях HTTP-коммуникаций. Но помните, что хотя Refit упрощает взаимодействие с API, он не заменяет понимания основных принципов RESTful-коммуникации и HTTP.

Источник: https://www.milanjovanovic.tech/blog/refit-in-dotnet-building-robust-api-clients-in-csharp

День 2215. #ЗаметкиНаПолях
Создаём Надёжных Клиентов API с Refit. Окончание

Начало
Продолжение

Обработка HTTP-ответов
Хотя Refit по умолчанию автоматически десериализует ответы в определённые вами типы, бывают случаи, когда требуется больше контроля над HTTP-ответом. Refit предоставляет два варианта для этих сценариев: HttpResponseMessage и ApiResponse<T>. Обновим IBlogApi для использования этих типов:
public interface IBlogApi
{
[Get("/posts/{id}")]
Task<HttpResponseMessage> GetPostRawAsync(int id);

[Get("/posts/{id}")]
Task<ApiResponse<Post>>
GetPostWithMetadataAsync(int id);

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


Рассмотрим, как их использовать.

1. HttpResponseMessage
HttpResponseMessage resp = 
await blogApi.GetPostRawAsync(1);

if (resp.IsSuccessStatusCode)
{
var content = await resp.Content
.ReadAsStringAsync();
var post = JsonSerializer
.Deserialize<Post>(content);
// …
}
else
{
Console.WriteLine($"Error: {resp.StatusCode}");
}

Этот подход даёт вам полный контроль над HTTP-ответом. Вы можете получить доступ к кодам состояния, заголовкам и необработанному контенту. Но придётся вручную заниматься десериализацией.

2. ApiResponse<T>
Специфичный для Refit тип, который оборачивает десериализованный контент и метаданные ответа:
var newPost = new Post("New Post", "Content", 1);

ApiResponse<Post> resp = await
blogApi.CreatePostAsync(newPost);

if (resp.IsSuccessStatusCode)
{
var post = resp.Content;
var location = resp.Headers.Location;
Console.WriteLine($"ID: {post.Id}");
Console.WriteLine($"Location: {location}");
}
else
{
Console.WriteLine($"Error: {resp.Error.Content}");
Console.WriteLine($"Status: {resp.StatusCode}");
}

Этот подход позволяет получить доступ к созданному ресурсу, проверить определённые заголовки, такие как Location, и легко обрабатывать ошибки.

Итого
Refit преобразует способ нашего взаимодействия с API в приложениях .NET. Преобразование API в строго типизированный интерфейс упрощает код, повышает безопасность типов и улучшает удобство обслуживания.

Основные преимущества Refit:
- упрощённые вызовы API с автоматической сериализацией и десериализацией;
- гибкая обработка параметров для сложных запросов;
- простое управление заголовками и аутентификацией;
- варианты сериализации JSON для соответствия потребностям проекта;
- детальный контроль над ответами HTTP при необходимости.

Refit устраняет шаблонный код, снижает риск ошибок и позволяет вам сосредоточиться на базовой логике приложения, а не на тонкостях HTTP-коммуникаций. Но помните, что хотя Refit упрощает взаимодействие с API, он не заменяет понимания основных принципов RESTful-коммуникации и HTTP.

Источник: https://www.milanjovanovic.tech/blog/refit-in-dotnet-building-robust-api-clients-in-csharp
👍14


>>Click here to continue<<

.NET Разработчик




Share with your best friend
VIEW MORE

United States America Popular Telegram Group (US)