这是一个休息的URL结构好?
假设:
GET /account <- get list of accounts
GET /account/1234 <- get account 1234
等等
如果考虑到资源有,我想接口的集合,这是个好主意吗?
GET /account/1234/note <- get notes for account 1234
POST /account/1234/note <- add note to account 1234
DELETE /account/1234/note/321 <- delete note 321 on account 1234
尤其是最后一个让我停下来; 通常删除时,我不会要求同时在实体ID和父ID。
或者,也许这样的效果会更好?
GET /account-note/1234 <- get notes for account 1234
POST /account-note/1234 <- add note to account 1234
DELETE /account-note/321 <- delete note 321 on account 1234 (b/c note 321 is on account 1234)
但后来我结束了一个漂亮的浅URL集。
谢谢
有没有错,你的第一个API。 在很大程度上,该RESTful接口的想法是去与网络的天然树结构,你的第一种方法是在与保持。 它也将是不抽象掉数据存储的隐含限制的API的工作结构,因为第二种方法隐含地假设,记的ID是全局唯一的。 现在,这可能是真实的,并可能保持真实的,但它也正是一种错误的时候,下了线,某种重大分贝变化的发生是突然的灾难性后果出现。
我想你的第一个方案去。 这是一个熟悉的休息模式,它的直观,它不会以一种不可思议的方式上下行炸毁。 此外,为应对@ Corwin01减少查询参数 - 它们不是多么惬意。
我在我的另一个问题评论引用这个问题,我到了那里的反馈和我自己的研究之间,这是我想出。
首先,问题是那种有缺陷的。 RESTful API中,或使用perferable期限超媒体API应该包括有关动作的URL,这样的接口被发现且变化不会破坏现有的客户,因此确切的结构比,我就可以把这些可以显著不太重要在以后进行修改。
其次,本例中的音符将被检索为一个账户查询,也许这样的事情的一部分:
<account>
...
<notes>
<note>
...
<link href="/account-note/123" rel="note">
</note>
</notes>
</account>
客户将永远不会对自己组装的网址到帐户,客户端将使用所提供的链接。 由于笔记ID是在这种情况下,全球唯一的,没有必要包括两次关键。 因此,问题的答案是否定的,第一个例子是不是一个很好的REST URL结构,第二个是更好的。 (虽然仍也许不是最好的...)
你要知道,我的经验是与JAX-RS和泽西岛,所以我不知道确切的区别是什么。
然而,这是我会做什么:
@GET
@Path ("/account/note/{id}")
public void displayNotes(@PathParam ("accountId") String accountId)
{
//do stuff
}
@POST
@Path ("/account/note")
public void addNote(@FormParam ("accountId") String accountId)
{
//do stuff
}
@POST
@Path ("/account/note/delete")
public void deleteNote(@FormParam ("accountId") String accountId, @FormParam ("noteId") String noteId)
{
//do stuff
}
这样一来,你没有用户并不需要看到反正混乱和混淆的网址,尤其是当用户试图在自己的导航那里。 这是确定用于显示的帐户,但会混淆他们的网址是POST,因为他们会得到一个404,不明白为什么。
保持简单,只是用户@FormParams因为用户并不需要看到的是反正。