Tôi đang làm việc trên một ứng dụng mà chúng tôi đang nghiên cứu khả năng sử dụng jsonapi để mô tả dữ liệu trong tất cả các phản hồi API. Nó hoạt động khá tốt cho các thực thể giống như tài nguyên, nhưng chúng tôi đang gặp một số vấn đề nảy sinh với cách mô tả dữ liệu báo cáo theo cách giống như jsonapi.Trình bày dữ liệu tổng hợp phi tài nguyên với JSON API
Theo dữ liệu báo cáo, tôi tham khảo dữ liệu được tổng hợp và tính toán nhanh chóng từ dữ liệu cơ sở giống như tài nguyên mà chúng tôi lưu trữ trong cơ sở dữ liệu của mình. Ví dụ, hãy tưởng tượng chúng tôi lưu trữ thông tin bất động sản và chúng tôi có thông tin về nhà ở, căn hộ và không gian văn phòng, mỗi vị trí được liên kết với vị trí, kích thước của tài sản bằng feet vuông, loại tài sản (thời tiết là nhà, căn hộ hoặc không gian văn phòng), và mọi thông tin liên quan khác về tài sản. Bây giờ hãy tưởng tượng chúng ta cần một báo cáo nhận được ?group_by[]=location&group_by[]=type
và chúng tôi muốn phản hồi để truyền tải thông tin tổng hợp về giao điểm của hai tham số group_by
đó. Vì vậy, chúng tôi sẽ nhận được ví dụ, một đối tượng có chứa diện tích chân vuông trung bình của tất cả các thuộc tính trong một vị trí nhất định, cũng được nhóm theo loại thuộc tính.
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
Điều quan trọng nhất mà chúng tôi có thể nghĩ đến từ dữ liệu này là mỗi ô, nhưng vì chúng là kết quả của việc tính toán dữ liệu cơ bản hơn, chúng không có ID tự nhiên. Chúng tôi cũng đã suy nghĩ về việc phân phối chúng với ID được tính (có thể kết hợp ID của thứ nguyên theo đó dữ liệu của chúng được nhóm, tức là "house,34"
trong đó house
đại diện cho loại thuộc tính và 34
là ID của vị trí "Manhattan"). Sau đó, mỗi ô sẽ có mối quan hệ với bản ghi vị trí tương ứng, sẽ được bao gồm trong phần included
của tải trọng. Dưới đây là tệp mẫu json về cách thức trông giống như sau:
{
"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"
}
}
]
}
Câu hỏi của tôi là: đây có phải là cách thích hợp để thể hiện loại dữ liệu này trong jsonapi không? Jsonapi có phù hợp và/hoặc được đề xuất cho dữ liệu không trực tiếp ánh xạ tới tài nguyên không? Tôi sẽ tốt hơn đại diện cho dữ liệu này trong json tùy chỉnh? Tôi biết không phải những câu hỏi này có thể có câu trả lời rõ ràng, nhưng có lẽ đã có một số kinh nghiệm về cách tiếp cận các kịch bản tương tự, ưu và nhược điểm của việc cố gắng làm cho loại dữ liệu này phù hợp với jsonapi, v.v. Nhiều đánh giá cao. Cảm ơn.
PS: Tôi đã đăng bài này ngay cả sau khi đào bới diễn đàn và trên internet, và đây là hai liên kết duy nhất tôi tìm thấy nói về thứ gì đó mà tôi đang cố gắng tìm hiểu và tôi bao gồm vào đây để tham khảo cũng như: 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
Tôi không yêu cầu một giải pháp cụ thể cho trường hợp cụ thể này, nhưng đối với một số thông tin liên quan đến khả năng sử dụng API JSON cho loại dữ liệu phi tài nguyên này. Được khuyến nghị? Tôi có nên nỗ lực nhiều hơn trong việc cố gắng điều chỉnh dữ liệu của mình sang JSON API không? Hoặc có lẽ JSON API được thiết kế để được sử dụng cụ thể với dữ liệu giống như tài nguyên? – Ernesto