您的模型应该知道您的API版本吗?

时间:2013-01-25 12:39:51

标签: api rest sinatra versioning software-design

我们将为我们的API代码实现版本控制系统,该系统基于sinatra构建,并且将有一个默认的API版本,客户端将能够选择添加HTTP Accept Header的特定版本。

现在我想了解您是否严格保留控制器内的API版本信息,或者允许以某种方式在模型中传递api版本。如果将它保存在控制器中,那么在模型中传播API版本有什么缺点?

2 个答案:

答案 0 :(得分:0)

在RESTful API设计中,通过选择媒体类型来完成版本控制,我相信这是您要做的。如果我正确地理解了第二段,那么你问的是版本信息是否也应该在交付的响应中(即文档模型的一部分)?

这样的决定是任意的,但是许多格式在其自身内部携带版本信息,以防它们通过可能丢失元数据(例如版本信息)的有损系统。出于这个原因,我建议把它放在你的模型中。

答案 1 :(得分:0)

对API进行版本控制并不意味着您的控制器在内部处理版本控制,然后与内部处理版本控制的模型进行通信。相反,它意味着您应该具有不同版本的控制器和模型,您可以根据请求中的API版本在运行时交换进出。

现在,我提到Sinatra,你认为你正在使用Ruby。我对Sinatra或Ruby知之甚少,但I answered a similar question for ASP.NET MVC 4并讨论了Sebastiaan Dammann编写的版本框架。

也许看看Ruby是否已存在类似的框架。