Java RESTful Web服务中的资源路径
我正在按照REST架构风格构建一个web服务。我正在使用JAX-RS使之更容易。然而,这个问题与技术无关,而是与资源路径的正确使用有关 我在我的应用程序中创建了一些资源,如测验、问题和问题反馈 我创建了如下路径: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
/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。但那不是你想要的,不是吗?