目前,我面临着构建Web服务的要求,该服务将允许java客户端通过httprequest检索并触发对我们数据的操作。我们是一个.Net商店,看来最新的解决方案是微软的MVC4 Web API。我已经习惯了你从API中提取数据的标准分层架构,但这将是我的第一个提供数据的Web服务。
从我的学习中我看到如下建议:
我正在寻找具有MVC4 Web API经验的人,他可以通过这种方式阐明构建Web服务的良好实践。
提前致谢。
答案 0 :(得分:18)
首先,确保将ASP.NET Web API逻辑放入单独的项目中。这将为您提供托管层的灵活性(因为ASP.NET Web API托管不可知),它只是使整个项目变得干净。假设您的项目名称是MyProject。您可以将API项目命名为MyProject.API
,并且可以将Microsoft.AspNet.WebApi.Core
NuGet包安装到此项目中。
我还建议您将域层分开(POCO实体,存储库,服务层片段等)。我们称之为MyProject.Domain
。然后,您将从MyProject.Domain
项目中引用此MyProject.API
项目。
我不建议您将所有POCO实体转储到API中。所以,我肯定会使用数据传输对象(Dto)。您可以使用autoMapper等第三方工具将实体类映射到Dtos。但是,请将您的Dtos,请求命令,请求模型放入单独的项目中。您可以参考MyProject.API.Model
项目中的MyProject.API
项目。为什么我们为此创建一个单独的项目?因为,稍后如果您决定为HTTP API构建.NET客户端包装器,您可以轻松地引用此项目以将其与.NET客户端一起使用。我们称这个项目为MyProject.API.Model
。
最后,我们需要一个用于API的托管层。假设您希望在ASP.NET下托管此项目,可以通过Empty Web Application模板创建一个新项目,然后让我们调用此项目MyProject.API.WebHost
。然后,您可以将Microsoft.AspNet.WebApi
包安装到此项目中。在此项目中,您可以参考MyProject.API
,MyProject.API.Model
和MyProject.Domain
个项目。该项目是您应该部署到服务器的项目。
如果要为HTTP API创建.NET包装器,可以创建另一个名为MyProject.API.Client
的项目并将Microsoft.AspNet.WebApi.Client
软件包安装到此项目中。您还可以从此引用MyProject.API.Model
项目,以便您可以从强类型对象反序列化和序列化。
以下是我一直在使用的项目的解决方案资源管理器的屏幕截图:
希望这会给你一些想法。