如何为嵌套结构的REST API构建POST请求的URL参数?
如何给嵌套结构的POST API构造参数
嘿,我来帮你理清楚这个问题~首先得明确一个关键点:你的API是POST类型,而且参数是复杂的嵌套JSON结构,最规范的做法是把参数放在请求体(Request Body)里,而不是拼在URL的查询字符串中。不过我会同时告诉你两种方式的实现方法:
一、标准POST传参方式(推荐)
对于嵌套JSON参数的POST接口,直接把你的JSON放在请求体里发送就可以了,不需要在URL里加问号和等号。比如用curl工具调用的示例:
curl -X POST http://localhost:63020/api/search \ -H "Content-Type: application/json" \ -d '{ "offset": 0, "batchsize": 10, "search": { "scope": [2,3,32], "type": "basic", "text": { "value": "test*", "fields": [ "subject", "body" ] }, "age": { "unit": "d", "amount": 365 }, "hasattachments": false }, "facet": "messagehits" }'
其他工具(比如Postman、Python的requests库)也都是类似的逻辑:设置请求方法为POST,Content-Type为application/json,然后把JSON作为请求体内容发送。
二、如果非要把嵌套参数放到URL查询字符串中
虽然不推荐复杂嵌套参数这么做,但如果有特殊需求,你可以用点符号或者方括号来表示嵌套层级,数组则通过重复参数名或者加空方括号来传递:
方式1:点分隔嵌套层级
这种格式在很多后端框架(比如Spring Boot)中都能被正确解析:
http://localhost:63020/api/search?offset=0&batchsize=10&search.scope=2&search.scope=3&search.scope=32&search.type=basic&search.text.value=test*&search.text.fields=subject&search.text.fields=body&search.age.unit=d&search.age.amount=365&search.hasattachments=false&facet=messagehits
方式2:方括号表示嵌套/数组
这种格式在Node.js的Express等框架中比较常见:
http://localhost:63020/api/search?offset=0&batchsize=10&search[scope][]=2&search[scope][]=3&search[scope][]=32&search[type]=basic&search[text][value]=test*&search[text][fields][]=subject&search[text][fields][]=body&search[age][unit]=d&search[age][amount]=365&search[hasattachments]=false&facet=messagehits
⚠️ 注意:这两种格式是否能被你的API正确识别,完全取决于后端的参数解析规则,所以最好先对照API文档测试一下哪种格式可行。
内容的提问来源于stack exchange,提问作者AlexFF1
相关产品推荐
相关产品推荐

