API,即应用程序编程接口,扮演着应用程序访问其他应用程序资源的门户角色。
使用 API 的优点在于,它可以提供对第三方应用程序的访问,同时避免它们直接接触您应用程序的所有数据。 它们只能访问通过 API 暴露的数据。
请求数据的应用程序或用户被称为客户端,而提供数据的应用程序被称为服务器。
现今,API 已在各种软件架构中得到广泛应用。 无论您应聘前端、后端、全栈或网络工程师的职位,都很有可能会被问到关于 API 的问题。
接下来,我们将深入探讨一些关于 REST API 的常见面试问题。
什么是 REST?
回答:REST 是一种架构风格,它规定了 API 工作方式的一些约束。 符合 REST 原则的 API 被称为 RESTful API。 REST 代表具象状态传输。
它不是一种协议或标准,而是一种可用于以多种方式构建 API 的架构模式。
它为开发人员提供了极高的灵活性和自由度,这也是它被广泛应用于 API 开发的原因。 以下是 REST 架构的一些核心原则:
- 客户端与服务器分离:在 RESTful API 中,客户端除了通过 URI(统一资源标识符)请求数据外,不应以任何其他方式影响服务器。 同样,服务器也不应以任何方式修改客户端的内容。
- 无状态性:当发出两个独立的请求时,它们之间没有任何关联。 换句话说,请求是无状态的,不保留之前的状态。 一旦请求得到满足,它就会结束。 每个请求都与其他请求隔离。
- 分层架构:客户端和服务器都不知道请求是直接发送到原始应用程序还是中间应用程序。 它们只关注对请求的响应。
- 可缓存性:数据或响应可以在客户端和服务器端缓存,从而提高性能和可扩展性。 如果对特定资源有频繁的请求,则可以缓存响应并在需要时使用。
REST 的一些关键特征是什么?
回答:REST 的主要特征包括:
- 灵活性:您可以从一台服务器迁移到另一台服务器,API 仍然会针对相同的请求发送相同的响应。 此外,您可以为不同类型的数据添加任意数量的端点。
- 可扩展性:缓存提高了可扩展性,因为响应被保存起来以备后用。 这减轻了服务器的负载,并减少了延迟。
- 授权:通过授权标头,您可以指定服务器用于授权请求的凭据。
- 无状态性:这是 REST 最重要的特征,它保证请求之间互不干扰。 请求一旦完成就会被隔离和终止。
什么是 REST 架构中的资源?
回答:资源是您可以对其执行不同操作(例如检索、更新或删除)的实体。 它们是 REST 架构的基本构成要素。
例如,在在线电子商务商店中,产品、用户和元数据都可以被视为资源,因为它们可以被操作。 资源可以通过 API 传输到其他应用程序。
列举 REST API 的一些优点和缺点。
回答:REST API 的优点如下:
- 易于实现。
- 资源可以轻松管理。
- 由于客户端-服务器架构,它具有良好的可扩展性。
- 支持多种数据传输格式,例如 XML 和 JSON。
其缺点包括:
- 无法在请求之间保持状态。
- 由于分层架构,无法确定资源的真正来源。
- 不适合复杂的查询或请求。
定义 REST 模板。
回答:REST 模板是一个实用程序或客户端,您可以使用它访问 Spring 框架中的 REST API。 它主要隐藏了您可能需要编写的样板代码,以便从 REST API 请求资源。
什么是 RESTful?
回答:RESTful API 或服务是指实现 REST (Representational State Transfer) 架构风格并使用 HTTP 等协议工作的接口。
什么是 RESTful Web 服务?
回答:RESTful Web 服务是为了在 Web 环境中良好运行而构建的。 表述性状态传输 (REST) 是一种架构风格,它定义了诸如统一接口、分层架构和无状态等约束,当应用于 Web 服务时,可以引入所需的属性,例如性能和可扩展性,从而使服务能够在网络上高效运行。
如何测试 RESTful Web 服务?
回答:要测试 RESTful Web 服务,您可以使用 Postman 或 Thunder Client 等 REST 客户端,查询需要测试的 Web 服务。 获得响应后,理解响应至关重要。
如果要测试具有多个端点的复杂 API,您可能需要分解测试并执行单元测试、集成测试、性能测试和端到端测试。
列举 RESTful Web 服务的一些特性。
回答:RESTful Web 服务的一些关键特性包括:
- 支持多种媒体类型,例如 JSON 和 XML。
- 具有可扩展性
- 客户端和服务器之间的隔离
- 灵活性
定义 RESTful 根资源类。
回答:根资源类是“普通的旧 Java 对象”(POJO),它们要么用 @Path 注释,要么至少有一个方法用 @Path 或请求方法指示符注释,例如 @GET、@POST、@PUT 或 @DELETE。
什么是 URI?
回答:URI 代表统一资源标识符。 它是一个用于定位或标识 API 或服务资源的字符序列。 它使用资源的名称或位置来标识它,但它不依赖于特定的方法或技术。
什么是 REST 中的无状态性?
回答:无状态性是指对 API 应用一种约束,即任何两个请求彼此之间没有任何关联。 换句话说,不会维护请求的状态。 如果请求得到满足,它会在收到响应后终止。
什么是 JAX-RS?
回答:JAX-RS 是一个 Java API,它允许您使用 REST 架构开发 Java 应用程序。 此 API 使使用 Java 开发 REST 应用程序变得更加容易。
JAX-RS API 中的关键注解是什么?
回答:开发人员使用 JAX-RS 中的注释来装饰 Java 类,以便定义资源以及可以在这些资源上执行的方法。 JAX-RS API 的一些关键注释包括:
- @GET:用于 HTTP 中的 GET 请求。
- @POST:用于在 HTTP 中发起 POST 请求。
- @Path:用于指定 Java 类的相对路径。
- @QueryParam:用于指定 URI 或 URL 的查询参数。
JAX-RS API 的一些主要特性是什么?
回答:JAX-RS 的主要特性包括:
- 客户端缓存
- 服务器端缓存
- 查询字符串定制
- 运行时注解
如何配置 JAX-RS 应用程序?
回答:JAX-RS 应用程序至少包含一个打包在 WAR 文件中的资源类。 应用程序资源响应请求的基本 URI 可以通过以下两种方式之一设置:
- 在 WAR 中打包的 javax.ws.rs.core.Application 的子类中使用 @ApplicationPath 注释
- 在 WAR 的 web.xml 部署描述符中使用 servlet-mapping 标签
什么是 JAX-WS 和 JAX-RS?
回答:JAX-WS 是一个 Jakarta XML Web Services API,用于使用简单对象访问协议 (SOAP)(一种基于 XML 的消息传递协议)开发 API。
另一方面,JAX-RS 是一个用于使用 REST 架构创建 Web 服务的 Java API。
什么是 HTTP 状态代码?
回答:状态代码是服务器向客户端传达响应状态的一种方式。 它们存在于服务器发送的响应头中。
客户端可以使用状态代码来确定请求是否失败、是否完成,或者响应中是否存在问题。
以下是一些常见的 HTTP 状态代码:
- 200 – 表示“OK”。 表示请求已完成并且响应正常。
- 404 – 表示“未找到”。 这意味着服务器上不存在请求的资源或端点。
- 500 – 表示“内部服务器错误”。 这通常发生在服务器无法生成正确的响应或出现未明确抛出的错误时。
- 503 – 表示“服务不可用”。 这意味着目前,服务器无法处理任何请求,可能是因为服务器已关闭或由于请求过多而无法正常工作。 它也可能在服务器进行维护时发生。
什么是 HTTP 方法?
回答:HTTP 方法用于对 API 的特定资源执行特定类型的操作。 例如,如果您想从电影集合 API 中获取电影列表,则可以使用 HTTP 提供的 GET 方法。 如果要更新数据,则可以使用 HTTP 提供的 POST 方法。
常用的 HTTP 方法如下:
- GET:使用 GET 的请求应该只检索数据。
- POST:它通过向服务器发送新更新的资源来更新资源。
- DELETE:它删除指定的资源。
- PATCH:部分修改资源。
HTTP 基本身份验证如何工作?
回答:身份验证是验证客户端身份以确保数据安全的过程。 在 HTTP 中,身份验证通过客户端发送的授权标头进行。
授权标头由客户端的用户名/ID 和密码组成,然后由服务器验证,并授予访问权限。
需要注意的是,在使用 HTTP 身份验证时,凭据传输的通道应加密且安全。 您可以使用集成到 HTTPS 中的 SSL 层来保护通道。 因此,建议在处理凭据时使用 HTTPS 而不是普通的 HTTP。
HTTP 请求的核心组件是什么?
回答:HTTP 请求由以下几部分组成:
- 请求行:它是任何请求的第一行,由 HTTP 方法、路径或端点以及 HTTP 版本号组成。
- 标头:HTTP 标头用于提供请求的元数据。
- 正文(可选):此组件仅适用于某些请求方法。 GET 请求不需要它,但 POST 请求需要它。 它是请求的实际消息。
HTTP 响应的核心组件是什么?
回答:HTTP 响应由以下组件组成:
- 状态:指服务器发送的 HTTP 状态代码。
- 标头:就像请求一样,响应也有各自的标头,这些标头提供有关响应的有用信息。
- 消息:这是服务器发送给客户端以请求特定资源的实际数据。
REST 和 AJAX 有什么区别?
回答:AJAX 是一个客户端,您可以使用它来访问 RESTful API。 它用于使用 JavaScript 发送异步请求。
REST,即表述性状态传输,是一种可以实现以创建 RESTful API 的架构模式。 简而言之,可以使用 AJAX 作为客户端发送 HTTP 请求,但如果您想实现 RESTful API,则必须遵循 REST 架构。
SOAP 和 REST 之间有什么区别?
回答:表述性状态传输或 REST 是一种对创建 API 具有最少约束的架构。 SOAP,即简单对象访问协议,是一种对实现 API 有严格要求的协议。
REST 比 SOAP 更灵活、更易于使用。 SOAP 中使用基于 XML 的消息传递,而在 REST 中,可以使用许多数据传输类型,例如 JSON、XML 等。与 SOAP 相比,REST 更轻量级和快速。
SOAP Web 服务具有内置的安全性,这是 SOAP 比 REST 的一个优势,但其添加的功能也使其使用起来复杂且繁琐。
PUT 和 POST 有什么区别?
回答:POST 是一种 HTTP 请求方法,用于向服务器发送数据。 如果您对特定资源发出多个 POST 请求,可能会对您的数据产生副作用。 例如,如果您想将一篇文章添加到集合中,如果您发出多个 POST 请求,则会将多篇文章添加到集合中,从而导致文章重复。
PUT 是一种 HTTP 请求方法,用于向服务器发送特定资源的数据,但仅更新一次数据。 如果您为特定资源发送多个 PUT 请求,则不会产生副作用,数据只会添加一次。 在 PUT 中,如果资源不存在,则会创建新资源,如果存在,则会更新现有资源。
PUT 是幂等的,而 POST 不是。
什么是有效负载?
回答:在 REST API 中,有效负载是从客户端发送到服务器的请求主体。 这是您要发送到服务器并获得响应的数据。
Post 方法可以发送的最大有效负载大小是多少?
回答:HTTP 协议本身没有设置默认限制。 限制取决于客户端或服务器的最大限制,以较小者为准。
在创建 URI 时,需要遵循哪些最佳实践?
回答:设计 URI 时需要记住的关键点包括:
- 避免使用文件扩展名
- 保持所有 URI 的一致性
- 将 URI 分为不同资源集的域和子域
- 应使用连字符或下划线分隔 URI 中句子中的单词
- 应使用正斜杠指示资源的层次结构
- 使用适当的编码对 URI 进行编码
- 尝试使 URI 对人类可读
什么是幂等方法?
回答:幂等 HTTP 方法在服务器上具有相同的效果,即使发送了多个相同的请求。 例如,如果您为特定资源发送多个相同的 DELETE 请求,则该资源不会在每次请求时都发生变化。 它的更新效果就像只发送了一个请求。
一些幂等方法包括:
- PUT
- DELETE
- GET
- HEAD
- OPTIONS
什么是 Postman?
回答:Postman 是一个 API 开发工具,用于开发、修改和测试 API。 它提供了许多功能来快速构建和测试 API,而无需设置客户端。
回答:Cache-Control 标头包含在浏览器和服务器中配置缓存的指令。 它告诉浏览器或服务器要缓存什么以及在通过网络请求之前应该缓存多长时间。
Cache-Control 标头包括以下指令:
- max-age
- no-cache
- private
- public
- no-store
- immutable
在 RESTful Web 服务中定义消息传递。
回答:在 RESTful Web 服务中,消息传递是指客户端向服务器发送 HTTP 请求,服务器以 HTTP 响应来响应请求。 客户端和服务器之间的这种通信称为消息传递。
单体、SOA 和微服务架构之间有什么区别?
回答:在单体架构中,所有内容都在一个地方管理。 客户端、服务器和数据库都在一个地方管理。 这就是为什么它被称为单体,因为“单体”这个词指的是单个块或石头。
SOA 代表面向服务的架构。 在这种架构中,应用程序的不同方面由不同的服务管理,这些服务也是软件。 因此,它是多个服务软件模块的组合。 集成是该架构的关键组成部分。
微服务架构类似于 SOA,但与 SOA 不同的是,它具有多个自治的软件程序,它们使用 API 相互通信。 与单体架构不同,这里所有内容都是自治的,并且在某种程度上是独立的。
微服务架构如何工作?
回答:在微服务架构中,应用程序被分解成更小的子单元,这些子单元彼此独立且独立工作,但它们通过一组明确定义的 API 相互通信。
微服务架构的一些优点包括:敏捷性、灵活性、可扩展性、独立技术、可重用服务和易于部署。
什么是 CRUD?
回答:CRUD 代表创建、读取、更新、删除。 这些是对特定资源可以执行的操作。 支持所有这些操作的 API 被称为 CRUD API。 这些是 API 可以对资源执行的最基本操作。
什么是缓存?
回答:缓存是一种在客户端或服务器上存储响应或请求以供以后再次使用的技术。
响应通常缓存在客户端上,因为如果客户端在短时间间隔内多次发出相同的请求,则通过网络再次请求响应并浪费带宽是没有意义的。
@RequestMapping 有什么用途?
回答:它是 Spring 框架中的一个注解,用于将 Web 请求映射到特定的处理程序类和/或处理程序方法。
@PathVariable 做什么?
回答:Spring 框架中的 @PathVariable 注解用于提取模板变量的值,并将其赋值给方法变量。
定义 HttpMessageConverter。
回答:当 HTTP 请求(或其部分)需要转换为处理程序方法所需的类型时,或者当处理程序方法返回的值需要以某种方式转换以创建 HTTP 响应时,HTTP 使用消息转换器。
回答:一些可以帮助您进行 API 测试的工具包括:
- Postman
- Rest Assured
- SoapUI
- Katalon
- ReadyAPI
- Apigee
最后的话
如今,由于互联网的普及,API 变得非常流行。 REST API 流行的另一个原因是它们易于开发和使用。
如果您正在准备面试,请考虑面试中可能被问到的上述关于 REST API 的问题。
接下来,您可以了解如何使用 techblik.com 的 Web Scraping API 来抓取网站。