【问题标题】:Why use selectors and not a new URI?为什么使用选择器而不是新的 URI?
【发布时间】:2015-03-05 20:42:48
【问题描述】:

我有一个疑问,我有一个 URI,它将把所有用户的帐户从另一个休息服务带给我。示例:

GET /users/21212/account

现在我需要带 3 种不同组的用户帐户,例如:“低帐户”、“中帐户”和“高帐户”。

但是讨论的是,我应该如何在我的端点上启用它?

GET /users/21212/accounts/low-account
GET /users/21212/accounts/medium-account
GET /users/21212/accounts/high-account

GET /users/21212/accounts/1?selector=low-account
GET /users/21212/accounts/1?selector=medium-account
GET /users/21212/accounts/1?selector=high-account

我倾向于遵循第一种方法,我认为更直观,并且代码的可操作性将很容易保留......您认为什么是概念上的正确/更好,为什么?

【问题讨论】:

  • 这些帐户是否相互排斥?

标签: rest spring-mvc restful-url clean-urls


【解决方案1】:

我会选择以下选项:

GET /users/12345/accounts?group=low-account

它将返回属于用户 12345 的“低帐户”组的所有帐户。

如果查询参数代表过滤之类的东西,我倾向于使用它们。另外我建议你看看 HATEOAS 原理。然后,您的 URI 将更加灵活。

【讨论】:

  • 这样我需要用一组 ifs 处理我的端点或下面任何层上的参数?你认为这会比仅仅调用一个 uri 而我的端点调用我的特定服务方法更好吗?感谢您的回答,我会检查HATEOAS原理!
  • 假设您需要实现一个端点来按帐户类型查找帐户。然后你会想出类似 GET /users/21212/accounts/accountTypeA 的东西。我看到的第一个缺点是轻松组合“按组查找帐户”和“按类型查找帐户”操作是一个问题。第二点是,对于每个新案例,您必须再添加一个端点。您最终可能会维护大量此类端点。但是,我不知道您一直在处理的域和项目详细信息。 HATEOAS 将帮助您获得足够灵活且“可重构”的解决方案。
  • 感谢斯蒂芬的回答!
猜你喜欢
  • 1970-01-01
  • 2013-11-23
  • 2013-09-05
  • 1970-01-01
  • 2012-10-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多