# REST API 与 RESTful API 面试题答案
关于答案解析
- REST API 与 RESTful API 面试题答案解析过程是根据自身项目实践经验以及查阅官方文档等最终的得出结论。
- 仅供学习参考,评论区感谢补充和纠错 !
# 1、什么是 REST API ? 谈谈你的理解
答案解析
REST 是 (REpresentational State Transfer
)的缩写,翻译过来是 “表现层状态转化”
- REST API 是当下前后端分离的最佳实践,它是一套标准或一套开发规范,而不是一个框架。
- REST API 是一组关于如何构建 Web 应用程序 API 的架构规则、标准或指南,并且 REST API 遵循 API 原则架构风格。
好处:
- 轻量,直接通过 HTTP,不需要额外的协议,通常有 post/get/put/delete 等操作
- 面向资源,一目了然,具有自解释性
- 数据描述简单,一般通过 JSON 或 XML 做数据通讯 REST 的概括
# 2、REST API 和 RESTful API 有什么不同 ?
答案解析
REST(表示状态传输)API:它基本上是一种架构风格,可以有效地利用现有的网络技术和协议。
这是开发人员在开发可扩展的 API 或服务时需要遵循的一组规则。
- 它与 HTTP 协议一起使用,使用它的动词,例如 GET、DELETE、POST、PUT。
RESTful API:简称为执行架构的 Web 服务,说白了,RESTful API 是 REST API 的实现
REST API | RESTful API |
---|---|
REST 是一种用于创建 Web 服务的架构模式。 | RESTful API 用于实现该模式。 |
REST 的数据格式基于 HTTP。 | RESTful 的数据格式基于 JSON、HTTP 和 Text。 |
URL 的工作基于请求和响应。 | RESTful 的工作基于 REST 应用程序。 |
它更加人性化,对所有商业企业和 IT 都具有很强的适应性。 | 它太灵活了。 |
需要开发允许客户端和服务器之间交互的 API。 | 它只是遵循 REST 基础架构,可在整个网络上的不同系统之间提供互操作性。 |
# 2、你对 RESTful Web Services 的理解是什么 ?
答案解析
RESTful Web Services 是遵循 REST 架构的服务。
- REST 代表 Representational State Transfer 并使用 HTTP 协议(Web 协议)进行实现。
- 这些服务是轻量级的,提供可维护性、可扩展性,支持使用不同编程语言开发的多个应用程序之间的通信。
- 它们通过请求标头、请求体、响应体、状态代码等提供了通过 Web 浏览器访问客户端所需的服务器资源的方法。
# 3、什么是 REST 资源 ?
答案解析
REST 架构中的每个内容都被视为一种资源,资源类似于面向对象编程世界中的对象。
- 它们可以表示为文本文件、HTML 页面、图像或任何其他动态数据。
- REST 服务器提供对这些资源的访问,而 REST 客户端使用(访问和修改)这些资源。每个资源都通过 URI 全局标识。
# 4、REST 中的无状态是什么概念 ?
答案解析
REST 架构的设计方式是客户端状态不在服务器上维护,这被称为无状态。
- 上下文由客户端提供给服务器,服务器使用该上下文处理客户端的请求
- 服务器上的会话由客户端发送的会话标识符标识。
# 5、什么是 HTTP 状态码 ?
答案解析
这些是参考服务器上任务的预定义状态的标准代码,以下是可用的状态代码格式:
- 1xx - 代表信息响应
- 2xx - 代表成功响应
- 3xx - 表示重定向
- 4xx - 代表客户端错误
- 5xx - 代表服务器错误
最常用的状态码是:
- 200 - 成功/OK
- 201 - 已创建 - 用于 POST 或 PUT 方法。
- 304 - NOT MODIFIED - 用于有条件的 GET 请求以减少网络的带宽使用。在这里,发送的响应正文应该是空的。
- 400 - BAD REQUEST - 这可能是由于验证错误或缺少输入数据。
- 401- UNAUTHORIZED - 当没有与请求一起发送的有效身份验证凭据时返回。
- 403 - FORBIDDEN - 当用户无权访问(或被禁止)资源时发送。
- 404 - NOT FOUND - 资源方法不可用。
- 500 - INTERNAL SERVER ERROR - 服务器在运行该方法时抛出了一些异常。
- 502 - BAD GATEWAY - 服务器无法从另一个上游服务器获得响应。
# 6、什么是 HTTP 方法 ?
答案解析
HTTP 方法构成了统一接口限制的主要部分,其后是 REST,指定必须遵循什么操作才能获取请求的资源,以下是一些 HTTP 方法的示例:
- GET:用于从服务器获取详细信息,基本上是只读操作。
- POST:此方法用于在服务器上创建新资源。
- PUT:此方法用于更新服务器上的旧/现有资源或替换资源。
- DELETE:此方法用于删除服务器上的资源。
- PATCH:用于修改服务器上的资源。
- OPTIONS:这会获取服务器上支持的资源选项列表。
POST、GET、PUT、DELETE 对应于最常称为 CRUD 操作的创建、读取、更新、删除操作。
# 7、你能说出 RESTful Web 服务的缺点吗?
缺点是:
- 由于服务遵循无状态的思想,因此不可能保持会话。(会话模拟的责任在于客户端传递会话 ID)
- REST 本身并不强加安全限制,它继承了实现它的协议的安全措施。
- 因此,必须谨慎选择实施安全措施,例如集成基于 SSL/TLS 的身份验证等。
# 8、说说 RESTful Web 服务的消息传递 ?
答案解析
- 以 HTTP 请求的形式从 REST 客户端向 REST 服务器发送消息
- 服务器以 HTTP 响应的形式返回响应的技术称为消息传递,包含的消息构成有关消息的数据和元数据。
# 9、REST 和 AJAX 有什么区别 ?
REST | AJAX |
---|---|
REST 具象状态转移 | AJAX - 异步 javascript 和 XML |
REST 有一个通过请求-响应模式访问资源的 URI。 | AJAX 使用 XMLHttpRequest 对象向服务器发送请求,响应由 Javascript 代码动态解释。 |
REST 是一种用于开发客户端-服务器通信系统的架构模式。 | AJAX 用于 UI 的动态更新,无需重新加载页面。 |
REST 需要客户端和服务器之间的交互。 | AJAX 支持异步请求,从而消除了不断的客户端-服务器交互的必要性。 |
# 10、你能说出 HTTP Request 的核心组件是什么吗 ?
答案解析
在 REST 中,任何 HTTP 请求都有 5 个主要组件,它们是:
- Method/Verb - 这部分告诉请求操作的方法有:GET、PUT、POST、DELETE 等方法
- URI - 这部分用于唯一标识服务器上的资源
- HTTP 版本 - 这部分指示您使用的 HTTP 协议版本。一个示例可以是 HTTP v1.1
- Request Header 请求头 - 这部分包含请求元数据的详细信息,例如客户端类型、支持的内容格式、消息格式、缓存设置等
- Request Body 请求体 - 这部分表示要发送到服务器的实际消息内容。
# 11、HTTP Response 的核心组件是什么 ?
答案解析
HTTP 响应有 4 个组件:
- 响应状态代码 - 这表示请求资源的服务器响应状态代码。示例 - 400 表示客户端错误,200 表示成功响应。
- HTTP 版本 - 表示 HTTP 协议版本。
- Response Header - 此部分具有响应消息的元数据。数据可以描述什么是内容长度、内容类型、响应日期、什么是服务器类型等。
- Response Body - 这部分包含从服务器返回的实际资源/消息
# 12、 REST 中的 PUT 和 POST 有什么区别 ?
PUT | POST |
---|---|
PUT 方法用于请求服务器将包含的实体存储在请求中。如果请求不存在,则必须创建新资源。如果资源存在,则应更新资源。 | POST 方法用于请求服务器将请求中包含的实体存储为新资源。 |
URI 应该有一个资源标识符。例子:PUT /users/{user-id} | POST URI 应指示资源的集合。例子:POST /users |
PUT 方法是幂等的。 | POST 方法不是幂等的。 |
当客户端想要修改作为集合一部分的单个资源时,使用 PUT。如果必须更新资源的一部分,则需要使用 PATCH。 | POST 方法用于向集合添加新资源。 |
尽管具有幂等性,但响应并未在此处缓存。 | 除非响应在标头中明确指定 Cache-Control 字段,否则响应不可缓存。 |
通常,PUT 用于 UPDATE 操作。 | POST 用于 CREATE 操作。 |
# 13、是什么让 REST 服务易于扩展 ?
答案解析
- REST 服务遵循无状态的概念,这本质上意味着在服务器上的请求中不存储任何数据。
- 这使得水平扩展更容易,因为服务器在服务请求时不需要相互通信。
# 14、使用 Web sockets 和 REST 开发 Web 服务,两者有什么区别 ?
REST | Web Socket |
---|---|
REST 遵循无状态架构,这意味着它不会存储任何基于会话的数据。 | Web Socket API 遵循有状态协议,因为它需要基于会话的数据存储。 |
通信方式是单向的。一次只有服务器或客户端会通信。 | 通信是双向的,通信可以由客户端或服务器一次完成。 |
REST 基于请求-响应模型。 | Web Socket 遵循全双工模型。 |
每个请求都会有标题、标题、正文、URL 等部分。 | Web 套接字没有任何开销,因此适用于实时通信。 |
对于每个 HTTP 请求,都会建立一个新的 TCP 连接。 | 将只有一个 TCP 连接,然后客户端和服务器可以开始通信。 |
REST Web 服务支持垂直和水平缩放。 | 基于 Web 套接字的服务仅支持垂直缩放。 |
REST 依赖于 HTTP 方法来获取响应。 | Web Sockets 依赖于系统的 IP 地址和端口号来获得响应。 |
这里的通信速度较慢。 | 消息传输的速度比 REST API 快得多。 |
这里不需要内存/缓冲区来存储数据。 | 存储数据需要内存。 |
REST 和 Web Socket 的请求流差异如下图所示:
# 15、如何测试 RESTful Web 服务 ?
答案解析
可以使用 Postman、Swagger 等各种工具测试 RESTful Web 服务
- Postman 提供了许多功能,例如向端点发送请求并显示可以转换为 JSON 或 XML 的响应,还提供检查请求参数的功能,例如标头,查询参数,以及响应标头。
- Swagger 还提供了与 Postman 类似的功能,并且还提供了端点文档的功能。
- 我们还可以使用 Jmeter 等工具对 API 进行性能和负载测试。
# 16、POST 方法可以发送的最大有效负载大小是多少 ?
答案解析
- 理论上,可以发送的有效载荷的大小没有限制。
- 但是必须记住,有效负载的大小越大,带宽消耗和处理请求所花费的时间就越大,这会影响服务器性能。
# 17、 HTTP 基本身份验证如何工作 ?
答案解析
- 在实现基本身份验证作为 API 的一部分时,用户必须提供用户名和密码,然后由浏览器以“用户名:密码”的形式连接起来,然后对其执行 base64 编码。
- 然后,编码值作为来自浏览器的每个 HTTP 请求的“授权”标头的值发送。
- 由于凭据仅经过编码,因此,建议在通过 HTTPS 发送请求时使用此表单,因为它们不安全,如果不使用安全协议,任何人都可以拦截。
大厂最新技术学习分享群
微信扫一扫进群,获取资料
X