所有WIKI > R字母 > 什么是REST Payload?

什么是REST Payload?

REST API中,Payload是指客户端在请求中向服务器发送的数据或信息,或服务器响应请求返回的数据。Payload通常包含需要服务器处理或操作的数据,如JSON或XML对象,有时包含图像或视频等二进制数据。

例如,当客户端向服务器发送POST请求以创建新REST资源时,Payload通常以JSONXML格式包含该资源的数据。同样,当客户端发送PUT请求以更新现有资源时,Payload将包含该资源的更新数据。

Payload是REST API的重要组成部分,因为它包含客户端和服务器之间传输的实际数据。重要的是要确保Payload根据API的规范进行适当的格式化和结构化,以确保数据的正确通信和处理。

JSON Payload格式示例:

{"cid":1,"cname": "Ramesh","电子邮件": "ramesh@gmail.com"}

XML Payload格式示例:

<客户><cid>1</cid><cname>Ramesh</cname><email>ramesh@gmail.com</email></客户>

其它REST API使用的一些基本概念:

✅  REST API – HTTP Methods
✅  REST API – HTTP Status Codes
✅  10大REST API常见问题?

Payload组成

内容:

Payload携带数据,数据可以以各种格式构建,如JSON、XML甚至纯文本。在RESTful API领域,由于其轻量级和易用性,JSON仍然是最受欢迎的选择。

HTTP标头:

伴随Payload的是HTTP标头,提供有关Payload的元信息,例如其类型(内容类型标头,例如应用程序/json)和长度(内容长度标头)。

HTTP请求消息中的“内容类型”标头名称用于表示HTTP请求消息中的Payload格式。例如JSON、XML等。

HTTP请求消息中的“接受”头名称用于表示HTTP响应消息中的预期Payload格式。示例:JSON、XML、纯文本、HTML等。

不同HTTP方法中的Payload

GET:通常,GET请求获取数据。虽然这些请求通常没有请求主体(Payload),但一些高级API可能会使用该主体来发送广泛的搜索或过滤标准。

POST:创建新资源时,Payload通常携带新实体的数据。

PUT:用于更新资源,这里的Payload包含完整的更新数据。

补丁:此方法用于部分更新,Payload仅包含用于修改的特定字段。

删除:虽然删除操作通常没有Payload,但一些API希望在请求正文中添加额外的删除相关数据。

HTTP请求和响应Payload JSON示例

HTTP请求消息示例:

带有JSON Payload的HTTP请求消息通常结构为:

  • 请求行,包括HTTP方法、请求URI和HTTP版本。
  • 提供有关请求的元信息的标题
  • 指示标题结尾的空白行
  • 消息主体,其中包含JSON有效负载。

让我们来举个例子。想象一下,您正在开发一个RESTful API来管理图书集合,并且您想在集合中添加一本新图书。

POST /api/books HTTP/1.1
Host: www.example.com
User-Agent: Mozilla/5.0
Accept: application/json
Content-Type: application/json
Content-Length: 112

{
"title": "The Great Gatsby",
"author": "F. Scott Fitzgerald",
"year": 1925,
"genre": "Fiction"
}

解释:

请求行:

  • POST是HTTP方法,表示我们要创建一个新资源。
  • /api/books是请求URI,指定我们目标的端点。
  • HTTP/1.1是HTTP版本。

标题:

  • 主机:指定服务器的域名。
  • 用户代理:指示客户端的软件(例如,网络浏览器或其他客户端)。
  • 接受:告诉服务器客户端在响应中期望的数据类型。
  • 内容类型:指定发送到服务器的数据的媒体类型,在这种情况下是application/json
  • Content-Length:表示请求主体的长度。

空白行:这将标题与正文分开。

消息正文:包含代表书籍详细信息的JSON有效负载。

这是一个基本的例子。在现实世界的场景中,可能会有额外的标头,如用于身份验证目的的授权,或根据API的要求出现其他复杂性。

HTTP响应消息示例:

让我们考虑一个场景来延续上一本书的例子。假设服务器处理了添加新书的请求,现在想要向客户端返回确认。

HTTP响应消息示例:

HTTP/1.1 201 Created
Date: Mon, 15 Aug 2023 12:30:00 GMT
Server: Apache/2.4.1 (Unix)
Content-Type: application/json
Content-Length: 150

{
"id": 12345,
"title": "The Great Gatsby",
"author": "F. Scott Fitzgerald",
"year": 1925,
"genre": "Fiction",
"message": "Book successfully added!"
}

解释:

状态线:

  • HTTP/1.1:HTTP版本。
  • 201已创建:这是状态代码及其相关消息。201状态表示请求已得到满足,从而创建了新资源。

标题:

  • 日期:发送消息的日期和时间。
  • 服务器:有关服务器用于处理请求的软件的信息。
  • 内容类型:指定返回数据的媒体类型,在本例中,application/json。
  • 内容长度:表示响应主体的长度。

空白行:这将标题与正文分开。

消息正文:包含JSON Payload,在本例中,该Payload提供了已添加书籍的详细信息以及确认成功添加的消息。

同样,这是一个简单的例子。根据API和应用程序的需求,现实世界的场景可能会有额外的标头或复杂性。

HTTP请求和响应Payload XML示例

HTTP请求XML Payload示例

消费者意味着客户端应用程序有责任准备和发送HTTP请求消息,如下所示:

POST /SpringBootREST/customers HTTP/1.1
Accept: application/xml
Content-Type: application/xml
Content-Length: 196
User-Agent: Java/1.7.0_25
Host: 127.0.0.1:7000
Connection: keep-alive

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<customer>
<cid>0</cid>
<cname>Ramesh</cname>
<email>ramesh@gmail.com</email>
</customer>

从上述HTTP请求中,Payload是指HTTP请求消息中的正文。它是可选的,取决于HTTP方法名称,即

  • 在GET HTTP方法的情况下,HTTP请求消息没有正文。
  • 在POST HTTP方法的情况下,带有正文的HTTP请求消息

上述HTTP请求消息中的“内容类型”标头名称用于表示HTTP请求消息中的Payload格式,Payload格式为XML

HTTP请求消息中的“接受”标头名称用于表示HTTP响应消息中的预期Payload格式,Payload格式为XML

Http响应XML Payload示例

业务组件(由服务提供商开发)有责任准备和发送HTTP响应消息,如下所示:

HTTP/1.1 200 OK
Content-Type: application/xml
Server: Apache-Coyote/1.1
Transfer-Encoding: chunked
Date: Mon, 10 Nov 2019 09:45:34 GMT
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<customer>
<cid>1</cid>
<cname>Ramesh</cname>
<email>ramesh@gmail.com</email>
</customer>

HTTP响应消息包含任何一个HTTP状态代码,范围在100到599之间:

信息:1xx

成功:2xx

重定向:3xx

客户端错误:4xx

服务器端错误:5xx

REST API上阅读有关HTTP状态代码的更多信息-HTTP状态代码

从上述响应消息中,有效负载是指HTTP响应消息中的正文,有效负载为XML格式。

参考资料

英文原文: What is Payload in REST API?