9

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

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

因此,关系是艺术家 <--- 1 ----- * ---> 专辑,并且要存在专辑,就需要专辑有艺术家。但艺术家不需要和专辑。

现在问题...

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

但正如我所说..我真的不确定这里是对是错..或者是否有任何标准的处理方式?

提前致谢!

4

2 回答 2

8

我会建议这样的事情。

POST /musicstore/artist/343/albums

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

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

于 2013-03-11T15:14:18.313 回答
0

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

于 2019-02-07T10:29:41.160 回答