gpt4 book ai didi

json - 使用 JSON API 表示无资源的聚合数据

转载 作者:行者123 更新时间:2023-12-04 19:44:55 25 4
gpt4 key购买 nike

我正在开发一个应用程序,我们正在研究使用 jsonapi 来描述所有 API 响应中的数据的可能性。它适用于类似资源的实体,但我们在想出一种以类似 jsonapi 的方式描述报告数据的方法时遇到了一些麻烦。

通过报告数据,我指的是从我们存储在数据库中的基本资源类数据中动态聚合和计算的数据。例如,假设我们存储房地产信息,并且我们有关于房屋、公寓和办公空间的信息,每个信息都与位置、房产大小(以平方英尺为单位)、房产类型(无论是房屋、公寓还是办公空间)、以及有关房产的任何其他相关信息。现在假设我们需要一个接收 ?group_by[]=location&group_by[]=type 的报告,并且我们希望响应传达关于这两个 group_by 参数的交集的聚合信息。因此,例如,我们会收到一个对象,该对象包含给定位置所有房产的平均平方英尺面积,也按房产类型分组。

Average Property Sizes (in square feet)
Houses Apartments Offices
Manhattan 1234.56 234.56 123.45
Cape Coral 456.78 654.32 876.54
Portland 4321.00 987.65 2345.67

我们可以从这些数据中想到的最像资源的东西是每个单元格,但由于它们是更基本数据的计算聚合的结果,因此它们没有自然的 ID。我们一直在考虑为它们提供一个计算出的 ID(也许组合它们的数据分组所依据的维度的 ID,即 "house,34",其中 house 表示一种属性,而 34 是位置“曼哈顿”的 ID )。然后每个单元将与相应的位置记录有关系,位置记录将包含在有效载荷的 included 部分中。这是一个示例 json 文件,它看起来像这样:
{
"data": [
{
"id": "house,123",
"type": "report_items",
"attributes": {
"property_type": "house",
"value": 108.75
},
"relationships": {
"location": {
"data": {
"type": "locations",
"id": 123
}
}
}
},
{
"id": "house,124",
"type": "report_items",
"attributes": {
"property_type": "house",
"value": 36.0
},
"relationships": {
"location": {
"data": {
"type": "locations",
"id": 124
}
}
}
},
{
"id": "house,125",
"type": "report_items",
"attributes": {
"property_type": "house",
"value": 1.0
},
"relationships": {
"location": {
"data": {
"type": "locations",
"id": 125
}
}
}
},
{
"id": "office,123",
"type": "report_items",
"attributes": {
"property_type": "office",
"value": 4.0
},
"relationships": {
"location": {
"data": {
"type": "locations",
"id": 123
}
}
}
},
{
"id": "office,124",
"type": "report_items",
"attributes": {
"property_type": "office",
"value": 2.0
},
"relationships": {
"location": {
"data": {
"type": "locations",
"id": 124
}
}
}
},
{
"id": "apartment,123",
"type": "report_items",
"attributes": {
"property_type": "apartment",
"value": 2.0
},
"relationships": {
"location": {
"data": {
"type": "locations",
"id": 123
}
}
}
},
{
"id": "apartment,125",
"type": "report_items",
"attributes": {
"property_type": "apartment",
"value": 4.5
},
"relationships": {
"location": {
"data": {
"type": "locations",
"id": 125
}
}
}
},
{
"id": "apartment,124",
"type": "report_items",
"attributes": {
"property_type": "apartment",
"value": 2.0
},
"relationships": {
"location": {
"data": {
"type": "locations",
"id": 124
}
}
}
}
],
"included": [
{
"type": "locations",
"id": "123",
"attributes": {
"name": "Manhattan"
}
},
{
"type": "locations",
"id": "124",
"attributes": {
"name": "Cape Coral"
}
},
{
"type": "locations",
"id": "125",
"attributes": {
"name": "Portland"
}
}
]
}

我的问题是:这是在 jsonapi 中表示这种数据的正确方法吗? jsonapi 是否适合和/或推荐用于不直接映射到资源的数据?我最好在自定义 json 中表示这些数据吗?我知道这些问题中没有一个可能有明确的答案,但也许已经有一些关于如何处理类似场景的经验,尝试使此类数据适合 jsonapi 的利弊等。任何评论和帮助都非常有用非常感激。谢谢。

PS:即使在论坛和互联网上进行了一些挖掘后,我还是发布了这个,这是我发现的仅有的两个链接,它们谈论的内容与我试图找出的内容相似,我将它们包含在此处以供引用好:
1.- http://discuss.jsonapi.org/t/composite-id-inside-the-resource-object/367/13
2.- http://discuss.jsonapi.org/t/extension-for-chart-graph-data/408

最佳答案

一般的答案是考虑哪些数据足够重要以保证 API 两端的身份。我的意思是决定以后要引用哪些内容或用关系表示哪些内容。 JSON API 允许您将这些内容定义为资源,并允许您将资源与更通用的 JSON 混合用于不透明的数据。

例如,也许 reports以及用于创建它们的选项和过滤器值得跟踪,以便客户可以通过其 id 请求重新查看同一报告。 .也许您想轮询服务器以查看正在创建哪些报告。

在客户端,您可能希望显示来自 property_type 的链接。资源以获取有关这些属性类型的更多信息。

或者也许报告中的结果更好地表示为资源中的 JSON 块。 attributesmeta可以包含任何类型的 JSON 值。

在您的特定情况下,您的主要资源可能是 reports 类型。 ,或 report_items 的数组,或者甚至是 property_summaries 的数组与 property_types 的关系和 locations .

如果您选择更通用的资源类型,您可以概括报告过程,但您可能无法捕捉到数据的重要性。

如果您为报告选择非常具体的资源,您将需要真正自定义每种类型的报告,但您将能够在客户端上的资源之间建立有意义的联系。

关于json - 使用 JSON API 表示无资源的聚合数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36704587/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com