2015-05-27 51 views
1

将子记录添加到父记录的操作的正确“REST式”URL是什么?用于将记录添加到记录的REST式URL

例如,如果我想提供一个用于将“评论”记录添加到“订单”记录的URL,我应该如何格式化它?

我的第一个想法是这样的:

PUT http://example.com/order/12345/comment/add 

我在Django,它采用了类似的模式工作,因此这似乎最直观的。然而,阅读一些RESTful设计指南like this one表明这可能是不好的做法,因为他们认为“PUT”和“add”是多余的,因此可能会造成混淆。

+0

没有“RESTful URL”这样的东西。 REST是关于链接而不是URL。 – inf3rno

回答

2

put操作和url的添加部分是多余的。但是对此没有硬性规定。我看到apis具有这种形式,甚至来自主要供应商,有时只是简单地说:“put操作和uri段是多余的”。有时我什么都不说,只是叫端点。如果我正在写一个API,我可能会放弃添加部分。

+0

但是这比'/ order/12345/add_comment'还好,对吧? – Cerin

+0

我的眼睛/ add_comment看起来像某种实体(这不是你的意图,所以我可能认为这是误导,而不仅仅是多余)。 –

3

我会做到以下几点:

POST http://example.com/order/12345/comment 
+0

如果在服务器上生成注释ID,则使用POST方法。 –

1

有几点要提出请求的RESTful:

1)使用资源的名称在复数的URL,而不是单数形式的(订单,而不是顺序)

2)从来没有在使用你的URL操作的名称,如(ADD)“评论/添加”

3)因为你不知道一加一“新”的评论您应该使用POST请求的手的ID。

最后,我会建议网址是:

HttpVerbs = POST http://api.example.com/orders/12345/comments

这应该添加一个新评论您的订单#12345

+0

如果您没有在URL中指定操作,那么您如何区分操作?例如“添加”与“删除”?将其重新定位到POST参数看起来非常不直观且潜在危险。 – Cerin

+0

你的$ _Server ['REQUEST_METHOD']会告诉你你正在使用什么方法。您会将该请求映射到后端的操作。还有其他方法可以实现这一点。 –

+0

请给这个很好的阅读。还请阅读评论。这非常有帮助。 http://roy.gbiv.com/untangled/2008/rest-apis-must-be-hypertext-driven –

0

没有一个尺寸fits-所有回答你的问题。其他网址可以是任何你想要的。在一天结束时,它们是映射到方法的路线。我不会过多担心“最佳”网址。我更喜欢找到适合我的标准,然后转向更重要,更重要的事情。只要客户知道URL是什么,他们就会没事的。