2012-11-13 117 views
3

我正在构建遵循REST架构风格的Web服务。我正在使用JAX-RS使其更容易。然而,这个问题并不关心一项技术,而是正确使用资源路径。REST风格的web服务中的资源路径

我在我的应用程序中创建了一些资源,例如Quiz,Question和QuestionFeedback。

我已创建的路径如

/quiz /question/1

等。现在,我已经看到了一些暴露路径的Web服务API,例如/approved/questions/approved。经过认可的部分路径看起来更像是问题可能具有的属性(在这种情况下),我想知道这是否正确,以及在将边界设置为请求参数和部分路径之间的界限?

,并就OK暴露在以某种方式在这种情况下Question暴露了预期的资源之一,你的系统,如Web服务的路径,而是通过除了像正常/questions路径/approved的路径?什么是规则,这应该是怎样的?

如果我没有人问我会创建一个像/questions?type=approved这样的路径:GET。

因为批准的不是我系统中的资源。或者可以创建暴露资源的路径,但不要直接使用资源名称。

+2

使用'/ questions?type = approved'。为什么不选择显而易见的方式去? – 2012-11-13 14:57:13

+1

我会像@Tichodroma建议的那样做。 'approved'是'question'的一个属性,所以它是有道理的。 – Alex

+0

但我想知道何时以及如何决定。如果我认为是正确的。 – LuckyLuke

回答

2

您在问是否只能通过附加信息理解路径。那么,他们不是错误但我不会选择他们。

你的问题是(在我的文字):

给我所有的都被批准了额外的功能问题。

这可以归结为两个步骤:

第一步

获取所有问题。

GET /questions 

第二步

其中只得到那些已被批准。

GET /questions?approved=true 

这很自然。

相比之下,为什么第二步导致/approved?这与/questions有什么关系?没有明显的方法来回答这个问题。虽然在技术上可以使用像/pink-elephants这样奇怪的路径,但这应该转化为“给我所有批准的问题”,但这不是我推荐的。

+0

这可能有点奇怪的例子。假设你有一个测验资源'/测验'。然后你想要所有批准的问题,那么你会使用'/ quiz/questions?type = approved'权限,而不是'/ quiz/approved',尽管它是允许的,但它使得一个奇怪的外观API?那是对的吗? – LuckyLuke

+0

为此,您将拥有'/ quize/42/questions?type = approved':给我所有经过批准的测验42的问题。是的,我会推荐这个:问题属于* one *测验,可以批准。 – 2012-11-13 15:14:20

+0

所以资源是路径,它们可能具有的属性是..支付并且不应该在路径中。 – LuckyLuke