在构建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设计。
答案 0 :(得分:1)
如果您只是添加属性,则(可能)不需要对API进行版本控制。表现良好的客户端将忽略任何新属性。在大多数情况下,添加属性被视为不间断的更改。
更改V1 API响应以包含新属性并添加与V1完全相同的V2是愚蠢的。不要这样做。两个看起来相同的版本没有任何价值。
如果您正在进行重大更改,那么更新V1 API以进行这些更改也是一个糟糕的想法,您不应该这样做。
我无法与Laravel和Eloquent说话。