На каком уровне OSI находится парадигма REST API?

Во время интервью меня попросили классифицировать парадигму REST API между уровнями OSI.

Я думал, что это будет между 5 и 7 слоями; однако интервьюер сказал, что он относится только к 5-му слою, потому что похож на RPC.

На мой взгляд, это не может быть только на 5-м уровне сеанса, потому что настоящий REST API не имеет состояния в отличие от сеанса (сеанс HTTP), поэтому его можно поместить как протокол на 7-й уровень (приложение), потому что он похож на HTTP (но почему не в 6-м тоже?).

Я искал в Интернете, но не нашел четкого ответа (я знаю, что некоторые протоколы неоднозначно распределяются по уровням OSI).

Может быть, у других людей есть более четкое мнение по этому поводу?


person Community    schedule 25.03.2015    source источник
comment
Все сервисы REST, с которыми я сталкивался, передаются через какой-то тип http-сервера. Если вы не создадите свой собственный сервер сокетов и не реализуете протокол службы покоя самостоятельно, вы будете находиться на уровне OSI или выше того уровня, к которому относится http-сервер, на который вы работаете.   -  person Ross Bush    schedule 28.03.2015
comment
REST — это просто архитектурный стиль, а API, который строго следует принципам REST, называется RESTful API. Сказав это, AFIK, вы можете писать только API-интерфейсы прикладного уровня с принципами REST (написание API-интерфейсов/протоколов остальных уровней с REST для меня не имеет смысла), поэтому API-интерфейсы REST находятся на прикладном уровне.   -  person geekprogrammer    schedule 04.04.2015
comment
API — это не протокол. REST — это не протокол. HTTP — это протокол прикладного уровня. osi больше не существует и не имеет значения. Непонятно, что вы спрашиваете.   -  person user207421    schedule 08.02.2019


Ответы (3)


Архитектура REST не имеет состояния в том смысле, что сервер не хранит состояние клиента, но состояния объектов передаются туда и обратно. В конце концов, REST означает репрезентативную передачу состояния. Итак, я думаю, что REST относится к уровню 5 — сеансовому уровню, который обычно описывается как уровень, на котором происходит непрерывный обмен информацией в виде нескольких передач туда и обратно между двумя узлами.

Трудно понять, как REST API может принадлежать уровню 6 или уровню 7 модели OSI. Уровень представления обеспечивает согласование формы представления или синтаксиса данных, которые будут переданы. Обычно такие механизмы, как кодировка символов (UTF, ASCII), шифрование и дешифрование данных, являются частью уровня представления. Прикладной уровень предоставляет специализированные службы, такие как FTP, HTTP, Telnet, которые поддерживают процессы конечного пользователя.

person gowthamnvv    schedule 25.03.2015
comment
Пожалуйста, поделитесь более подробной информацией. Как REST работает в вашей конфигурации слоев, если он не основан на HTTP? - person Nico Haase; 05.12.2020

REST — это не протокол для взаимодействия двух систем. REST — это архитектурный стиль. Это в основном поверх HTTP, прикладного уровня.

person ProgramCpp    schedule 25.08.2017
comment
Что, если протокол основан на REST? Например, SRU. Мы должны разделить прикладной уровень на разные подслои? - person Pablo Bianchi; 09.06.2018
comment
@PabloBianchi Я не думаю, что ответ заключается в создании большего количества слоев. Модель TCP/IP состоит всего из 4 уровней и имеет гораздо больше смысла в концепциях Интернета. Все, что выше уровня ОС (сетевой и транспортный уровни), является просто приложением. То, что приложение делает с данными, должно выходить за рамки модели взаимосвязи. Это верно для всего, от Интернета до универсальных микроконтроллеров, подключенных к медному/радиочастотному/ИК-каналу. - person Bruno Bronosky; 01.06.2021

REST — это API (прикладной интерфейс программирования) на прикладном уровне. Не позволяйте названию сеанса уровня 5 сбить вас с толку. REST — это уровень 7. Что находится ниже приложения? Операционная система. Заботится ли ОС об REST? Давайте посмотрим на заголовки ответа с этой самой страницы.

$ curl -svo /dev/null https://stackoverflow.com/q/29264855 2>&1 | grep '^[<>]'
> GET /q/29264855 HTTP/2
> Host: stackoverflow.com
> User-Agent: curl/7.64.1
> Accept: */*
>
< HTTP/2 200
< cache-control: private
< content-type: text/html; charset=utf-8
< last-modified: Sat, 05 Dec 2020 07:07:50 GMT
< set-cookie: prov=9bbe6161-8a11-c618-c487-ff38f7c65f3b; domain=.stackoverflow.com; expires=Fri, 01-Jan-2055 00:00:00 GMT; path=/; HttpOnly
<

Качества, которые делают этот REST, полностью заключаются в заголовках HTTP, которые вы видите здесь. Делает ли операционная система что-либо с этим, кроме доставки его клиентскому приложению? Нет, это не так.

person Bruno Bronosky    schedule 25.05.2017
comment
Неразборчиво. Не размещайте здесь изображения с текстом. REST — это API, а не протокол. Единственный протокол здесь — HTTP. - person user207421; 08.02.2019
comment
@MarquisofLorne Я заменил скриншот браузера выводом curl. - person Bruno Bronosky; 05.12.2020