在 REST API 中,您至少可以通过两种方式组织参数:
- 通过参数作为 URL 路径的一部分^
/api/resource/parametervalue
- 作为查询参数,查询参数:
/api/resource?parameter=value
问题:
- 哪些问题最好以什么方式解决?
- 有没有办法参数化我忘记的 API?
在 REST API 中,您至少可以通过两种方式组织参数:
/api/resource/parametervalue
/api/resource?parameter=value
问题:
/api/resource/parametervalue
当您需要参数作为路径的一部分或绑定到某物时,使用第一个示例。例如,让我们考虑一个用于处理材料的控制器,以及它可能具有的有效地址:api/material/create
api/material/get/all?name=p_name&price=123
api/material/get/{id}
api/material/{id}/update/name
api/material/{id}/update/description
api/material/{id}/update/price
api/material/{id}/delete
api/material/{id}/attach
api/material/{id}/detach
重点是什么?当您使用参数时
id
,您可以指定要为谁执行特定操作。另外,第二个示例包含query parameters
,即 那些跟在 & 符号后面的。这意味着它们不是强制性的。例如,您可以将它们用作get
查询过滤器的一部分。它们大多不用于
post
查询,或者至少我还没有看到任何这样的用例。为什么?因为查询字符串参数将一些数据传递给服务器。执行请求时post
,您已经在传递数据,但在请求正文中。是的,路由参数post
也用于请求(在本示例和类似示例中),但您也可以简单地将它们传递到请求正文中,但这会有点不传统。id
api/material/{id}/detach
REST Api
get
让我提醒您,请求和请求之间的主要区别post
是get
请求不能有请求正文。查询参数解决了指定要接收的数据的问题;相应地,它们不用于post请求。总之,请求参数和路由参数是不同的东西,但它们的作用大致相同——传输数据。路由参数用于阐明您将要使用的对象的路径,查询参数更多地用作特定请求的过滤器,并且是可选的。
UPD:使用
put
,patch
和delete
查询有何意义?要理解,put
请求是get
和之间的混合体post
,主要用于服务器识别客户端的意图,即更新某些数据。在这里使用查询参数有意义吗?他们认为不需要,因为您只需要在请求正文中传递要更新的数据以及要更新的对象的标识符,并且如之前所写,它可以作为路由参数等在请求正文。patch
使用特殊的更新说明,因此无需提出任何额外的内容。delete
不传输任何主体,而必须仅传输应删除的对象的标识符。情况类似,可以使用路由参数来做到这一点。为什么是他?因为这个数据是需要的。