我对网络应用程序中的可读性和可用性有一些疑问,但我无法找到我想要的答案。我将用一个例子来解释我的问题。
我的网络应用程序需要显示有关房屋,汽车和动物的一些信息。我有一个API端点,它返回所有项目,如:
[
{
"id": "1",
"type": "car"
},
{
"id": "2",
"type": "house"
},
...
]
到目前为止一切顺利,但现在我需要有关所有项目的更多信息。此信息作为参考(引用信息的ID字符串)存储并从API获取。房屋和汽车只能包含1个参考,动物可以包含1个或更多参考。
如何设置服务是不相关的,但API现在返回引用,如下所示:
[
{
"id": "1",
"type": "car",
"references": ["car1"]
},
...
{
"id": "3",
"type": "animals",
"references": ["animal1", "animal3"]
},
...
]
请注意,car item也会返回一个引用数组,但它只能包含一个引用!
此设置使我的JavaScript前端非常简单,它只是遍历所有项目,并且(如果需要)为每个引用执行另一个API调用。
问题1
我现在正试图弄清楚这是否是正确的方法,因为API错误地暗示汽车和房屋可以有多个参考。我有API文档可以清楚地解释它们不能,但我也喜欢一个不需要大量文档的API,因为它非常明显。
问题2
我的后端(用Java编写)有一个抽象的Item
模型,其中包含id
和type
成员。 id
属性只是一个随机字符串,type
成员可以是house
,car
或animals
。然后有resp。 3个子类名为House
,Car
和Animal
,每个子类都将type
成员限制为自己的类型。在这些模型中实现引用的最佳方法是什么?
我可以在references
模型上添加Item
成员,这是一个数组。这样可以很容易地在前端显示。但是,如果API将按照问题1中的建议进行更改,那么它将更有意义:
Car
模型提供car
个Car
个参与House
模型提供house
个House
个参与Animal
模型提供animals
成员Animal
引用数组导致类似:
[
{
"id": "1",
"type": "car",
"car": "car1"
},
...
{
"id": "3",
"type": "animals",
"animals": ["animal1", "animal3"]
},
...
]
但是这会给我一些前端的问题,试图找出它得到的模型,显示它等等。
希望我解释得对,如果有人能指出我正确的方向!
编辑我需要Item
所有内容,而且返回的顺序也很重要。
答案 0 :(得分:1)
您忘记了一种可能性:您不必暴露与您使用internaly相同的模型。 关于数据模型的更重要的事情是它背后的业务。那么问问自己,对于一个项目是否有参考感觉? 如果是,则在引用中添加List,否则在car中添加唯一引用,在动物中添加List。 至于JSON部分,它很大程度上取决于您请求的端点。您应该有一个端点的特定模型。如果你请求/ items,那么json数组的所有元素应该具有相同的模型。