REST api,POST实体与关系?

时间:2013-03-11 14:59:48

标签: api rest asp.net-web-api relationship

我有一个问题,我无法决定如何处理这个问题..我需要知道是否有任何标准的方法来解决这个问题......或者如果你们对此事有任何重要的意见。

问题是我已经开始为学习目的构建一个非常基本的API API是一个简单的音乐商店..商店有一些需要和艺术家的专辑。

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

现在问题......

由于这种关系,如果我想创建一个新的专辑..我将不得不发布专辑数据..和整个Arist-data ..不仅仅是艺术家的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"
        }
    }

第二个选项实际上是有一个特定于此的路线/网址... 例如: / API /艺术家/ {} artistid /专辑 然后只需将专辑对象发布到该网址即可。

但正如我所说的那样..我真的不确定这里是非对错..还是有任何标准的处理方式?

提前致谢!

3 个答案:

答案 0 :(得分:6)

我会建议这样的事情。

POST /musicstore/artist/343/albums

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

创建资源作为艺术家343的专辑集合的子项的行为隐含地创建了艺术家和专辑之间的关系。无需在有效负载中指定它。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

专辑和艺术家是两个独立的实体,您不应仅将其艺术家ID的所有艺术家数据发布到相册中。 因此,如果艺术家不存在,请首先创建它,然后发布专辑详细信息,artist_id是其属性之一。