ASP.NET Web API架构建议/反馈

6
我需要构建一个Web服务,让Java客户端通过Http请求检索和触发我们的数据操作。我们是一个.Net工作室,最新的解决方案似乎是微软的MVC4 Web API。我习惯于使用标准分层架构从API中提取数据,但这将是我第一次提供数据的Web服务。
根据我的研究,我看到了以下建议:
- 将逻辑和数据访问分离成一个单独的项目类型类库。 - 使用控件来访问数据并执行逻辑。 - 使用模型来访问数据并执行逻辑。
我正在寻找有MVC4 Web API经验的人,能够为以这种方式构建Web服务提供一些好的实践建议。
谢谢您的帮助。

1
欢迎来到stackoverflow!我认为这个问题有点模糊。你能解释一下你具体想做什么吗?比如说:“我的Web服务的设计应该是什么样子的?这是我的想法。”也许...这个问题似乎太过开放了。 - Parris
1
感谢您的回复和欢迎。恐怕我的问题模糊不清,与我对MVC 4产品的了解相匹配。我考虑了两个选项。第一个选项是将我的逻辑和数据访问分别放入不同的类库项目中,以便重用代码和更好的组织。另一个选择是只使用MVC外壳,并使用模型来处理业务逻辑和数据访问,但我觉得随着这个项目的发展,这种方法可能会变得非常混乱。 - vikingben
ASP.NET Web API != ASP.NET MVC http://www.tugberkugurlu.com/archive/newsflash-asp-net-web-api-does-not-sit-on-top-of-asp-net-mvc-in-fact-it-does-not-sit-on-top-of-anything 只是提供信息 :) - tugberk
哇,我是想在深夜输入MVC 4 Web Api的时候发送那个信息的。:D - vikingben
1个回答

19
首先,将ASP.NET Web API逻辑放入单独的项目中。这样可以灵活选择托管层(因为ASP.NET Web API是托管无关的),而且整个项目会更加清晰。假设你的项目名为MyProject。你可以将API项目命名为MyProject.API,并在该项目中安装Microsoft.AspNet.WebApi.Core NuGet包。
我还建议你将领域层(POCO实体、存储库、服务层等)分离出来。我们称之为MyProject.Domain。然后,你将从MyProject.API项目中引用此MyProject.Domain项目。
我不建议您将所有POCO实体都倒入API中。所以,我建议使用数据传输对象(Dto)。你可以使用像autoMapper这样的第三方工具将实体类映射到Dto。但是,请将你的Dtos、请求命令、请求模型放入一个单独的项目中。你将从MyProject.API项目中引用MyProject.API.Model项目。为什么要创建一个独立的项目?因为如果您决定为HTTP API构建.NET客户端包装器,稍后可以轻松地引用此项目,并在.NET客户端中使用它们。让我们称之为MyProject.API.Model项目。
最后,我们需要一个托管层来承载我们的API。假设您想在ASP.NET下托管此项目,您可以通过空Web应用程序模板创建一个新项目,并将其命名为MyProject.API.WebHost。然后,您可以在此项目中安装Microsoft.AspNet.WebApi包。从该项目中,您将引用MyProject.APIMyProject.API.ModelMyProject.Domain项目。这个项目是你应该部署到服务器上的项目。

如果您想为您的HTTP API创建一个.NET包装器,可以创建另一个名为MyProject.API.Client的项目,并在其中安装Microsoft.AspNet.WebApi.Client包。您还需要从这个项目中引用MyProject.API.Model项目,以便可以将数据反序列化为和序列化自强类型对象。

这是我正在使用的项目的解决方案资源管理器的截图:

enter image description here

希望这能给您一些想法。


它感谢您的反馈。我很感激您的快速回复。 - vikingben
5
这真的开始听起来像 https://github.com/EnterpriseQualityCoding/FizzBuzzEnterpriseEdition。 - Dan Esparza
1
@DanEsparza 如果你对其中任何一层不理解,就告诉我,我会告诉你它存在的原因。 - tugberk
1
我知道这篇文章有点老了,但我正在研究最佳实践,于是我在网上搜索,最终来到了这里。所以我的问题是,你能区分API、API客户端和API客户端Web吗?我不确定。 - Nick Kahn

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接