WebApi和MVC之间的共享模型

时间:2017-04-12 17:43:38

标签: c# asp.net asp.net-mvc asp.net-web-api

我正在制作一个同时使用WebAPI和ASP.NET MVC模板的项目。我的MVC将请求发送到逻辑发生的WebAPI。对于我的WebAPI,我创建了请求/响应模型(它们在服务中使用)。我需要一个建议,如果值得分享WebAPI和MVC的请求/响应模型,或者是否有一些好的做法来做这些事情。谢谢!

2 个答案:

答案 0 :(得分:1)

这实际上是微服务架构中非常常见的情况。通常,最好将前端与后端分离,就像应用程序在调用任何其他api时一样(例如Spotify' api)。但是如果你将它们解耦,那么你需要在调用应用程序和api中获得请求和响应对象的副本。他们不必完全 相同但他们需要足够接近以发送包含所有必需信息的请求,然后捕获响应并将其反序列化回您需要的对象中前端。

不利的一面是,每次发生变化时,您最终都必须将模型更改为两个位置。那或者你开始创建版本化路线并逐渐弃用旧路线。

答案 1 :(得分:1)

老实说,当你处理API和MVC时,设计的良好实践是分离。通常情况下,您的API会与前端或客户端完全隔离,因为考虑到它,API是一个独立的系统。与Google Maps API等任何API一样,从理论上讲,您可以通过移动应用,Web应用程序或其他单独的系统调用它,以便定义对请求的期望,并且每个客户端都可以匹配传出的请求模型。

基本解释中的MVC模型应该用于在客户端上显示信息,因此它们应该特定于每个视图以及视图需要什么,因此视图模型。您可能需要显示API发送的部分或全部数据,以便让模型仅适合视图所需的数据,而不是在内存中拥有一堆您可能永远不会使用的数据。

总的来说,我找到一个很好的方法来拥有一个核心项目框架,该框架具有与数据库,数据模型匹配的共享模型。您可以使用这些基本定义,认为匹配数据库表的地址模型不会改变含义,在服务层中为请求/响应和数据访问创建API模型,并另外用于视图模型的定义。共享核心资源,但完全独立的模型,适合您在该应用程序层中所做的定义。