REST URL ID布局与资源集合(REST Url ID Placement for Resou

2019-09-18 19:10发布

这是一个休息的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集。

谢谢

Answer 1:

有没有错,你的第一个API。 在很大程度上,该RESTful接口的想法是去与网络的天然树结构,你的第一种方法是在与保持。 它也将是不抽象掉数据存储的隐含限制的API的工作结构,因为第二种方法隐含地假设,记的ID是全局唯一的。 现在,这可能是真实的,并可能保持真实的,但它也正是一种错误的时候,下了线,某种重大分贝变化的发生是突然的灾难性后果出现。

我想你的第一个方案去。 这是一个熟悉的休息模式,它的直观,它不会以一种不可思议的方式上下行炸毁。 此外,为应对@ Corwin01减少查询参数 - 它们不是多么惬意。



Answer 2:

我在我的另一个问题评论引用这个问题,我到了那里的反馈和我自己的研究之间,这是我想出。

首先,问题是那种有缺陷的。 RESTful API中,或使用perferable期限超媒体API应该包括有关动作的URL,这样的接口被发现且变化不会破坏现有的客户,因此确切的结构比,我就可以把这些可以显著不太重要在以后进行修改。

其次,本例中的音符将被检索为一个账户查询,也许这样的事情的一部分:

<account>
   ...
   <notes>
      <note>
         ...
         <link href="/account-note/123" rel="note">
      </note>
   </notes>
</account>

客户将永远不会对自己组装的网址到帐户,客户端将使用所提供的链接。 由于笔记ID是在这种情况下,全球唯一的,没有必要包括两次关键。 因此,问题的答案是否定的,第一个例子是不是一个很好的REST URL结构,第二个是更好的。 (虽然仍也许不是最好的...)



Answer 3:

你要知道,我的经验是与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因为用户并不需要看到的是反正。



文章来源: REST Url ID Placement for Resources with Collections