# Hal_WebApi_Demo **Repository Path**: zanpen2000/Hal_WebApi_Demo ## Basic Information - **Project Name**: Hal_WebApi_Demo - **Description**: HAL的WebApi应用Demo - **Primary Language**: C# - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2017-03-09 - **Last Updated**: 2021-06-20 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README 使用 **超文本应用程序语言** 来避免客户端和服务端之间产生耦合。 确切的说,这个超文本应用程序语言实际上是一个**原则**,它的概念是:有一块内容,该内容包含了指向其他内容的链接, 而这些内容的格式可以不同(如文本、图像、声音等)。这个概念你应该很熟悉,因为你可以在任何一个网页上看到超媒体控制形式的链接,当你点击链接时可以看到相关的内容。其背后的想法是,客户端应该与服务端通过那些指向其他资源的链接进行交互,而这些交互有可能造成状态转移。它不需要知道Customer在服务端的URI,相反客户端根据链接导航到它想要的东西。*([英] 纽曼(Sam Newman). 微服务设计 (图灵程序设计丛书) (Kindle 位置 1126-1130). 人民邮电出版社. Kindle 版本. )* 看如下例子 { "Id": 1, "Account": "test_account", "Password": "123456", "CreateDate": "2017-03-09T13:41:28.605208+08:00", "IsValid": true, "EmployeeId": 0, "_links": { "self": { "href": "/accounts/1" }, "employee": { "href": "/employees/0" } } } 我们可以从这段Json代码中得到: 1. 账号信息 2. 账号绑定的雇员的链接 .Net中实现了这个原则的工具典型的有 [WebApi.Hal](https://github.com/JakeGinnivan/WebApi.Hal),本Demo就是WebApi.Hal的应用例子。 客户端不需要再“死记硬背”服务端的CRUD地址,只需要通过唯一的资源接口拿到资源,就能获取到该资源的相关信息(在上例中,拿到了账号绑定的雇员的链接),一方面,摆脱了贫血的CRUD接口;另一方面,很好的隐藏了底层细节。 更多有关HAL的信息,请参考: **[HAL规范](http://nodrest.github.io/%E6%96%87%E6%A1%A3/2013/09/18/hal_specification/)** **使用说明:** 设置 accept 为 application/hal+json, 可以用postman或fiddler进行测试。