【问题标题】:Is there any reason why API paths should use plural nouns as apposed to singular?API路径有什么理由应该使用复数名词而不是单数吗?
【发布时间】:2011-10-29 00:50:13
【问题描述】:

只是好奇,但我正在制作一个 API,并且到目前为止一直在使用这样的 URL:

/用户/创建

/用户/[id]

现在我正在添加

/用户/创建/批处理

这让我想知道是否有充分的理由将用户管理端点称为“用户”而不仅仅是“用户”。再说一次,也许这根本不重要。我至少猜想我应该对此保持一致。

想法?

【问题讨论】:

标签: api http url naming-conventions


【解决方案1】:

我会说您应该将“用户”用于与已知特定用户相关的活动,将“用户”用于与所有用户相关的活动(例如,全局清理操作),修改用户池(例如您的 @ 987654321@) 或用于获取对已知特定用户的引用。

我会让/users/select/users/search 查找/获取用户,或者/users/cleanup 对所有用户做某事。

我会让/user/[id]/operation 对特定用户/与特定用户做某事。

有一种说法,正如你所说,这根本不重要......

【讨论】:

  • 我唯一的抱怨是每次都没有这样做“废话,我忘了在 URL 中添加一个 s”,而他们正在编码。我宁愿让它清晰明了。
  • @Ryan 这很公平——这真的是一个判断电话,基于你认为你需要多少勺子喂你的用户。在那种情况下,我可能会选择users 而不是user,因为你有不止一个。
  • /users/search 是一个笨重的结构,因为 GET /users 应该启用基于参数或过滤器的搜索,即 GET /users?email={email}
【解决方案2】:

我几乎总是在我的网址设计中使用复数。我总是想在我的 url 路径中导航,类似于目录,在那里我越来越深入。

有一个顶级资源(如/users)表示一个集合,还有一个子资源(如/users/{userId}/items),它本身就是一个集合。

到目前为止我看到的所有 api 及其代表域都符合上述建议。

关于您提到的/users/create/batch,您似乎想在 url 中编码一个“动作”。在基于 HTTP 的 restful 设计中,如果您使用 HTTP 方法 POST /users(单用户有效负载)或传输多个用户的批量创建模式,它会更合适。 在您的情况下,“创建”和“批处理”是什么意思?

【讨论】:

  • 关于最后一部分,我根据您是发送一个 XML 用户还是一组许多 XML 用户来区分 URL。我使 URL 不同的原因是什么?因为它似乎更容易,因为 ASP.NET MVC 似乎没有将参数列表视为操作的一部分,所以当我使相同的操作(/users/create/)接受两个不同的变量(用户或列表)时,它不会知道如何决定使用哪一个...我想这对我来说很懒,但我不知道除非我做了一些疯狂的自定义模型绑定,否则我会如何解决。
猜你喜欢
  • 2017-04-22
  • 1970-01-01
  • 1970-01-01
  • 2016-03-25
  • 1970-01-01
  • 2010-10-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多