我正在使用ASP.NET WebAPI构建RESTful API,我需要支持不同的API版本。 我知道基于URL(api / v1 / style)或基于自定义HTTP头实现控制器选择的方法。这样,我将在不同的名称空间中为不同的API版本提供不同的控制器。不过我还有另外一个需要考虑的问题。如果我的模型在v1和v2之间变化怎么办?如何让我的v1 API不更改其序列化输出?我正在使用Entity Framework Code First方法,因此模型更改很容易实现,但这可能会破坏我的v1 API。确保每个API版本保持一致的最佳方法是什么?
答案 0 :(得分:2)
我看不出Entity Framework与它有什么关系。我希望你不要直接序列化你的EF模型,对吗?如果你这样做,那么你确实遇到了问题。
您应该使用视图模型。然后,可以使用与控制器版本相同的方式对这些视图模型进行版本控制。对于不同版本的控制器,您将拥有不同的视图模型。
通过这种方式,您可以完全控制通过线路进行序列化的内容。现在,您可以根据需要在内部更改EF模型。有一天你甚至可能决定放弃EF(因为它糟透了,块上可能有一个新的孩子)并用完全不同的东西替换它,这个改变不会反映你的Web API以及暴露的内容外面只是因为你暴露了视图模型。