【发布时间】:2023-03-08 17:29:01
【问题描述】:
我正在构建一个遵循 REST 架构风格的 Web 服务。我正在使用 JAX-RS 来简化它。然而,这个问题并不关心技术,而是正确使用资源路径。
我在我的应用程序中创建了一些资源,例如测验、问题和 QuestionFeedback。
我已经创建了路径,例如
/quiz
/question/1
等等。现在,我看到了一些暴露路径的 Web 服务 API,例如 /approved 或 /questions/approved。路径的批准部分似乎更像问题可能具有的属性(在这种情况下),我想知道这是否可以,以及将其作为请求参数和像这样的路径的一部分之间的界限在哪里?
是否可以在 Web 服务中公开路径,这些路径以某种方式公开系统中的预期资源之一,例如在本例中为 Question,但是除了普通的 @987654328 之外,还可以通过 /approved 之类的路径@ 小路?规则是什么,这应该是怎样的?
如果没有人问我,我会创建一个类似/questions?type=approved 的路径:GET。
因为已批准不是我系统中的资源。还是可以创建暴露资源的路径...但不要直接使用资源名称。
【问题讨论】:
-
使用
/questions?type=approved。为什么不选择显而易见的方式? -
我会像@Tichodroma 建议的那样做。
approved是question的属性,所以它是有意义的。 -
但我想知道何时以及如何决定这一点。如果我认为是正确的。
-
/questions/1 是对特定资源(“问题 #1”)的引用,因此使用路径对问题的 ID 进行编码是有意义的。调用者将期望此 URL 上的 GET 返回代表问题 1 本身的资源。 /questions?approved=true 是一个查询,它按已批准的问题过滤所有问题的列表。作为调用者,我希望此 URL 上的 GET 能够返回已批准问题的列表。
标签: java web-services rest jakarta-ee jax-rs