REST

REST 代表着什么?

REST 代表着抽象状态转移,它是根据 HTTP 协议从客户端发送数据到服务端。例如:服务端的一本书可以以 XML 或 JSON 格式传递到客户端。

资源是什么?

资源是指数据在 REST 架构中如何显示的。将实体作为资源公开 ,它允许客户端通过 HTTP 方法如:GET, POST,PUT, DELETE 等读,写,修改和创建资源。

什么是安全的 REST 操作?

REST 接口是通过 HTTP 方法完成操作。

  • 一些HTTP操作是安全的,如 GET 和 HEAD ,它不能在服务端修改资源
  • 换句话说,PUT,POST 和 DELETE 是不安全的,因为他们能修改服务端的资源。
    所以,是否安全的界限,在于是否修改服务端的资源。

什么是幂等操作? 为什么幂等操作如此重要?

有一些HTTP方法,如:GET,不管你使用多少次它都能产生相同的结果,在没有任何一边影响的情况下,发送多个 GET 请求到相同的URI 将会产生相同的响应结果。因此,这就是所谓幂等操作。
换句话说,POST方法不是幂等操作 ,因为如果发送多个 POST 请求,它将在服务端创建不同的资源。但是,假如你用PUT更新资源,它将是幂等操作。

REST 是可扩展的或说是协同的吗?

是的,REST 是可扩展的和可协作的。它既不托管一种特定的技术选择,也不定在客户端或者服务端。你可以用 Java, C++, Python, 或 JavaScript 来创建 RESTful Web 服务,也可以在客户端使用它们。

REST 用哪种 HTTP 方法呢?

  • 用 GET 来检索服务端资源
  • 用 POST 来创建服务端资源
  • 用 PUT 来更新服务端资源
  • 用 DELETE 来删除服务端资源。

删除的 HTTP 状态返回码是什么 ?

在删除成功之后,您的 REST API 应该返回什么状态代码,并没有严格的规则。它可以返回 200 或 204 没有内容。

  • 一般来说,如果删除操作成功,响应主体为空,返回 204 。
  • 如果删除请求成功且响应体不是空的,则返回 200

REST API 是无状态的吗?

是的,REST API 应该是无状态的,因为它是基于 HTTP 的,它也是无状态的。
REST API 中的请求应该包含处理它所需的所有细节。它不应该依赖于以前或下一个请求或服务器端维护的一些数据,例如会话。
REST 规范为使其无状态设置了一个约束,在设计 REST API 时,您应该记住这一点。

REST安全吗? 你能做什么来保护它?

安全是一个宽泛的术语。它可能意味着消息的安全性,这是通过认证和授权提供的加密或访问限制提供的。
REST 通常不是安全的,但是您可以通过使用 Spring Security 来保护它。

  • 至少,你可以通过在 Spring Security 配置文件中使用 HTTP 来启用 HTTP Basic Auth 基本认证。
  • 类似地,如果底层服务器支持 HTTPS ,你可以使用 HTTPS 公开 REST API 。

RestTemplate 的优势是什么?

在 Spring Framework 中,RestTemplate 类是 模板方法模式 的实现。跟其他主流的模板类相似,如 JdbcTemplate 或 JmsTempalte ,它将在客户端简化跟 RESTful Web 服务的集成。正如在 RestTemplate 例子中显示的一样,你能非常容易地用它来调用 RESTful Web 服务。

实际场景还是更喜欢使用 OkHttp 作为 HTTP 库,因为更好的性能,使用也便捷,并且无需依赖 Spring 库。

HttpMessageConverter 在 Spring REST 中代表什么?

HttpMessageConverter 是一种策略接口 ,它指定了一个转换器,它可以转换 HTTP 请求和响应。Spring REST 用这个接口转换 HTTP 响应到多种格式,例如:JSON 或 XML 。
每个 HttpMessageConverter 实现都有一种或几种相关联的MIME协议。Spring 使用 “Accept” 的标头来确定客户端所期待的内容类型。
然后,它将尝试找到一个注册的 HTTPMessageConverter ,它能够处理特定的内容类型,并使用它将响应转换成这种格式,然后再将其发送给客户端。

如何创建 HttpMessageConverter 的自定义实现来支持一种新的请求/响应?

我们仅需要创建自定义的 AbstractHttpMessageConverter 的实现,并使用 WebMvcConfigurerAdapter 的 #extendMessageConverters(List<HttpMessageConverter<?>> converters) 方法注中册它,该方法可以生成一种新的请求 / 响应类型。

@PathVariable 注解,在 Spring MVC 做了什么? 为什么 REST 在 Spring 中如此有用?

@PathVariable 注解,是 Spring MVC 中有用的注解之一,它允许您从 URI 读取值,比如查询参数。它在使用 Spring 创建 RESTful Web 服务时特别有用,因为在 REST 中,资源标识符是 URI 的一部分。