Работали ли вы с HTTP-протоколом?

«Работали ли вы с HTTP-протоколом?» — вопрос из категории Сети, который задают на 25% собеседований C# Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Да, постоянно работаю с HTTP в контексте разработки веб-сервисов и API. Основные практики включают:

  • Использование HttpClient в .NET для выполнения запросов, настройки заголовков (например, Authorization, Content-Type) и обработки различных статус-кодов.
  • Работа с форматами данных: сериализация/десериализация JSON (через System.Text.Json) и XML.
  • Понимание методов и семантики: правильное применение GET, POST, PUT, DELETE, PATCH в соответствии с RESTful-принципами.
  • Обработка ошибок и таймаутов: обязательная обработка исключений HttpRequestException и настройка Timeout.

Пример GET-запроса с обработкой ошибок:

using var client = new HttpClient();
try
{
    client.Timeout = TimeSpan.FromSeconds(30);
    var response = await client.GetAsync("https://api.example.com/data");
    response.EnsureSuccessStatusCode(); // Выбрасывает исключение при ошибке 4xx/5xx
    var jsonString = await response.Content.ReadAsStringAsync();
    var data = JsonSerializer.Deserialize<MyModel>(jsonString);
}
catch (HttpRequestException ex)
{
    // Логирование и обработка сетевой ошибки или ошибки сервера
}

Для сложных сценариев (например, ручное управление пулом соединений) также знаком с низкоуровневыми классами HttpWebRequest/HttpWebResponse, но HttpClient является стандартом для современных приложений.