Rest 添加的字段是否应在较低的API版本中可见?

Rest 添加的字段是否应在较低的API版本中可见?,rest,eloquent,laravel-5.3,api-design,Rest,Eloquent,Laravel 5.3,Api Design,在构建RESTAPI时,在版本2中添加到响应的字段是否应该与对版本1端点的调用的响应一起返回 例如,给定端点api/v1/users/1,响应可能是: { "first_name":"david" } 然后在v2中,给定端点api/v2/users/1,响应可以更新为: { "first_name":"david", "last_name":"smith" } 如果调用v2端点时返回的响应与调用v1端点时返回的响应相同,这会是一种不好的做法吗?我最初的想法是肯定的,但

在构建RESTAPI时,在版本2中添加到响应的字段是否应该与对版本1端点的调用的响应一起返回

例如,给定端点api/v1/users/1,响应可能是:

{
    "first_name":"david"
}
然后在v2中,给定端点
api/v2/users/1
,响应可以更新为:

{
    "first_name":"david",
    "last_name":"smith"
}
如果调用v2端点时返回的响应与调用v1端点时返回的响应相同,这会是一种不好的做法吗?我最初的想法是肯定的,但我没有看到任何问题,因为这种改变不会被打破


作为旁注,这个问题源于试图弄清楚如何使用Laravel和Eloquent构建版本化api。我很难用Elount找到一种实现这一点的方法,需要将模型映射到一个版本化的模型,或者使用QueryBuilder编写所有存储库来控制字段。标记为Laravel且雄辩,因为这些是我正在使用的特定框架,我想看看是否有人有使用这些框架的解决方案,但问题是一般的api设计。

如果您只是添加属性,您(可能)不需要对api进行版本设置。行为良好的客户端将忽略任何新属性。在大多数情况下,添加属性被视为一种非破坏性更改

更改V1 API响应以包含新属性并添加与V1完全相同的V2是愚蠢的。不要那样做。两个看起来相同的版本没有任何价值

如果您正在进行破坏性的更改,那么更新v1api以进行这些更改也是一个糟糕的想法,您不应该这样做

我不能和拉雷维尔说话,也不能雄辩