多对多 JSON API URI 命名



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

给定帐户和产品之间的多对多关系,帐户-产品资源存储两者之间的透视数据。

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

帐户>帐户-产品>产品

网址:

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

/api/v1/account-products:返回账户-产品资源

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

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


这里的两个论点是这样的:

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

选项 2:帐户/1/产品应返回与帐户相关的产品,并且还将帐户-产品资源作为强制关系包含在内,因为 URI 中的资源是产品,而不是帐户-产品

JSON:API 规范与 URL 设计无关。因此,这主要取决于使用这些 URL 的位置。但是 JSON:API 规范附带了一些关于 URL 设计的建议。我假设你遵循那个。特别是/api/v1/accounts/1/products被用作相关的资源链接,例如

{
"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.

最新更新