在定义面向资源的RESTful服务时,您认为定义查询数据的显式操作(动词)是个好主意吗?
使用HTTP将资源导向的RESTful服务上的CRUD操作映射到PUT,GET,POST和&等操作似乎很明显也很容易。删除但是如何映射查询多个资源的操作 - 使用名为'QUERY'的新操作或仍然使用返回资源集合的'GET'。
我对人们的意见和经历感兴趣......
答案 0 :(得分:7)
REST是关于资源的。您的查询将返回什么资源?一组数据?这套是如何确定的?它是如何参数化的?这应该确定您将使用GET操作的URL:
GET /customers would retrieve all customers
GET /customers?q=<query> would retrieve all customers matching the query
编辑:以下对我不太清楚
考虑到查询是关于检索作为一组客户的资源(例如),我开始怀疑所有客户集的明确定义的子集。考虑以下事项:
GET /customers/state/MA Retrieve all customers in Massachusetts
GET /customers/country/UK All in the UK
GET /customers/country/UK/postalcode/001-234 All in that postal code in the UK
这些资源对我来说是明确的资源,而不是查询。我将继续使用查询字符串来检索任意一组客户,但是如果客户有自然分区,我可能会在URL空间中指出。
回想一下,GET操作适用于幂等操作,旨在促进缓存。对这些查询的响应应该允许一些合理数量的缓存(可能是一天)。这将允许客户端计算机或代理服务器将结果集缓存一段时间,从而节省服务器往返。
答案 1 :(得分:0)
我仍然会使用GET
并在网址中提供查询的参数。
答案 2 :(得分:0)
返回相关资源URI列表作为响应。