Какой транспортный протокол используется в REST
Что проверяют
Понимаете ли вы, что REST это архитектурный стиль, а не протокол, и различаете ли уровни сетевого стека. Ожидаемый ответ «HTTP», но сильный кандидат уточняет, что HTTP прикладной протокол, а транспорт под ним TCP. Следом часто спрашивают про идемпотентность методов или про отличие от SOAP и gRPC.
Как отвечать
Соберите ответ в три шага:
- REST не привязан к протоколу: Рой Филдинг описал его в диссертации 2000 года как набор ограничений: клиент-сервер, отсутствие состояния сессии на сервере, кэшируемость, единый интерфейс, многослойность и необязательный code on demand;
- на практике это HTTP: ресурсы адресуются URI, действия выражаются методами (
GET,POST,PUT,PATCH,DELETE), результат кодами статуса, кэшированием управляют заголовкиCache-ControlиETag; - транспорт в строгом смысле: HTTP/1.1 и HTTP/2 работают поверх TCP, HTTP/3 поверх QUIC, который построен на UDP. HTTPS добавляет TLS между HTTP и транспортом.
Привяжите к Java. В Spring Boot REST-контроллер это @RestController с @GetMapping и соседями, клиентом служит RestClient из Spring Framework 6.1 или реактивный WebClient. Встроенный java.net.http.HttpClient, появившийся в Java 11, умеет HTTP/2. На сервере Spring Boot HTTP/2 включается свойством server.http2.enabled=true.
Хорошо добавить про семантику методов: GET, PUT и DELETE идемпотентны, POST нет, поэтому повтор POST после таймаута может создать дубль.
Где спотыкаются
Говорят «REST это протокол». Протокола REST не существует, есть стиль и HTTP как основная реализация.
Путают уровни: на вопрос о транспорте отвечают только «HTTP» и не могут сказать, что лежит ниже. Этим вопросом интервьюер часто проверяет базу по сетям.
Приравнивают REST к «JSON по HTTP». Формат представления может быть любым, а API, где всё идёт через POST /api с командой в теле, остаётся RPC, как бы его ни называли.