Asp.net web api 在普通ASP.NETMVC应用程序中使用WebAPI的好处

Asp.net web api 在普通ASP.NETMVC应用程序中使用WebAPI的好处,asp.net-web-api,Asp.net Web Api,在基于CRUD的ASP.NET MVC应用程序中使用Web API有什么好处吗?我知道使用Web API确实给我们带来了RESTful服务层的好处,但我不赞成替换整个服务层(以及底层业务和数据访问层),而只使用服务访问数据库。相反,我觉得我们应该在客户需要支持其他应用程序(如SPA或移动版应用程序)时,将少数功能作为服务公开 问题是,在我的情况下,当大部分工作主要是将复杂的html视图返回给一个应用程序,而内部操作主要是CRUD,可能是一些业务逻辑时,选择一个完整的服务层是否有意义?由于必须创建

在基于CRUD的ASP.NET MVC应用程序中使用Web API有什么好处吗?我知道使用Web API确实给我们带来了RESTful服务层的好处,但我不赞成替换整个服务层(以及底层业务和数据访问层),而只使用服务访问数据库。相反,我觉得我们应该在客户需要支持其他应用程序(如SPA或移动版应用程序)时,将少数功能作为服务公开

问题是,在我的情况下,当大部分工作主要是将复杂的html视图返回给一个应用程序,而内部操作主要是CRUD,可能是一些业务逻辑时,选择一个完整的服务层是否有意义?由于必须创建代理,是否存在任何性能问题。这种体系结构在扩展时有什么好处?问题太多了。只是困惑。我看不出有必要,但也许我错过了什么


拥有SOA的想法似乎很好,但担心它是否会降低性能

在两种情况下,WebAPI对您来说是个好主意:

  • 其他应用程序可能需要访问相同的数据,您只需要编写一次业务逻辑/数据访问逻辑
  • 您希望编写浏览器端javascript,使AJAX回调到应用程序的服务器端以检索数据
    对于#2,也可以使用常规MVC和JsonResponse处理程序。在我的应用程序中,我使用这两种方法。如果我只是返回数据,并且我想直接序列化我的模型对象,我将设置一个WebAPI控制器。但是如果我需要通过Razor模板运行模型,我的控制器上有一个扩展方法,它允许我将视图呈现为字符串,然后在JSON对象中作为一个属性返回,并为我需要返回的任何元数据设置一些其他属性,如成功代码、错误消息、序列化异常对象,等等。

    在两种情况下,WebAPI对您来说是个好主意:

  • 其他应用程序可能需要访问相同的数据,您只需要编写一次业务逻辑/数据访问逻辑
  • 您希望编写浏览器端javascript,使AJAX回调到应用程序的服务器端以检索数据
    对于#2,也可以使用常规MVC和JsonResponse处理程序。在我的应用程序中,我使用这两种方法。如果我只是返回数据,并且我想直接序列化我的模型对象,我将设置一个WebAPI控制器。但是如果我需要通过Razor模板运行模型,我的控制器上有一个扩展方法,它允许我将视图呈现为字符串,然后在JSON对象中作为一个属性返回,并为我需要返回的任何元数据设置一些其他属性,如成功代码、错误消息、序列化异常对象,等等。

    我认为在网站和web API之间共享业务逻辑库比让服务器端网站代码调用web API要好得多

    HTTP协议针对低延迟和独立演进的组件进行了优化。如果同一个团队同时控制web站点和web API,并且它们同时部署,并且它们都位于同一个数据中心,那么使用HTTP相互通信就没有什么价值

    如果您尝试使用Web API向Web站点提供数据,您将面临的另一个问题是,您可能会构建一个在数据中心运行良好的聊天Web API,但当远程客户端尝试使用它时,可能会出现性能问题


    如果您希望第三方使用的Web API高效且有效,则应将其构建为公开用例,不是您的网站需要访问的域实体。

    我认为在网站和web API之间共享业务逻辑库比让服务器端web站点代码调用web API要好得多

    HTTP协议针对低延迟和独立演进的组件进行了优化。如果同一个团队同时控制web站点和web API,并且它们同时部署,并且它们都位于同一个数据中心,那么使用HTTP相互通信就没有什么价值

    如果您尝试使用Web API向Web站点提供数据,您将面临的另一个问题是,您可能会构建一个在数据中心运行良好的聊天Web API,但当远程客户端尝试使用它时,可能会出现性能问题


    如果您希望第三方使用的Web API高效且有效,则应将其构建为公开用例,而不是您的网站需要访问的域实体。

    是,适用于1。我只是想知道我是否可以编写一个服务层(更像一个API),它将在内部调用相同的业务逻辑层(类库)。可能吗?如果我以后决定某些业务功能需要作为服务提供,我是否必须重写业务层?在我看来,WebAPI服务层可以位于业务层之上,而不必构成整个业务层和DAL层。这是可行的吗?不,以后不需要使用不同的业务层或对其进行修改来添加WebAPI服务层,只要您将UI逻辑与业务逻辑完全分离。例如,我经常使用业务层模型作为传递给视图的模型,但我也创建了特定于UI的模型类,以便将特定于UI的信息传递给视图。这些模型进入MVC项目的/models文件夹,而其他模型通常位于业务层的单独库项目中。这有助于保持各层的独立性,并使业务模型在服务中可用。我只是想知道我是否可以编写一个服务层(更像一个API),它将在内部调用相同的业务逻辑层(类库)。可能吗?我会吗