我们仍旧使用上面的Web API项目: 将ValuesController中的Get()方法改成如下代码: [Http

时间:2021-08-05 09:15:48

HAL(Hypertext Application Language,超文本应用语言)是一种RESTful API的数据格局气势派头,为RESTful API的设计供给了接口规范,同时也降低了客户端与处事端接口的耦合度。很多当今风行的RESTful API开发框架,包孕Spring REST,也都默认撑持HAL规范,当RESTful API被挪用后,处事端就会返回ContentType为application/hal+json的JSON内容,例如:

{ "_links": { "self": { "href": "http://example.com/api/book/hal-cookbook" } }, "_embedded": { "author": { "_links": "self": { "href": "http://author-example.com" } }, "id": "shahadat", "name": "Shahadat Hossain Khan" } }, "id": "hal-cookbook", "name": "HAL Cookbook" }

相对付仅返回一个id和一个name的功效而言,这样的JSON Response包罗了更为丰富的信息,好比:当前请求的API地点、HAL Cookbook这本书的作者信息,以及访谒作者信息的超文本链接。那么客户端在获取到这个处事真个响应后,就能很便利地将这些信息绑定在界面上,而无需通过多个API的挪用来查找关联信息。另一方面,这种JSON Response中包罗的超文本链接也可以是动态的,好比分页导航链接,这样客户端实现分页成果将变得非常便利。本文着重介绍在ASP.NET Core Web API中,如何为本身设计的RESTful API增加对HAL的撑持。

Apworks框架

在ASP.NET Core Web API中为RESTful处事增加对HAL的撑持,是通过Apworks框架以及HAL框架来完成的。这两个框架都是我本身设计开发的开源框架,前者基于Apache 2.0开源,后者基于MIT开源,因此完全可以用于商业系统开发。HAL项目为超文本应用语言(Hypertext Application Language)供给了根基的数据模型和措置惩罚惩罚逻辑,它对JSON的撑持基于台甫鼎鼎的Newtonsoft.Json,因此性能方面是可以保证的。简便快捷的流畅接口(Fluent Interface API)编程方法,使得构建一个完整合理的HAL东西模型变得非常容易。HAL项目的设计使用了一些东西布局化模式,有兴趣的伴侣可以到Github项目主页(https://github.com/daxnet/hal)了解一下。

至于Apworks框架,它的主要成果并不是仅仅为了向ASP.NET Core Web API供给HAL的撑持,它更重要的是一套基于.NET Core的微处事快速开发框架,不只供给了面向范围驱动(DDD)的根基结构元素(聚合、实体、仓储、工厂等),而且整合了动静行列队伍、动静派发及订阅、动静措置惩罚惩罚、盘问处事、事件存储等微处事架组成果模块,并基于MongoDB、Entity Framework、RabbitMQ、PostgreSQL、SQL Server等根本处事作出了实现。目前整个框架还在开发和完善阶段,读者有兴趣也可以上Apworks Examples案例项目检察Apworks框架的案例代码,案例代码也在同步更新之中。等所有的案例代码开发完成后,我会对Apworks框架颁布一个相对不变的版本。

值得一提的是,Apworks框架中的Apworks.Integration.AspNetCore Package供给了对ASP.NET Core Web API的开发扩展,对HAL的撑持也是该Package的一个部分。OK,Apworks框架和HAL框架暂时介绍这些,它们不是本文重点。接下来,让我们看看,如何快速地在ASP.NET Core Web API中实现HAL的撑持。

最简单的案例

事实上,在《在ASP.NET Core中使用Apworks开发数据处事:对HAL的撑持》一文中,我已经介绍了如安在Apworks快速搭建数据处事的同时,供给HAL的JSON数据格局。其时的案例是需要满够数据处事开发模式的,好比需要注入仓储实例,并且Controller需要默认供给GET、POST、PUT、DELETE的操纵。这对付仅需要实现某些特定成果的通用Web API Controller而言,又显得太重了。所以,我们还是从最简单的案例开始吧。

打开Visual Studio 2017,新建一个ASP.NET Core Web API,.NET框架建议选择.NET Core/ASP.NET Core 2.0,项目模板选择Web API,此时会生成一个默认的ASP.NET Core 2.0 Web API应用措施。可以暂且不启用Docker撑持

直接启动这个ASP.NET Core Web API应用措施,将默认在浏览器中输出value1和value2两个值:

我们仍旧使用上面的Web API项目: 将ValuesController中的Get()方法改成如下代码: [Http



按照《在ASP.NET Core中使用Apworks快速开发数据处事》一文中的介绍,将Apworks和Apworks.Integration.AspNetCore两个Package添加到项目中。注意,版本必需大于即是0.1.138(目前是开发版本)

我们仍旧使用上面的Web API项目: 将ValuesController中的Get()方法改成如下代码: [Http



添加告成后,ASP.NET Core Web API应用措施的NuGet依赖项类似如下:

我们仍旧使用上面的Web API项目: 将ValuesController中的Get()方法改成如下代码: [Http



双击打开Startup.cs文件,在ConfigureServices要领中,插手以下代码:

public void ConfigureServices(IServiceCollection services) { services.AddMvc(); var halBuildConfiguration = new HalBuildConfiguration(new HalBuildConfigurationItem[] { new HalBuildConfigurationItem("Values.Get", context => new ResourceBuilder().WithState(null) .AddSelfLink() .WithLinkItem(context.HttpContext.Request.GetDisplayUrl()) .AddEmbedded("values") .Resource(new ResourceBuilder().WithState(context.State))) }); services.AddApworks() .WithHalSupport(halBuildConfiguration) .Configure(); }