应该在较低的API版本中显示添加的字段吗?

时间:2016-11-18 03:57:12

标签: rest eloquent laravel-5.3 api-design

在构建REST API时,添加到版本2中的响应的字段是否应该返回来自对版本1端点的调用的响应?

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

{
    "first_name":"david"
}

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

{
    "first_name":"david",
    "last_name":"smith"
}

在调用v1端点时返回的v2端点调用返回相同的响应是不是很糟糕?我最初的想法是肯定的,但是我再也没有看到问题,因为这种改变不会破裂。

作为旁注,问题出现在试图弄清楚如何使用Laravel和Eloquent构建版本化的api。我无法通过Eloquent轻松地看到实现此目的的方法,并且需要将模型映射到版本化的模型,或者使用QueryBuilder编写我的所有存储库来控制字段。标记为Laravel和Eloquent,因为这些是我正在使用的特定框架,并希望看到是否有人使用这些框架,但问题是api设计。

1 个答案:

答案 0 :(得分:1)

如果您只是添加属性,则(可能)不需要对API进行版本控制。表现良好的客户端将忽略任何新属性。在大多数情况下,添加属性被视为不间断的更改。

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

如果您正在进行重大更改,那么更新V1 API以进行这些更改也是一个糟糕的想法,您不应该这样做。

我无法与Laravel和Eloquent说话。