api - 这是 RESTful 吗?

标签 api rest url routes

我对集合 URI 应该返回什么有点困惑。

假设我有一个收藏,/users相当大的元素。然后我们就得到了预期的结果:

GET /users/123           // returns user element with identifier 123

但是应该做什么

GET /users
返回?如果集合很大,并且元素也很大,那么返回所有元素可能不是一件好事。也许相反,GET请求 /users level 应返回元素摘要(标识符和可能的一些属性),而 GET请求 /users/ level 应返回实际元素。然后你可以做类似的事情;

GET /users
   > [{name: abc, id: 1}, {name: def, id: 2}, {name: ghi, id: 3}, ...]
GET /users/2
   > {name: def, prop1: *, prop2: *, ...}

如果您想在请求完整的重要应用程序域属性之前预览它们,这可能是延迟加载数据的好方法。这样,为了应用查询,您可以执行类似的操作

GET /users?prop1=value           // returns element summaries of elements with prop1=value
GET /users/?prop1=value          // returns elements with prop1 = value

这个方法可以吗?或者其他方法作用于 /users然后就失去了意义..(例如PUT /users?)

最佳答案

我个人喜欢/users 不返回所有用户而是返回查询特定用户所需的信息的风格。因此,我通常会采用摘要方法来编写它。

如果您要过滤或查询,我会选择您提供的第一个:

GET /users?prop1=value

我不关心第二个

GET /users/?prop1=value

因为它很容易被误解或导致令人困惑和意想不到的错误(缺少一个斜杠仍然有效,但完全改变了结果)。

您可能希望采用替代 URL 的方法来根据搜索参数返回特定用户,例如

GET /users?prop1=value    // returns element summaries based on results of prop1 matching
GET /users/find?prop1=value // returns elements with prop1 = value

显然,您的措辞可能会发生变化(查找/搜索),或者您可以使用完全不同的 URI,但我会尽量避免将两个不同含义分开的单个字符/符号,以避免出现意外错误。另一种选择是确保您在提供的文档中清楚地概述这一点,以便使用您的 API 的任何人都会收到关于这种潜力的警报。

实际上,对此进行扩展,我会使用 all 构造。

因此,我不会使用查找/搜索,而是提供:

GET /users                   // returns summaries
GET /users/#                 // returns element
GET /users/all               // returns all elements
GET /users/all?prop1=value   // returns all elements that match the filter

关于api - 这是 RESTful 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18751626/

相关文章:

php - Linkedin 连接 API 上的随机内部服务错误

java - 服务器使用 JAX-RS 和 RESTeasy 在单个 URL 中向客户端发送 "ping request"

java - 带有 json Body 和多部分文件数组的 PUT 请求

url - Magento 1 - 删除网址键/产品网址中的数字

java - 如何在 android phonegap 应用程序中获取 webview url?

android - 代理服务器后面的 Volley

rest - 已验证但未授权的 HTTP 状态代码?

api - Box API token 请求企业配置问题

javascript - Tumblr API 标记方法 - URL 未正确响应

python - 将 Eve REST API 连接到 MongoDB 实例的 ConnectionException