Какие технологии и инструменты используются для клиент-серверного взаимодействия
Что проверяют
Понимаете ли вы, какой инструмент брать под какую задачу обмена данными в .NET, и знаете ли подводные камни клиентской стороны. Следом почти всегда спрашивают, почему new HttpClient() на каждый запрос это плохо, или чем gRPC отличается от REST.
Как отвечать
Разделите серверную и клиентскую часть:
- REST API: ASP.NET Core с контроллерами или Minimal API, сериализация через
System.Text.Jsonпо умолчанию, ошибки в формате ProblemDetails (RFC 9457). Для описания API с .NET 9 в шаблонах встроенныйMicrosoft.AspNetCore.OpenApi, Swashbuckle по умолчанию больше не подключается; - HTTP-клиент:
HttpClientчерезIHttpClientFactoryили один долгоживущий экземпляр. Клиент на каждый запрос ведёт к исчерпанию сокетов, а статический безPooledConnectionLifetimeне замечает смену DNS. Удобная обёртка: Refit или типизированные клиенты; - устойчивость: повторы, таймауты и circuit breaker через Polly или
Microsoft.Extensions.Http.Resilience; - gRPC: контракт в
.proto, бинарный Protobuf поверх HTTP/2, стриминг. Хорош для связи сервисов, из браузера напрямую недоступен без gRPC-Web; - реальное время: SignalR сам выбирает транспорт: WebSocket, затем Server-Sent Events, затем long polling;
- асинхронный обмен: RabbitMQ или Kafka, когда ответ не нужен сразу;
- безопасность: HTTPS, JWT Bearer через
AddAuthentication().AddJwtBearer(), OAuth 2.0 и OpenID Connect с внешним провайдером.
Легаси упомяните отдельно: серверной части WCF в современном .NET нет, для переноса есть CoreWCF, а новые интеграции обычно делают на REST или gRPC.
Подкрепите опытом: какие клиенты были у вашего API, какой протокол выбрали между сервисами и почему.
Где спотыкаются
Оборачивают HttpClient в using на каждый вызов. Это классическая ошибка, о которой спрашивают специально.
Считают SignalR синонимом WebSocket и не знают про запасные транспорты и про то, что при нескольких серверах нужен backplane, например Redis.
Отдают ошибки со статусом 200 и полем success: false. Коды HTTP и ProblemDetails позволяют клиенту обрабатывать ошибки единообразно.