在一次采访中,我被要求对 OSI 层之间的 REST API 范式进行分类。
我以为它会在 5 到 7 层之间;但是,面试官说它只属于第5层,因为它类似于RPC。
在我看来,它不能只在 5 会话层,因为真正的 REST API 与会话(HTTP 会话)不同,它是无状态的,所以它可以作为协议放在第 7 层(应用程序),因为它就像 HTTP(但为什么也不在第六名?)。
我在网上搜索但没有找到明确的答案(我知道有些协议在 OSI 层中分布不明确)。
也许其他人对此有更清晰的看法?
REST 不是两个系统进行通信的协议。REST 是一种架构风格。它主要位于 HTTP 之上,即应用层。
REST架构在某种意义上是无状态的,服务器不存储客户端的状态,而是对象的状态来回传输。毕竟,REST 代表 Representational State Transfer。所以,我认为 REST 属于第 5 层 - 会话层,通常被描述为在两个节点之间以多次来回传输的形式连续交换信息的层。
很难看出 REST API 如何属于 OSI 模型的第 6 层或第 7 层。表示层用于协商将要传输的数据的表示形式或语法。通常,字符编码(UTF、ASCII)、数据加密和解密等机制是表示层的一部分。应用层提供支持最终用户进程的应用程序特定服务,如 FTP、HTTP、Telnet。
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 标头。除了将其交付给“客户端应用程序”之外,操作系统是否对其中的任何内容做任何事情?不,它没有。