我想知道以下命名约定是否正确适合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
答案 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
是普通资源类型,例如accounts
和products
。