REST API范式位于OSI模型的哪个层级?

18

在一次面试中,我被问及需要将REST API范式分类到OSI层之间。

我认为它应该介于第5层和第7层之间;然而,面试官说它只属于第5层,因为它类似于RPC。

在我看来,它不能仅仅是第5个会话层,因为真正的REST API是无状态的,不像会话(HTTP会话),所以它可以被放置在第7层(应用程序)作为协议,因为它就像HTTP(但为什么不在第6层呢?)。

我在网上搜索了一下,但没有找到明确的答案(我知道有些协议在OSI层中分布得很模糊)。

也许其他人对此有更清晰的看法?


3
我所遇到的所有REST服务都是通过某种类型的http服务器进行中继的。除非您创建自己的套接字服务器并自己实现RESTful服务协议,否则您将处于正在运行的http服务器所归类的OSI级别或更高级别。 - Ross Bush
6
REST只是一种架构风格,遵循REST原则的API被称为RESTful API。话虽如此,据我所知,你只能使用REST原则编写"应用层"API(使用REST编写其他层的API/协议对我来说没有意义),因此REST API位于应用层。 - geekprogrammer
3
API不是协议。REST也不是协议。HTTP是应用层协议。[tag:osi]已经过时且不相关。不清楚你的问题是什么。 - user207421
3个回答

15

REST不是两个系统进行通信的协议。REST是一种架构风格,它大多数情况下基于应用层HTTP。


如果一个协议基于REST呢?比如SRU(https://en.wikipedia.org/wiki/Search/Retrieve_via_URL)。我们应该将应用层拆分成不同的子层吗? - Pablo Bianchi
2
@PabloBianchi,我认为答案不是创建更多的层。TCP/IP模型只有4层,在互联网概念中更有意义。操作系统以上的所有内容(网络传输层)都只是“应用程序”。应用程序选择对数据进行什么操作应该超出“互连模型”的范围。这适用于从互联网到通用铜/射频/红外线连接的微控制器的所有内容。 - Bruno Bronosky

8
REST架构在某种意义上是无状态的,服务器不存储客户端的状态,但对象的状态来回传输。毕竟,REST代表表述性状态转移。因此,我认为REST属于第5层——会话层,通常被描述为两个节点之间以多次来回传输信息的形式进行持续交换的层。
很难看出REST API如何属于OSI模型的第6层或第7层。表示层提供有关将传输的数据的表示形式或语法的协商。通常,字符编码(UTF、ASCII)、数据加密和解密等机制属于表示层。应用层提供特定于应用程序的服务,如FTP、HTTP、Telnet支持最终用户进程。

1
请分享更多细节。如果REST不是基于HTTP构建的,它在您的层配置中是如何工作的? - Nico Haase

1

REST是应用程序接口(API)中的REST(Representational State Transfer),位于应用层。不要让第5层的“会话”标题使您感到困惑。 REST完全属于第7层。应用程序以下是操作系统。操作系统是否关心REST?让我们看看此页面的响应标头。

$ curl -svo /dev/null https://dev59.com/Rl4b5IYBdhLWcg3wXAV1 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头。操作系统是否会对其中任何一个进行处理,除了将其传递给“客户端应用程序”之外?不会。


REST是一种API,而不是协议。这里唯一的协议是HTTP。 - user207421
@MarquisofLorne 我用curl输出替换了浏览器截图。 - Bruno Bronosky
1
这是正确的答案。REST是第7层。 - dudeman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接