Post请求中params和body传参区别

943 阅读3分钟

请求连接时候,HTTP请求时候,params、query、body是常用的术语,用于描述不同的部分。下面梳理一下他们的区别:

1、Params(路径参数)

定义:路径参数,也称为Params,市值URL路径的中的变量部分,通常一个冒号:开头。例如:/users/:id中的id就是一个路径参数。路径参数用于向服务器发送一下标识符和关键信息,服务器可以根据这些参数执行相应操作。

用途:路径参数通常用于请求表示的资源和操作。例如,再RESTFULL API中,使用路径来指定要获取、更新或者删除的特定资源,如果:/users/1表示获取id为1的用户信息。

示例:对于路径参数/users/:id,如果请求的URL为/users/1,则参数id的值为1

如果是路经参数的话,后端匹配的到形式这样的

@Get('detail/:id')
@ApiParam({
    name: 'id',
    description: '查询某个特定成功的详情',
    required: true,
})
@ApiResponse({
    status: 403,
    description: '接口状态403',
})
getProjectDetail(@Param('id') id: string) {
    return this.projectService.getProjectDetail(id);
}

2、Query Parameters(查询参数)

定义:查询参数,也称为"query"参数,是指在URL中以问号"?"开始的键值对。它们用于向服务器传递额外的数据,这些数据通常用于筛选、排序、分页等操作。

用途:查询参数常用于在HTTP请求中传递一些控制信息,以指定如何处理请求的数据。例如,在一个搜索功能中,查询参数可以用于指定搜索关键字、排序方式和每页显示的数量。

示例:对于URL/products?category=electronics&page=1&sort=price,查询参数包括"category"、"page"和"sort",分别对应了商品分类、页码和排序方式。

如果是查询参数的后端匹配的形式是这样的

  @Get('list')
  @Public()
  @ApiOperation({
    summary: '查询所有工程',
    description: '查询所有工程的项目列表接口',
  })
  findProjectList(@Query() queryProjectListDto: QueryProjectListDto) {
    return this.projectService.findProjectList(queryProjectListDto);
  }

3、Request Body(请求体)

定义:请求体,也称为"body",是HTTP请求中的数据部分,通常用于传递请求的实际内容,如表单数据、JSON、XML等。

用途:请求体可以以多种格式发送数据,包括但不限于:

  • JSON:最常见的数据格式之一,用于表示结构化数据,特别适用于 API 请求。
  • XML:另一种结构化数据格式,用于表示标记式数据。
  • Form Data:通常在 HTML 表单提交中使用,以键值对的形式发送数据。
  • Multipart From Data:用于上传文件等复杂数据,支持多个键值对和文件上传。
  • Text/Plan:用于发送纯文本数据。

内容类型(Content-Type):请求体的内容类型通过HTTP请求头中的Content-Type字段来指定。不同的数据格式对应不同的Content-Type值。 例如:

  • JSON:Content-Type: application/json
  • XML:Content-Type: application/xml
  • Form Data: Content-Type: application/x-www-form-urlencoded
  • Multipart Form Data: Content-Type: multipart/form-data
  • Text/Plain: Content-Type: text/plain

示例:对于一个创建新用户的请求,请求体可能包含用户的姓名、电子邮件地址和密码等信息。

POST /api/users 
{   
    "name": "John Doe",   
    "email": "john@example.com" 
}

如果是body,post请求的话,后端匹配到的形式这样的:

@Post('create')
create(@Body() createProjectDto: CreateProjectDto) {
    return this.projectService.create(createProjectDto);
}