java: 4种API 参数传递方式

1. 概述

在 Web API 设计中,客户端需要通过多种方式向服务端传递参数。根据 HTTP 协议和 RESTful 风格,常见的参数传递方式包括:Query Parameters、Path Parameters、Body Parameters 和 Header Parameters。本规范文档对各类参数的用途、特点与使用场景进行统一说明。


2. 参数传递方式分类

2.1 Query Parameters(查询参数)

位置:

附加在 URL 的 ? 之后,以 key=value 形式出现,多个参数使用 & 分隔。

示例:

复制代码
GET /api/dish?page=1&pageSize=10&name=鱼香肉丝

特点:

  • 参数直接暴露在 URL 上。

  • 适用于筛选、分页、搜索等查询类条件。

  • 一般用于 GET 请求(但其他方法也可以使用)。

  • 参数长度受 URL 长度限制,不适合传输大数据。

典型场景:

  • 列表分页

  • 条件检索

  • 排序字段传递


2.2 Path Parameters(路径参数)

位置:

作为 URL 路径的一部分,用于定位资源。

示例:

复制代码
GET /api/dish/10

特点:

  • 表达资源层级结构,更符合 RESTful 风格。

  • 参数不可省略,通常代表唯一性标识(如 ID)。

  • 仅在 URL 中传递,不出现在请求体中。

典型场景:

  • 获取某条记录(如 /user/1)

  • 删除某条记录

  • 查询某个资源的子资源


2.3 Body Parameters(请求体参数)

位置:

放置在 HTTP 请求体(Request Body)中。

常见数据格式:

  • JSON(最常用)

  • application/x-www-form-urlencoded(传统表单格式)

  • multipart/form-data(文件上传)

  • XML(现较少使用)

  • binary(二进制,如图片、视频)

示例(JSON):

复制代码
{
  "name": "鱼香肉丝",
  "price": 20,
  "status": 1
}

特点:

  • 参数不暴露在 URL 上,适合传输复杂对象。

  • 不受 URL 长度限制。

  • 主要用于 POSTPUTPATCH 请求。

典型场景:

  • 新增资源

  • 修改资源

  • 批量提交数据

  • 上传文件


2.4 Header Parameters(请求头参数)

位置:

写入 HTTP Header 中。

示例:

复制代码
Authorization: Bearer eyJhbGciOi...
Content-Type: application/json
token: xxxxxxx

特点:

  • 参数不显示在 URL 和 Body 中。

  • 主要用于传递认证信息、格式声明等元数据。

  • 不推荐用于传递业务数据。

典型场景:

  • JWT Token 身份认证

  • 设置 Content-Type

  • API 版本信息

  • 语言设置(Accept-Language)


3. 非主流但常见的方式

3.1 Cookies

用于在浏览器环境中自动携带状态信息,常见于登录状态维持。

特点:

  • 浏览器自动附带,无需手动传递。

  • 后端可读取 Cookie 获取用户凭证或偏好设置。


3.2 URL Fragment(片段标识符)

例如 #section1

不参与 HTTP 请求,在 API 中不使用,仅用于前端页面定位。


4. 四类主要参数的对比

传参方式 出现位置 是否可见 典型场景 限制
Query Params URL ? 搜索、分页、查询条件 URL 长度限制
Path Params URL 路径 定位资源(如 ID) 必须存在,类型简单
Body Params 请求体 新增、修改、上传 仅 POST/PUT 等支持
Header Params HTTP Header 认证、元信息 不适合业务数据

5. 使用建议(最佳实践)

  • 查询参数使用 Query。如分页 page、pageSize。

  • 资源标识使用 Path。如 /user/{id}。

  • 新增/修改使用 Body(JSON)

  • 认证信息使用 Header(如 Authorization)。

  • 避免在 Header 中传递业务字段。

  • 避免在 Query 或 Path 中传输过多复杂数据。


6. 总结

API 参数传递主要包含四种方式:Query、Path、Body 和 Header。它们各自适用于不同场景,合理选择传参方式有助于接口保持语义清晰、结构规范、易于维护。

相关推荐
CHANG_THE_WORLD6 小时前
C++ vs Python 参数传递方式对比
java·c++·python
四谎真好看6 小时前
Java 黑马程序员学习笔记(进阶篇31)
java·笔记·学习·学习笔记
sdkingz6 小时前
cursor学习笔记
java
小王师傅666 小时前
【轻松入门SpringBoot】从 0 到 1 搭建 SpringBoot 工程-中
java·spring boot·spring
ULTRA??7 小时前
C++实现右折叠
开发语言·c++
豐儀麟阁贵7 小时前
9.5格式化字符串
java·开发语言·前端·面试
m0_740043737 小时前
Axios拦截器 -- 请求拦截器和响应拦截器
开发语言·前端·javascript
qq_348231857 小时前
Spring Boot开发过程中常见问题
java·spring boot·后端