问题是我们的搜索 api 有一个复杂的查询字符串,并且希望让用户可以方便地使用 body。因此我们希望同时允许 GET 和 POST(或 PUT)。
我知道,对于搜索是否为只读操作存在争论,并且根据 REST 标准,它应该只能是 GET。据我了解,PUT 也不适合缓存。 但我也知道有时偏离 REST 标准是可以的。但是为了方便客户而采用两种方法有意义吗?
最佳答案
使用POST
直接查询数据不是一件好事,正是出于您提到的原因。如果您的搜索字符串很复杂,也许您可以通过将查询过程分为两步来简化事情 - 第一步涉及 POST
,另一则涉及直GET
s。
第一步使用 POST
创建一个查询模板。查询字符串通过消息体发送,成为用户可以通过GET
查询的新资源。 。查询字符串允许使用参数,其方式类似于 SQL 查询。大胆猜测一下您的查询可能会是什么样子,下面是一个示例:
(userName = $name) || (createdBefore > $asOf && deleted=false)
您的用户会 POST
这在消息正文中,并获取新的资源标识符。该资源标识了数据的参数化“ View ”。假设此 View 的资源 ID 是 aabb02kjh
。现在您的用户可以像这样查询它:
https://app.yourserver.net/aabb02kjh?name=airboss&asof=20140101
这会给您的 API 增加一些复杂性,但它允许用户使用非常简单且标准的查询字符串定义和重用查询模板。
关于api - REST api 可以通过两个 HTTP 方法公开吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25766327/