REST api基础

构建REST服务器的部分过程是为该服务器构建API。REST API是HTTP谓词、URL对以及作为请求或响应的一部分发送到服务器或从服务器发送的任何对象的规范的集合。

在本课程中,我们将始终使用JSON格式来编码需要在请求或响应的正文中发送到服务器或从服务器发送的任何对象。Spring Boot自动支持将请求体中的JSON内容转换为Java对象,并支持将响应中返回的任何Java对象转换为JSON。

API设计

本文档列出了REST API设计的基础知识。我使用的API设计策略是基于工业中使用的标准API设计策略。作为更详细的API设计指南的示例,您可以查看谷歌的云API设计指南。

HTTP动词

REST服务器使用HTTP作为赢博体育客户机通信的本机通信协议。每个HTTP请求都以HTTP动词开始,因此了解哪些动词可用以及围绕它们的使用惯例是我们必不可少的第一步。

下面是一个最常见的HTTP动词表,以及它们的用法。

动词 描述
得到 从服务器获取数据
帖子 在服务器上存储一个对象
删除 删除已有对象
替换现有对象
补丁 更新现有对象的部分或全部

这里的一个重要区别是POST、PUT和PATCH之间的区别。POST用于在服务器上存储全新的实体。在我们已经看到的示例中,我使用POST来上传新的用户帐户。如果新用户的用户名与现有用户的用户名匹配,我编写的POST请求处理代码将拒绝新用户。PUT和PATCH用于更新现有实体。例如,如果我们想要更新现有用户的密码而不更改其用户id或用户名,我们将使用PUT或PATCH。PUT要求我们上传一个完整的对象,其中包含我们正在更新的对象的赢博体育字段。另一方面,PATCH可用于选择性地更新对象的一部分。

HTTP URL约定

HTTP请求的第二个重要部分是URL。URL标识我们正在使用的服务器上的特定实体。本文档其余部分的大部分内容涵盖了为rest赢博体育程序构造url时广泛使用的约定。

我们在处理url时遇到的第一个概念是REST资源的概念。资源是我们希望服务器处理的特定数据类。我们构建的每个赢博体育程序都将由一组主要资源和一组辅助资源组成。

例如,在拍卖赢博体育程序中,我们将使用的两个主要资源包括用户和拍卖。下面是一些典型的资源url示例,我们将使用这些类来工作:

远程过程调用

标准HTTP动词以及我上面展示的URL模式通常足以处理特定API所需的大多数交互。然而,也有很多情况不符合这个框架。在某些情况下,我们希望执行的操作在性质上更接近传统编程语言中的函数调用。

这里有一个相当明显的例子。我们需要在API中支持的操作之一是检查给定的用户名/密码组合是否正确,然后获取该用户的用户id。在传统的编程语言中,我们会设置一个函数来检查用户名和密码:

字符串loginCheck(字符串名称,字符串密码)

该函数将返回用户的用户id,如果用户名或密码不正确,则返回空字符串。

对我们来说幸运的是,HTTP协议足够灵活,允许我们拼凑一些近似于函数调用的东西。以下是主要观点。

  1. 首先构造一个包含参数值的对象。在密码检查的情况下,我们将创建一个具有名称和密码属性的JSON对象。
  2. 然后将该参数对象作为POST的主体发送到一个特殊的行动URL。例如,要处理密码检查,我们可以使用的操作URL/ /用户登录
  3. 通常从函数返回的值只是作为POST响应的主体返回。