2013-01-25 45 views
0

我使用ASP.NET WebAPI构建RESTful API,我需要支持不同的API版本。 我知道基于URL(api/v1/style)或基于自定义HTTP头实现控制器选择的方法。通过这种方式,我将在不同的API版本的不同名称空间中使用不同的控制器。不过,我还有另一个问题需要考虑。如果我的模型在v1和v2之间变化会怎样?我如何让我的v1 API改变它的序列化输出?我使用的是实体框架代码优先的方法,所以模型更改很容易实现,但这可能会破坏我的v1 API。确保每个API版本保持一致的最佳方法是什么?版本控制WebAPI - 模型更改

回答

2

我不明白实体框架与它有什么关系。我希望你不是直接序列化你的EF模型,是吗?如果你这样做,那么你确实有问题。

您应该改用视图模型。这些视图模型随后可以与您对控制器进行版本控制相同的方式进行版本控制。对于不同版本的控制器,您将拥有不同的视图模型。

通过这种方式,您可以完全控制通过电线进行序列化的内容。现在,您可以尽可能多地在内部更改EF模型。有一天,你甚至可能会决定放弃EF(因为它可能会吸引人,并且可能会有一个新的孩子),并将其替换为完全不同的东西,这种改变将不会反映在你的Web API上,以及暴露给外面只是因为你正在曝光视图模型。

+0

我正在序列化我的EF模型,它们只是POCO类 - 当我切换到Hibernate时,我可以使用这些类,例如,我只需要连接一些映射。 –

+0

http://www.asp.net/web-api/overview/creating-web-apis/using-web-api-with-entity-framework/using-web-api-with-entity-framework,-part- 1 本教程似乎也可以。 –

+0

是的,除了那个你触摸那些实体的时候,你打破了所有的客户端,因为你的API依赖于它们。这正是你问这个问题的原因。我对此的回答非常简单:**从不**连载您的域实体。 **总是**使用视图模型。您在此链接的教程只是如何开始使用Web API的基本示例。当你想要设计一个真实世界的应用程序时,你需要考虑很多事情,而大多数*入门*教程都没有涉及。其中之一就是版本控制。 –