2016-11-18 39 views
1

在构建REST API中,添加到版本2中的响应的字段是否会返回来自调用版本1终点的响应?添加的字段应该在较低的API版本中可见吗?

作为一个例子,给出的端点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

如果你只是添加属性,你(可能)不需要为你的API版本。乖巧的客户会忽略任何新的属性。在大多数情况下,添加属性被认为是一个不间断的更改。

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

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

我不能说话Laravel和雄辩。

相关问题