多对多 JSON API URI 命名
Many-to-Many JSON API URI naming
我想知道以下命名约定是否正确符合 JSON API 标准,因为在我能找到的任何地方都没有具体提及。
给定账户和产品之间的多对多关系,账户-产品资源存储两者之间的数据透视表。
我想知道如何处理 /api/v1/accounts/1/products 关系资源
账户 > 账户-产品 > 产品
网址:
/api/v1/accounts:returns 账户资源
/api/v1/account-products: returns account-product resources
/api/v1/accounts/1/products:returns account-product resources
或
/api/v1/accounts/1/products: return 产品 与帐户相关的资源
这里的两个论点是:
选项 1:account/1/products 应该 return 帐户和产品之间的 link 因为它本质上应该充当 ID 本质上应该充当连字符,例如account/1/products 真正的意思是账户产品。
选项 2:account/1/products 应该 returns 与账户相关的产品,并且还包括账户-产品资源作为强制关系,因为 URI 中的资源是产品,而不是账户-产品
JSON:API 规范与 URL 设计无关。因此,这主要取决于这些 URL 的使用位置。但是 JSON:API 规范附带了一些 recommendations on URL design. I assume that you follow that ones. Especially that /api/v1/accounts/1/products
is used as related resource link,例如
{
"type": "accouts",
"id": "1",
"relationships": {
"products": {
"links": {
"related": "/api/v1/accounts/1/products"
}
}
}
}
在那种情况下,规范非常清楚应该 returned:
Related Resource Links
A “related resource link” provides access to resource objects linked
in a relationship. When fetched, the related resource object(s) are
returned as the response’s primary data.
For example, an article’s comments relationship could specify a link
that returns a collection of comment resource objects when retrieved
through a GET request.
https://jsonapi.org/format/#document-resource-object-related-resource-links
根据您描述数据结构的方式,一个 account
有多个 account-products
,属于一个 product
。所以它应该 return 相关 account-products
。您可以默认包含它们所属的 products
。
可能会让您感到困惑的是中间关系的概念,例如某些 ORM(例如 Eloquent)中的 "Has One Through"。命名 account-products
表明这可能就是这样的一个例子。 JSON:API 规范不支持类似的东西。中间关系应该使用普通资源类型建模。因此,在您的情况下 account-products
将是正常的资源类型,例如 accounts
和 products
.
我想知道以下命名约定是否正确符合 JSON API 标准,因为在我能找到的任何地方都没有具体提及。
给定账户和产品之间的多对多关系,账户-产品资源存储两者之间的数据透视表。
我想知道如何处理 /api/v1/accounts/1/products 关系资源
账户 > 账户-产品 > 产品
网址:
/api/v1/accounts:returns 账户资源
/api/v1/account-products: returns account-product resources
/api/v1/accounts/1/products:returns account-product resources
或
/api/v1/accounts/1/products: return 产品 与帐户相关的资源
这里的两个论点是:
选项 1:account/1/products 应该 return 帐户和产品之间的 link 因为它本质上应该充当 ID 本质上应该充当连字符,例如account/1/products 真正的意思是账户产品。
选项 2:account/1/products 应该 returns 与账户相关的产品,并且还包括账户-产品资源作为强制关系,因为 URI 中的资源是产品,而不是账户-产品
JSON:API 规范与 URL 设计无关。因此,这主要取决于这些 URL 的使用位置。但是 JSON:API 规范附带了一些 recommendations on URL design. I assume that you follow that ones. Especially that /api/v1/accounts/1/products
is used as related resource link,例如
{
"type": "accouts",
"id": "1",
"relationships": {
"products": {
"links": {
"related": "/api/v1/accounts/1/products"
}
}
}
}
在那种情况下,规范非常清楚应该 returned:
Related Resource Links
A “related resource link” provides access to resource objects linked in a relationship. When fetched, the related resource object(s) are returned as the response’s primary data.
For example, an article’s comments relationship could specify a link that returns a collection of comment resource objects when retrieved through a GET request.
https://jsonapi.org/format/#document-resource-object-related-resource-links
根据您描述数据结构的方式,一个 account
有多个 account-products
,属于一个 product
。所以它应该 return 相关 account-products
。您可以默认包含它们所属的 products
。
可能会让您感到困惑的是中间关系的概念,例如某些 ORM(例如 Eloquent)中的 "Has One Through"。命名 account-products
表明这可能就是这样的一个例子。 JSON:API 规范不支持类似的东西。中间关系应该使用普通资源类型建模。因此,在您的情况下 account-products
将是正常的资源类型,例如 accounts
和 products
.