多对多JSON API URI命名

时间:2019-07-17 11:20:24

标签: uri naming-conventions json-api

我想知道以下命名约定是否正确适合JSON API标准,因为在我能找到的任何地方都没有特别提及。

考虑到帐户和产品之间的多对多关系,帐户-产品资源存储了两者之间的关键数据。

我想知道如何处理 / api / v1 / accounts / 1 / products 关系资源

帐户>帐户产品>产品

URL:

/ api / v1 /帐户:返回帐户资源

/ api / v1 /帐户产品 s:返回帐户产品资源

/ api / v1 /帐户/ 1 /产品:返回帐户产品资源

OR

/ api / v1 /帐户/ 1 /产品:返回与该帐户相关的产品资源


这里有两个参数:

选项1:帐户/ 1 /产品应返回帐户与产品之间的链接,因为它实际上应充当ID,而本质上应充当连字符,例如account / 1 / products实际上就是帐户产品。

选项2:account / 1 / products应该返回与该帐户有关的产品,并且还应包括account-products资源作为强制关系,因为URI中的资源是product,而不是account-product

1 个答案:

答案 0 :(得分:1)

JSON:API规范与URL设计无关。因此,这主要取决于这些URL的使用位置。但是JSON:API规范附带了一些recommendations on URL design。我假设你遵循那些。特别是/api/v1/accounts/1/products用作related resource link,例如

{
  "type": "accouts",
  "id": "1",
  "relationships": {
    "products": {
      "links": {
        "related": "/api/v1/accounts/1/products"
      }
    }
  }
}

在那种情况下,规格说明了应该返回的内容:

  

相关资源链接

     

“相关资源链接”提供对链接的资源对象的访问   在一个(恋爱)关系中。提取时,相关资源对象是   作为响应的主要数据返回。

     

例如,文章的评论关系可以指定一个链接   检索时返回评论资源对象的集合   通过GET请求。

     

https://jsonapi.org/format/#document-resource-object-related-resource-links

根据您描述数据结构的方式,account有许多account-products,属于product。因此,它应该返回相关的account-products。您可以包括它们默认所属的products

可能会使您感到困惑的是某些ORM(例如,口才)中的中间关系的概念,例如“具有一次通过”。命名account-products暗示了这可能是一个例子。 JSON:API规范不支持类似的功能。中间关系应使用常规资源类型建模。因此,在您的情况下,account-products是普通资源类型,例如accountsproducts