2013-03-11 85 views
8

林有一个问题,我不能决定如何处理这件事情..我需要知道是否有任何标准的方法来解决这个问题..或者如果你们有任何伟大的投入这个问题。REST API,具有关系的POST实体?

的事情是,我已经开始建立学习的目的很基本的API 的API是一个简单的音乐商店..在店里有哪些需要一些专辑和艺术家。

所以关系是艺术家< --- 1 ----- * --->专辑和专辑存在它的要求,该专辑有一个艺术家。但艺术家不需要和专辑。

现在的问题...

由于这种关系,如果我想创建一个新的专辑。我不得不发布专辑数据..和整个ARIST-data..not只是这位艺术家的ID ......但是整个艺术家......如果你问我,这看起来效果不是很好......因为这样做是不必要的。

所以当我看到它有两种方法来解决这个问题... 要么我只是发布整个专辑数据/对象,并允许对象的艺术家数据只包含一个ID然后引用艺术家。

所以不是发帖:

{ 
"Name":"AlbumName", 
"Description":"Some description for the album", 
"ReleaseYear": "1992", 
"Artist" { 
    "Name":"Some artist", 
    "Id":"12345", 
    "Biography":"Lorem ipsum dolor sit amet" 
    } 
} 

我这样做:

{ 
    "Name":"AlbumName", 
    "Description":"Some description for the album", 
    "ReleaseYear": "1992", 
    "Artist" { 
     "Id":"12345" 
     } 
    } 

期权数量二是实际上有一个路径/ URL那具体该... 例如: /api/artist/{artistid}/album 然后只需发布一个专辑对象到那个url ..

但是正如我所说.. Im r最后不知道这里的对错是什么......或者是否有任何标准的处理方法?

在此先感谢!

回答

6

我会建议这样的事情。

POST /musicstore/artist/343/albums 

{ 
    "Name":"AlbumName", 
    "Description":"Some description for the album", 
    "ReleaseYear": "1992", 
} 

创建资源作为艺术家专辑集合的孩子的行为343隐含地创建了艺术家和专辑之间的关系。没有必要在有效载荷中指定它。

+0

可能是在这里的话题..但你怎么会这样做在ASP.net web-api?..因为为每个这样的路线定义一个新的路线将创建一个巨大的代码行数量.. – Inx 2013-03-11 15:16:19

+0

什么关于多对多资源?路径中是否应该包含两个唯一的ID,或者两者中的一个是否在车身载荷中? – Stephane 2014-09-16 19:44:51

+0

@StephaneEybert无论是会工作。我更喜欢后者。根据您的环境,这个http://tools.ietf.org/id/draft-snell-link-method-01.html也可能会很有趣。 – 2014-09-16 20:17:10

0

我认为这两个选项都是正确的,它取决于你使用哪一个。第二个更像是HATEOAS

相关问题