当前位置: 首页 > 知识库问答 >
问题:

REST API设计-通过具有不同参数但相同url模式的REST获取资源

金承嗣
2023-03-14

我有一个与REST url设计相关的问题。我在这里找到了一些相关的帖子:相同资源的不同RESTful表示,在这里:通过不同字段获取资源的RESTful url,但对于最佳实践是什么以及为什么,这些回复并不十分清楚。这里有一个例子。

我有表示“用户”资源的REST URL。我可以获得一个具有id或电子邮件地址的用户,但两者的URL表示形式保持不变。通过大量的博客和书籍,我看到人们一直在用很多不同的方式来做这件事。例如:

在stackoverflow的书和某个地方读过这个实践(我似乎再也找不到链接了)

GET /users/id={id}
GET /users/email={email}
GET /users/{id}
GET /users/email/{email}
GET /users?id={id}
GET /users?email={email}

感谢所有的帮助!

共有1个答案

郏佐
2023-03-14

根据我的经验,GET/users/{id}GET/users/email/{email}是最常见的方法。如果不存在具有所提供的IDemail的用户,我还希望方法返回404 Not Found。看到get/users/id/{id}我也不会感到惊讶(尽管在我看来,这是多余的)。

  • 获取/users/id={id}获取/users/email={email}
    • 我想我没见过这个,而且如果我真的见过,那会很混乱的。这几乎就像它试图用路径参数来模仿查询参数。
    • 我认为您提到使用查询参数进行筛选时一针见血。
    • 同时使用idemail调用此资源(例如get/users?id={id}&email={email})是否有意义?如果不是,我就不会使用这样的单一资源方法。
    • 我希望使用此方法检索具有可选查询参数的用户列表以进行筛选,但不希望参数中包含idemail或任何唯一标识符。例如:get/users?status=bank可能返回被禁用户的列表。

 类似资料:
  • 因此,我正在创建一个用户API,并尝试在登录前调用getUserByEmail()。我的问题是,我得到了一个不明确的处理程序方法映射为HTTP路径错误。 我知道我的问题与我有一个相同但参数类型不同的GET有关。任何帮助都将不胜感激!

  • 我有一个场景,其中一个url“serachUser”可能带有两个不同的值(请求参数)userId或UserName。 为此我创造了两种方法 但我得到模糊映射发现异常。Spring能处理这种情况吗?

  • 问题内容: 我正在尝试获得类似这样的功能的参考: 我有以下错误: 如何获得具有指定参数的功能? 问题答案: 由于有两个名称相同但签名不同的方法,因此您必须指定所需的方法: 或者(如@Antonio正确指出的): 如果您需要将类的实例作为第一个参数的咖喱函数,则可以以相同的方式进行,只有签名不同(将@Antonios注释与您的问题进行比较):

  • 问题内容: 我有一个PHP应用程序,有时需要处理URL,其中URL中的多个参数具有相同的名称。是否有一种简单的方法来检索给定键的所有值?PHP $ _GET仅返回最后一个值。 具体来说,我的应用程序是一个OpenURL解析器,可能会获得如下URL参数: (是的,我知道这很丑陋,欢迎来到我的世界)。请注意,键“ rft_id”出现两次: 将返回just ,先前的值()已被覆盖。 我想同时访问这两个值

  • 我正在使用的数据库有许多具有相同列但(显然)具有不同表名的表(不是我设计的)。例如(这些是数据库表名): 有没有可能用JPA和Hibernate将这些映射到一个Java类实体?类的名称是,然后在使用它时传入例如,以便对象使用表? 还是只使用普通的、普通的Java对象来完成这样的任务更好? 谢谢你!

  • 问题内容: 我的应用程序的登录页面有两种状态:,。现在,我想在同一URL上显示这两种状态,但让控制器和模板取决于用户会话(用户是否登录?)。 有没有办法做到这一点? 问题答案: 您可以有一个基本状态来控制要加载的状态,并且可以简单地让声明该基本状态的子级没有url: 现在,在基本状态()的控制器中,您可以检查用户是否已登录,并用于加载适当的状态。 编辑 如所承诺的那样,正在努力工作。