api - REST api 可以通过两个 HTTP 方法公开吗?

标签 api rest search

问题是我们的搜索 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/

相关文章:

php - Twitter Phirehose 主题标签搜索不起作用

java - 将原始类型传递给 JAX RS POST

java - 如何在 Spring Boot REST API 中启用 JSON/Jackson @RequestBody 的严格验证?

python - 大型 Sqlite 数据库搜索

python - 如何解决这个错误???引发HTTPError(req.full_url,代码,msg,hdrs,fp)HTTPError : Forbidden

javascript - 进行 API 调用时从函数返回 (javascript)

c# - 修补 REST API 以在 .NET 中部分更新 MongoDB

c# - 带有建议的应用搜索中的 Metro 风格应用

objective-c - 在 NSString 搜索栏中不断搜索子字符串

java - 以编程方式获取 Maven Artifact