Java RESTful Web服务中的资源路径

Java RESTful Web服务中的资源路径,java,web-services,rest,jakarta-ee,jax-rs,Java,Web Services,Rest,Jakarta Ee,Jax Rs,我正在按照REST架构风格构建一个web服务。我正在使用JAX-RS使之更容易。然而,这个问题与技术无关,而是与资源路径的正确使用有关 我在我的应用程序中创建了一些资源,如测验、问题和问题反馈 我创建了如下路径: /quick /question/1 等等。现在,我看到了一些公开路径的web服务API,如/approved或/questions/approved。路径的核准部分看起来更像问题可能具有的属性(在本例中),我想知道这是否正确,以及将其作为请求参数和路径的一部分之间的界限在哪里 在we

我正在按照REST架构风格构建一个web服务。我正在使用JAX-RS使之更容易。然而,这个问题与技术无关,而是与资源路径的正确使用有关

我在我的应用程序中创建了一些资源,如测验、问题和问题反馈

我创建了如下路径:

/quick
/question/1

等等。现在,我看到了一些公开路径的web服务API,如
/approved
/questions/approved
。路径的核准部分看起来更像问题可能具有的属性(在本例中),我想知道这是否正确,以及将其作为请求参数和路径的一部分之间的界限在哪里

在web服务中公开以某种方式公开系统中的一个预期资源的路径(如本例中的
Question
)是否可以,但除了正常的
/questions
路径外,还可以通过
/approved
路径公开?规则是什么,这是怎么回事

如果没有人可以询问,我会创建一个路径,如
/questions?type=approved
:GET


因为approved不是我系统中的资源。或者可以创建公开资源的路径……但不要直接使用资源名称。

您询问的是,只有通过附加信息才能理解的路径是否可以。嗯,他们没有错,但我不会选择他们

你的问题是(用我的话说):

请给我所有具有被批准附加功能的问题

GET /questions?approved=true
这可以归结为两个步骤:

第一步

了解所有问题

GET /questions
第二步

其中只有那些得到批准的

GET /questions?approved=true
这是很自然的


相反,为什么第二步会导致
/approved
?这与
/问题
有什么关系?没有明显的方法来回答这个问题。虽然从技术上讲,即使使用像“粉红大象”这样的奇怪路径也可以,这应该转化为“给我所有批准的问题”,但这不是我的建议。

使用
/questions?type=approved
。为什么不选择显而易见的方式呢?我会像@Tichodroma建议的那样做
approved
question
的一个属性,因此它是有意义的。但我想知道何时以及如何决定这一点。如果我认为是正确的。/questions/1是对特定资源的引用(“Question#1”),那么使用路径编码问题的ID是有意义的。调用者希望此URL上的GET返回表示问题1本身的资源/questions?approved=true是一个按已批准的问题筛选所有问题列表的查询。作为一个打电话的人,我希望GET在这个URL上返回一个被批准的问题列表。这可能是一个有点奇怪的例子。假设您有一个测验资源
/quick
。然后,您想要所有已批准的问题,然后您会使用
/quick/questions?type=approved
对,而不是
/quick/approved
,即使它是允许的,但它会生成一个奇怪的API?这是正确的吗?对于这一点,您将有
/quizes/42/问题?type=approved
:为第42次测验提供所有已批准的问题。是的,我建议这样做:问题属于一个测验,它们可以被批准。因此资源是路径,它们可能具有的属性是..有效负载,不应该在路径中。您不请求属性,而是请求具有属性的资源。这是一个很大的区别。如果您只对属性
type
的值感兴趣,则可以使用
/quizes/42/questions/32/type
将问题23的
type
属性设置为测验42。但那不是你想要的,不是吗?