【问题标题】:REST api, POST entity with relationships?REST api,具有关系的 POST 实体?
【发布时间】:2013-02-26 19:38:47
【问题描述】:

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

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

所以关系是艺术家 专辑和专辑的存在要求专辑有艺术家。但艺术家不需要和专辑。

现在问题...

由于这种关系,如果我想创建一个新专辑..我必须发布专辑数据..以及整个 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}/专辑 然后只需将专辑对象发布到该网址..

但正如我所说.. 我真的不确定这里是对是错.. 或者有什么标准的处理方法吗?

提前致谢!

【问题讨论】:

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


    【解决方案1】:

    我会建议这样的东西。

    POST /musicstore/artist/343/albums
    
    {
        "Name":"AlbumName",
        "Description":"Some description for the album",
        "ReleaseYear": "1992",
    }
    

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

    【讨论】:

    • 这里可能是题外话.. 但是你将如何在 ASP.net web-api 中做到这一点?.. 因为为每个这样的路由定义一个新的路由会产生大量的代码 -线..
    • 多对多资源呢?路径应该包含两个唯一的 id 还是应该两个中的一个在正文有效负载中?
    • @StephaneEybert 两者都可以。我更喜欢后者。根据您的环境,这个tools.ietf.org/id/draft-snell-link-method-01.html 也可能很有趣。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-07-09
      • 2017-11-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-21
      • 1970-01-01
      相关资源
      最近更新 更多