Web API使用GET请求时如何在查询字符串中传递JSON参数?
GET请求查询字符串参数序列化方案
你之前把整个JSON编码成单个参数的方式是错误的,正确的平铺规则如下:
- 数组类型参数
FundCodes,主流Web框架均支持两种通用序列化格式:- 重复键名:多值场景下重复声明同一个参数键,例如
FundCodes=0DFOY&FundCodes=ABC12 - 方括号后缀:部分框架(如PHP、Node.js Express)默认支持的格式,例如
FundCodes[]=0DFOY&FundCodes[]=ABC12
- 重复键名:多值场景下重复声明同一个参数键,例如
- 简单类型参数
FromDate、ToDate直接作为独立键值对拼接即可
按你给出的示例参数,最终拼接后的完整查询字符串为:FundCodes=0DFOY&FromDate=2021-04-01&ToDate=2021-05-01
后端无需额外修改,大部分框架默认可以直接解析上述格式的参数。
接口设计规范选择
优先选择GET的场景
根据RESTful设计原则,GET本身就是为资源查询场景设计的,只要满足以下条件就优先使用GET:
GET请求属于安全、幂等操作,执行后不会修改服务端资源状态,支持浏览器缓存、CDN加速、直接地址栏调试,优势远大于POST。
- 参数总长度不超过部署环境的URL长度限制(主流服务端、代理均支持至少2KB的URL长度,你的场景参数量极小完全符合要求)
- 无敏感参数(GET请求URL会被日志、浏览器历史留存)
- 无多层嵌套的复杂参数结构
你当前的场景完全符合上述要求,使用GET是完全合规的方案。
选择POST的场景
如果后续出现以下情况,再考虑切换为POST请求:
- 参数总长度超过URL限制
- 包含敏感参数需要避免被日志明文留存
- 参数存在多层嵌套对象、多维数组等复杂结构,平铺到查询字符串的解析成本过高
- 部署环境的网关、反向代理禁止GET请求携带请求体(如果你此前考虑过用GET请求体传参)
内容的提问来源于stack exchange,提问作者daxu
相关产品推荐
相关产品推荐

