首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >这是RESTfull吗?

这是RESTfull吗?
EN

Stack Overflow用户
提问于 2013-09-11 21:31:03
回答 1查看 105关注 0票数 2

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

假设我有一个集合,/users的大元素。那么我们就有了预期的:

代码语言:javascript
复制
GET /users/123           // returns user element with identifier 123

但应该怎么做

代码语言:javascript
复制
GET /users

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

代码语言:javascript
复制
GET /users
   > [{name: abc, id: 1}, {name: def, id: 2}, {name: ghi, id: 3}, ...]
GET /users/2
   > {name: def, prop1: *, prop2: *, ...}

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

代码语言:javascript
复制
GET /users?prop1=value           // returns element summaries of elements with prop1=value
GET /users/?prop1=value          // returns elements with prop1 = value

这个方法可以吗?或者其他的方法对/users起作用,那么就失去了意义。(例如PUT /users ?)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-09-11 21:45:21

我个人喜欢/users不返回所有用户,而是返回查询特定用户所需的信息的样式。因此,总结的方法是我通常如何写它。

如果你是在过滤或查询,我会选择你提供的第一个:

代码语言:javascript
复制
GET /users?prop1=value

我不喜欢第二个

代码语言:javascript
复制
GET /users/?prop1=value

因为它很容易被误解或导致混乱和意外的错误(缺少一个斜杠仍然有效,但完全改变了结果)。

您可能需要使用另一种URL方法,用于根据搜索参数返回特定用户,例如

代码语言:javascript
复制
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的人注意到这种可能性。

实际上,在此基础上,我将使用所有的构造。

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

代码语言:javascript
复制
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
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18751626

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档