RESTful Web 服务 - 面试问题



亲爱的读者,这些RESTful Web 服务面试问题专门设计用于让您熟悉在RESTful Web 服务主题的求职面试中可能遇到的问题类型。根据我的经验,优秀的面试官在面试过程中很少计划要问任何特定的问题,通常问题会从该主题的一些基本概念开始,然后根据进一步的讨论以及您的回答继续进行。

REST 代表 REpresentational State Transfer(表述性状态转移)。

REST 是一种基于 Web 标准的架构,使用 HTTP 协议进行数据通信。它围绕资源展开,其中每个组件都是一个资源,并且可以通过使用 HTTP 标准方法的通用接口访问资源。REST 最初由 Roy Fielding 于 2000 年提出。

在 REST 架构中,REST 服务器只需提供对资源的访问,而 REST 客户端访问和呈现资源。此处,每个资源都由 URI/全局 ID 标识。REST 使用各种表示形式来表示资源,例如文本、JSON 和 XML。如今,JSON 是 Web 服务中使用最广泛的格式。

以下众所周知的 HTTP 方法在基于 REST 的架构中常用:

  • GET - 提供对资源的只读访问。

  • PUT - 用于更新/替换新资源。

  • DELETE - 用于删除资源。

  • POST - 用于更新现有资源或创建新资源。

  • OPTIONS - 用于获取资源上支持的操作。

Web 服务是一组用于在应用程序或系统之间交换数据的开放协议和标准。用各种编程语言编写并在各种平台上运行的软件应用程序可以使用 Web 服务通过计算机网络(如互联网)交换数据,其方式类似于单个计算机上的进程间通信。

基于 REST 架构的 Web 服务称为 RESTful Web 服务。这些 Web 服务使用 HTTP 方法来实现 REST 架构的概念。RESTful Web 服务通常定义一个 URI(统一资源标识符)服务,提供资源表示形式(例如 JSON)和一组 HTTP 方法。

REST 架构将每个内容都视为资源。这些资源可以是文本文件、html 页面、图像、视频或动态业务数据。REST 服务器只需提供对资源的访问,而 REST 客户端访问和修改资源。此处,每个资源都由 URI/全局 ID 标识。

REST 使用各种表示形式来表示资源,其中包括文本、JSON、XML。XML 和 JSON 是最流行的资源表示形式。

在 RESTful Web 服务中设计资源表示格式时,需要考虑以下要点:

  • 可理解性 - 服务器和客户端都应该能够理解和利用资源的表示格式。

  • 完整性 - 格式应该能够完整地表示资源。例如,资源可以包含另一个资源。格式应该能够表示资源的简单和复杂结构。

  • 可链接性 - 资源可以与另一个资源链接,格式应该能够处理这种情况。

RESTful Web 服务使用 HTTP 协议作为客户端和服务器之间通信的媒介。

客户端以 HTTP 请求的形式发送消息,服务器以 HTTP 响应的形式进行响应。此技术称为消息传递。这些消息包含消息数据和元数据,即有关消息本身的信息。

HTTP 请求有五个主要部分:

  • 谓词 - 指示 HTTP 方法,例如 GET、POST、DELETE、PUT 等。

  • URI - 统一资源标识符 (URI),用于标识服务器上的资源。

  • HTTP 版本 - 指示 HTTP 版本,例如 HTTP v1.1。

  • 请求头 - 包含 HTTP 请求消息的元数据,以键值对的形式表示。例如,客户端(或浏览器)类型、客户端支持的格式、消息正文的格式、缓存设置等。

  • 请求正文 - 消息内容或资源表示。

HTTP 响应有四个主要部分:

  • 状态/响应代码 - 指示服务器对请求资源的状态。例如,404 表示资源未找到,200 表示响应正常。

  • HTTP 版本 - 指示 HTTP 版本,例如 HTTP v1.1。

  • 响应头 - 包含 HTTP 响应消息的元数据,以键值对的形式表示。例如,内容长度、内容类型、响应日期、服务器类型等。

  • 响应正文 - 响应消息内容或资源表示。

寻址是指定位服务器上的资源或多个资源。它类似于查找一个人的邮政地址。

URI 代表统一资源标识符。REST 架构中的每个资源都由其 URI 标识。

URI 的作用是在托管 Web 服务的服务器上定位资源。

URI 格式如下:

<protocol>://<service-name>/<ResourceType>/<ResourceID>

谓词标识要对资源执行的操作。

在设计 URI 时,需要考虑以下要点:

  • 使用复数名词 - 使用复数名词来定义资源。例如,我们使用 users 来标识用户作为资源。

  • 避免使用空格 - 使用下划线 (_) 或连字符 (-) 在使用长资源名称时,例如,使用 authorized_users 而不是 authorized%20users。

  • 使用小写字母 - 尽管 URI 不区分大小写,但最好只使用小写字母。

  • 保持向后兼容性 - 由于 Web 服务是公共服务,因此一旦公开的 URI 应始终可用。如果 URI 得到更新,请使用 HTTP 状态代码 300 将旧 URI 重定向到新 URI。

  • 使用 HTTP 谓词 - 始终使用 HTTP 谓词(如 GET、PUT 和 DELETE)来对资源执行操作。在 URI 中使用操作名称是不好的做法。

根据 REST 架构,RESTful Web 服务不应该在服务器上保留客户端状态。此限制称为无状态性。客户端有责任将其上下文传递给服务器,然后服务器可以存储此上下文以处理客户端的后续请求。例如,服务器维护的会话由客户端传递的会话标识符标识。

RESTful Web 服务中无状态性的好处如下:

  • Web 服务可以独立处理每个方法请求。

  • Web 服务无需维护客户端之前的交互。它简化了应用程序设计。

  • 由于 HTTP 本身就是一种无状态协议,因此 RESTful Web 服务可以与 HTTP 协议无缝协作。

RESTful Web 服务中无状态性的缺点如下:

如果需要处理客户端交互,Web 服务需要在每个请求中获取额外信息,然后进行解释以获取客户端的状态。

幂等操作意味着无论这些操作被调用多少次,其结果都将始终相同。

PUT 和 DELETE 操作是幂等的。

GET 操作是只读且安全的。

PUT 和 POST 操作几乎相同,区别仅在于结果,其中 PUT 操作是幂等的,而 POST 操作可能导致不同的结果。

它应该列出 Web 服务中支持的操作,并且应该是只读的。

它应该只返回 HTTP 标头,不返回正文,并且应该是只读的。

缓存是指将服务器响应存储在客户端本身中,以便客户端无需反复向服务器请求相同的资源。服务器响应应包含有关如何执行缓存的信息,以便客户端在一段时间内缓存响应或永远不缓存服务器响应。

Date 标头提供资源创建时的日期和时间。

Last Modified 标头提供资源上次修改时的日期和时间。

Cache-Control 是控制缓存的主要标头。

Expires 标头设置缓存的过期日期和时间。

Public 指令指示资源可由任何组件缓存。

Private 指令指示资源只能由客户端和服务器缓存,任何中间代理都不能缓存资源。

no-cache/no-store 指令指示资源不可缓存。

max-age 指令指示缓存有效期最长为 max-age 秒。在此之后,客户端必须发出另一个请求。

must-revalidate 指令指示服务器在 max-age 过期后重新验证资源。

始终将静态内容(如图像、css、JavaScript)设置为可缓存,并设置 2 到 3 天的过期日期。切勿设置过高的过期日期。

动态内容应仅缓存几个小时。

由于 RESTful Web 服务使用 HTTP URL 路径,因此以与保护网站相同的方式保护 RESTful Web 服务非常重要。以下是在设计 RESTful Web 服务时应遵循的最佳实践:

  • 验证 - 在服务器上验证所有输入。保护您的服务器免受 SQL 或 NoSQL 注入攻击。

  • 基于会话的身份验证 - 使用基于会话的身份验证来在每次向 Web 服务方法发出请求时对用户进行身份验证。

  • URL 中不包含敏感数据 - 切勿在 URL 中使用用户名、密码或会话令牌,这些值应通过 POST 方法传递给 Web 服务。

  • 限制方法执行 - 限制使用 GET、POST、DELETE 等方法。GET 方法不应能够删除数据。

  • 验证格式错误的 XML/JSON - 检查传递给 Web 服务方法的输入是否格式良好。

  • 抛出通用错误消息 - Web 服务方法应使用 HTTP 错误消息(例如 403)来显示访问被禁止等信息。

HTTP 状态码是标准代码,指的是服务器上已完成任务的预定义状态。例如,HTTP 状态 404 表示服务器上不存在请求的资源。

表示“OK”,表示成功。

表示“已创建”,当使用 POST 或 PUT 请求成功创建资源时。使用 location 头返回新创建资源的链接。

表示“无内容”,例如 DELETE 请求时响应主体为空。

表示“未修改”,用于在条件 GET 请求的情况下减少网络带宽使用。响应主体应为空。标头应包含日期、位置等信息。

表示“错误请求”,表示提供了无效的输入,例如验证错误、数据缺失。

表示“未授权”,表示用户无权访问正在使用的方法,例如在没有管理员权限的情况下删除访问。

表示“未找到”,表示方法不可用。

表示“冲突”,表示在执行方法时发生冲突情况,例如添加重复条目。

表示“内部服务器错误”,表示服务器在执行方法时抛出了一些异常。

JAX-RS 代表 JAVA API for RESTful Web Services。JAX-RS 是一个基于 JAVA 的编程语言 API 和规范,用于提供对创建 RESTful Web 服务的支持。其 2.0 版本于 2013 年 5 月 24 日发布。JAX-RS 大量使用 Java SE 5 中提供的注解来简化基于 JAVA 的 Web 服务创建和部署。它还提供对创建 RESTful Web 服务客户端的支持。

接下来是什么?

接下来您可以回顾一下您之前完成的与该主题相关的作业,并确保您能够自信地谈论它们。如果您是应届毕业生,面试官不会期望您能回答非常复杂的问题,而是需要您将基本概念掌握牢固。

其次,如果您无法回答一些问题,实际上并不重要,重要的是您回答的任何问题都必须充满自信。所以在面试时要充满自信。Tutorialspoint 祝您面试顺利,并祝您未来的工作一切顺利。干杯 :-)

restful_questions_answers.htm
广告