让我们假设我们有一个API端点:/ cars / 1,它返回有关汽车的基本信息(id,名称,描述)。
但我们也可以要求GET / cars / 1?info = extra,这也会返回有关汽车(价格,库存)的额外信息。这些额外的信息作为另一个表存储在我们的数据库中,该表与Car具有一对一的关系。
如果有帮助,我们的后端是Java Spring Boot应用程序。
有很多方法可以返回数据。您是否会在两个请求中返回相同的对象,并在?info = extra请求中将相应的额外参数设为null?或者你会为每个请求返回不同的对象吗?
对于我来说,在请求“基本”信息时返回所有空值的优点是使用相同的类来映射两个请求,只需更改JPA存储库中的@Query,便于维护。
返回所有空值也有缺点,即返回用户甚至没有请求的大量无用值。它还使API更难以阅读(有人可以认为所有这些值实际上都是空的而它们可能不是)。说到类,我们将有一个MappedSuperClass Car和另外两个类CarBasic和CarExtra,它们都扩展Car,每个类都有相应的getter来创建输出JSON。
选项1:
/汽车/ 1
{
id: 1,
name: "Honda Civic",
description: "The best car of Honda"
}
/汽车/ 1?信息=额外
{
id: 1,
name: "Honda Civic",
description: "The best car of Honda",
extraInfo: {
{
price: 25000,
stock: 24
}
}
选项2:
/汽车/ 1
{
id: 1,
name: "Honda Civic",
description: "The best car of Honda",
extraInfo: null
}
/汽车/ 1?信息=额外
{
id: 1,
name: "Honda Civic",
description: "The best car of Honda",
extraInfo: {
{
price: 25000,
stock: 24
}
}
选项3:
/汽车/ 1
{
id: 1,
name: "Honda Civic",
description: "The best car of Honda"
}
/汽车/ 1?信息=额外
{
id: 1,
name: "Honda Civic",
description: "The best car of Honda",
price: 25000,
stock: 24
}
您怎么看?
答案 0 :(得分:-1)
然而,不是StackOverflow类型的问题,但仍然是一个非常有趣的问题。
我个人更喜欢选项3.
在代码方面,您甚至可以使用带有额外字段的模型扩展普通Car
类。
答案 1 :(得分:-1)