客户端向服务端传参5个方式

/**

 * get: parmas方式 例子:/:id

 * get: query方式 例子:/home?name=xxx&age=xxx

 * get: json方式 例子:{"name":"xxx","age":"xxx"}

 * post: x-www-form-urlencoded方式 例子: name=xxx&age=xxx

  * post: from-data方式

 */

告知编码方式后,服务器再进行解码

HTTP 数据编码方式

HTTP数据编码方式主要涉及到请求和响应体中的数据表示方法,它决定了数据如何在网络上传输以及如何在接收端被解析。以下是HTTP中常见的几种数据编码方式:

  1. application/x-www-form-urlencoded
    这是最常见的表单数据编码方式。当用户在Web表单中输入数据并提交时,浏览器通常会使用这种编码方式。它将表单数据编码为键值对,每个键值对之间用&分隔,键和值之间用=连接。例如,name=John&age=30

  2. multipart/form-data
    这种编码方式主要用于文件上传。它可以将表单数据分割成多个部分,每个部分可以包含不同的字段,包括文件。每个部分都有自己的头部,描述了该部分的内容类型和可能的文件名。这种方式可以确保文件和其他二进制数据能够安全地传输。

  3. text/plain
    这种编码方式用于纯文本数据。它不对数据进行任何特殊的编码或格式化,只是简单地发送原始文本。

  4. JSON
    JSON(JavaScript Object Notation)是一种轻量级的数据交换格式。在HTTP请求或响应中,JSON数据通常以application/json的MIME类型发送。它使用易于阅读和编写的文本格式来存储和表示数据,具有自我描述性,易于理解。

  5. 其他媒体类型
    HTTP还支持许多其他的媒体类型,如image/jpegaudio/mpegvideo/mp4等,用于传输图片、音频、视频等多媒体内容。这些类型的数据通常使用二进制编码,并在HTTP响应中指定相应的MIME类型。

在发送HTTP请求或处理HTTP响应时,选择正确的编码方式非常重要。错误的编码方式可能导致数据丢失、损坏或无法被正确解析。因此,了解每种编码方式的特点和用途,并根据具体的应用场景选择合适的编码方式至关重要。

parmas

在Web开发中,特别是当涉及到RESTful API设计时,:id 这种形式的路径参数(path parameter)是非常常见的。这种参数用于标识资源的一个特定实例,如用户、文章、产品等。当你看到像 /:id 这样的路径时,它意味着在这个位置应该插入一个具体的值来标识一个特定的资源。

例如,假设你有一个API用于获取特定用户的信息,该API的路径可能是 /users/:id。在这个路径中,:id 是一个路径参数,它代表用户的唯一标识符。

下面是一个使用HTTP GET方法和路径参数的例子:

API路径

 

复制代码

/users/:id

请求示例

 

http复制代码

GET /users/123 HTTP/1.1
Host: example.com

在这个例子中,我们请求 /users/123,其中 123 是路径参数 :id 的具体值,代表用户ID。服务器会解析这个请求,并根据ID 123 来查找和返回相应的用户信息。

响应示例

 

http复制代码

HTTP/1.1 200 OK
Content-Type: application/json
{
"id": 123,
"name": "John Doe",
"email": "johndoe@example.com"
}

服务器返回了一个HTTP 200状态码,表示请求成功,并在响应体中包含了用户ID为123的用户信息,这些信息是以JSON格式表示的。

在编写后端代码时,你需要使用相应的Web框架来解析路径参数。例如,在Express.js(一个流行的Node.js Web框架)中,你可以这样定义路由:

 

javascript复制代码

app.get('/users/:id', function(req, res) {
const userId = req.params.id; // 从请求中获取路径参数
// 根据userId查询数据库或其他数据源,并返回结果
// ...
res.json({ id: userId, name: 'John Doe', email: 'johndoe@example.com' });
});

在这个Express路由中,:id 是一个占位符,当请求匹配这个路由时,Express会自动将路径中的值赋给 req.params.id,然后你可以在路由处理函数中使用这个值。

在RESTful API设计中,查询参数(query parameters)是一种用于从服务器检索资源时传递额外信息的常见方式。这些参数附加在URL的末尾,并以问号(?)开始,参数之间使用和号(&)分隔。查询参数通常用于过滤、排序、分页等。

下面是一个使用HTTP GET方法和查询参数的例子:

API路径

 

复制代码

/home

请求示例

 

http复制代码

GET /home?name=xxx&age=xxx HTTP/1.1
Host: example.com

在这个例子中,我们请求 /home 路径,并附加了两个查询参数:name 和 agename=xxx 和 age=xxx 是键值对,其中 xxx 是具体的值。这些值可以是任何字符串,具体取决于API的设计和需求。

响应示例

服务器会根据查询参数来过滤或处理数据,并返回相应的结果。响应的格式取决于API的实现,但通常会是JSON或其他结构化数据格式。

 

http复制代码

HTTP/1.1 200 OK
Content-Type: application/json
[
{
"id": 1,
"name": "xxx",
"age": 25
},
{
"id": 2,
"name": "xxx",
"age": 30
}
// 可能还有其他匹配条件的结果
]

在编写后端代码时,你需要解析查询参数以获取传递的值。以下是一个使用Express.js的示例:

 

javascript复制代码

app.get('/home', function(req, res) {
const name = req.query.name; // 从请求中获取name查询参数
const age = req.query.age; // 从请求中获取age查询参数
// 根据name和age查询数据库或其他数据源,并返回结果
// ...
// 假设我们从数据库中获取了匹配条件的结果列表
const results = [
{ id: 1, name: 'xxx', age: 25 },
{ id: 2, name: 'xxx', age: 30 }
];
res.json(results); // 返回JSON格式的响应体
});

在这个Express路由中,req.query 对象包含了所有的查询参数。你可以通过 req.query.name 和 req.query.age 来获取相应的值,并在路由处理函数中使用这些值来查询或过滤数据。

请注意,查询参数的值应该被适当地验证和清理,以防止安全漏洞,如SQL注入等。此外,对于敏感信息或大量数据,通常不推荐使用查询参数来传递,而是应该考虑使用POST请求体或其他安全的方式来传输数据。

query

在RESTful API设计中,查询参数(query parameters)是一种用于从服务器检索资源时传递额外信息的常见方式。这些参数附加在URL的末尾,并以问号(?)开始,参数之间使用和号(&)分隔。查询参数通常用于过滤、排序、分页等。

下面是一个使用HTTP GET方法和查询参数的例子:

API路径

 

复制代码

/home

请求示例

 

http复制代码

GET /home?name=xxx&age=xxx HTTP/1.1
Host: example.com

在这个例子中,我们请求 /home 路径,并附加了两个查询参数:name 和 agename=xxx 和 age=xxx 是键值对,其中 xxx 是具体的值。这些值可以是任何字符串,具体取决于API的设计和需求。

响应示例

服务器会根据查询参数来过滤或处理数据,并返回相应的结果。响应的格式取决于API的实现,但通常会是JSON或其他结构化数据格式。

 

http复制代码

HTTP/1.1 200 OK
Content-Type: application/json
[
{
"id": 1,
"name": "xxx",
"age": 25
},
{
"id": 2,
"name": "xxx",
"age": 30
}
// 可能还有其他匹配条件的结果
]

在编写后端代码时,你需要解析查询参数以获取传递的值。以下是一个使用Express.js的示例:

 

javascript复制代码

app.get('/home', function(req, res) {
const name = req.query.name; // 从请求中获取name查询参数
const age = req.query.age; // 从请求中获取age查询参数
// 根据name和age查询数据库或其他数据源,并返回结果
// ...
// 假设我们从数据库中获取了匹配条件的结果列表
const results = [
{ id: 1, name: 'xxx', age: 25 },
{ id: 2, name: 'xxx', age: 30 }
];
res.json(results); // 返回JSON格式的响应体
});

在这个Express路由中,req.query 对象包含了所有的查询参数。你可以通过 req.query.name 和 req.query.age 来获取相应的值,并在路由处理函数中使用这些值来查询或过滤数据。

请注意,查询参数的值应该被适当地验证和清理,以防止安全漏洞,如SQL注入等。此外,对于敏感信息或大量数据,通常不推荐使用查询参数来传递,而是应该考虑使用POST请求体或其他安全的方式来传输数据。

application/json

application/json 是一种 MIME 类型,用于表示 JSON(JavaScript Object Notation)格式的数据。JSON 是一种轻量级的数据交换格式,它基于 ECMAScript (欧洲计算机协会制定的js规范)的一个子集,采用完全独立于语言的文本格式来存储和表示数据。JSON 文本格式在结构上易于阅读和编写,同时也易于机器解析和生成。

在 HTTP 通信中,application/json 通常作为请求或响应的内容类型(Content-Type)使用。当客户端向服务器发送数据时,如果数据是 JSON 格式的,客户端就会在请求的 Content-Type 头部中指定 application/json。同样,当服务器返回 JSON 格式的数据给客户端时,也会在响应的 Content-Type 头部中指定 application/json

使用 application/json 的好处包括:

  1. 跨语言性:JSON 格式是独立于语言的,这意味着任何支持 JSON 的编程语言都可以解析和处理它。
  2. 轻量级:JSON 格式的数据通常比 XML 更小、更快,因此更适合在网络传输中使用。
  3. 易于阅读:JSON 格式的数据结构清晰,易于人类阅读和理解。
  4. 易于解析:与 XML 相比,JSON 数据的解析通常更简单、更快速。

现在,越来越多的 Web 服务(特别是 RESTful API)选择使用 application/json 作为其主要的数据交换格式。这是因为 JSON 提供了简洁、高效且易于处理的数据表示方式,非常适合用于构建现代的、基于 Web 的应用程序。

x-www-form-urlencoded 

x-www-form-urlencoded 是一种 HTTP 数据编码方式,通常用于在 Web 表单提交时发送数据。当用户在网页上填写表单并点击提交按钮时,浏览器会将表单数据编码为 x-www-form-urlencoded 格式,并将其作为 HTTP 请求体发送到服务器。

这种编码方式的特点是将表单数据转换为一串键值对,每对键值之间使用 & 符号分隔,键和值之间使用 = 符号连接。例如,假设有一个包含两个字段(name 和 age)的表单,用户输入了 John 和 30,那么编码后的数据将如下所示:

 

bash复制代码

name=John&age=30

在发送 HTTP 请求时,这个编码后的字符串会被放在请求体中,并且 Content-Type 头部通常会被设置为 application/x-www-form-urlencoded,以告知服务器数据的编码方式。

例如,一个使用 x-www-form-urlencoded 编码方式的 POST 请求可能如下所示:

 

http复制代码

POST /submit-form HTTP/1.1
Host: example.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 18
name=John&age=30

需要注意的是,x-www-form-urlencoded 主要用于简单的表单数据提交。对于更复杂的数据结构(如嵌套对象或数组),通常使用其他编码方式,如 multipart/form-data(用于文件上传)或 application/json(用于 API 请求)。

multipart/form-data 

multipart/form-data 是一种 HTTP 数据编码方式,通常用于发送包含文件或其他二进制数据的表单数据。这种编码方式能够将表单数据分割成多个部分,每个部分都包含相应的头部和内容,使得二进制数据(如图片、音频、视频或文件)可以与其他表单字段一起发送。

当使用 multipart/form-data 编码方式时,每个部分都包含一个 Content-Disposition 头部,该头部指定了该部分的名称和可能的文件名(如果是一个文件字段)。对于文件字段,还会包含 Content-Type 头部来指定文件的 MIME 类型,以及文件的实际内容。

在 HTTP 请求中,使用 multipart/form-data 编码方式的 Content-Type 头部通常会包含一个 boundary 参数,该参数用于分隔请求体中的不同部分。每个部分的开始和结束都会使用这个边界字符串来标识。

例如,一个包含文件上传的表单的 multipart/form-data 编码请求可能如下所示:

 

http复制代码

POST /upload HTTP/1.1
Host: example.com
Content-Type: multipart/form-data; boundary=---------------------------97476729989295326262800
Content-Length: <请求体的长度>
---------------------------97476729989295326262800
Content-Disposition: form-data; name="username"
JohnDoe
---------------------------97476729989295326262800
Content-Disposition: form-data; name="avatar"; filename="avatar.jpg"
Content-Type: image/jpeg
<文件的二进制内容>
---------------------------97476729989295326262800--

在上面的例子中,请求体包含两个部分:一个是名为 username 的文本字段,另一个是名为 avatar 的文件字段,包含了一个名为 avatar.jpg 的 JPEG 图片的二进制内容。每个部分的开始和结束都使用了相同的边界字符串来分隔。

使用 multipart/form-data 编码方式可以确保文件和其他二进制数据能够安全、完整地传输到服务器,是文件上传和其他需要发送二进制数据的场景中的常用编码方式。

额外补充(RESTful API )

RESTful API 是一种基于 HTTP 协议设计的软件架构风格,用于构建网络应用程序。它遵循一系列的设计原则,使得 API 易于理解、使用和维护。下面是关于 RESTful API 的一些核心要点:

1. 资源(Resources)

RESTful API 的核心思想是将网络上的所有事物都抽象为资源,每个资源都有一个唯一的标识符(URI)。这些资源可以是用户、订单、文章等任何可以在网络上表示的数据。

2. 动词(Verbs)

HTTP 协议定义了几种请求方法(动词),包括 GET、POST、PUT、DELETE 等,用于对资源进行不同的操作。RESTful API 使用这些 HTTP 方法来表示对资源的不同操作,而不是在 URI 中包含动作。

  • GET:用于请求资源。
  • POST:用于创建资源。
  • PUT:用于更新资源。
  • DELETE:用于删除资源。

3. 无状态(Stateless)

RESTful API 是无状态的,即每个请求都必须包含处理该请求所需的所有信息。服务器不会保存客户端的状态信息,每次请求都是独立的。这有助于提高系统的可伸缩性和可靠性。

4. 统一的接口(Uniform Interface)

RESTful API 强调使用统一的接口来对资源进行操作,这有助于简化客户端和服务器之间的交互。统一的接口包括:

  • 资源识别:通过 URI 识别资源。
  • 操作识别:通过 HTTP 方法识别对资源的操作。
  • 消息传递:通过 HTTP 请求和响应传递消息。
  • 自描述消息:消息中包含足够的信息来描述如何处理它们。

5. 分层系统(Layered System)

RESTful API 可以将系统组件分解为多个层次,每个层次提供不同的功能。这种分层结构有助于限制组件间的依赖关系,提高系统的可伸缩性和可维护性。

6. 客户端-服务器架构(Client-Server Architecture)

RESTful API 采用客户端-服务器架构,客户端负责用户交互和展示数据,服务器负责管理和存储数据。这种分离使得客户端和服务器可以独立进化,提高了系统的可维护性和灵活性。

7. 可缓存(Cacheable)

RESTful API 支持响应缓存,这有助于提高性能并减少网络带宽的使用。客户端可以缓存服务器的响应,并在后续请求中直接使用缓存数据,而不必每次都从服务器获取。

总结

RESTful API 是一种基于 HTTP 协议的软件架构风格,它强调资源的唯一性、无状态性、统一的接口和分层系统等特点。通过遵循这些设计原则,RESTful API 可以构建出易于理解、使用和维护的网络应用程序。

  • 43
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

向想享xh

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值