我正在使用ASP NET Core编写Web API,并希望从单页应用程序(例如使用Angular,Vue,React),本地桌面应用程序和移动应用程序中使用它。我偶然发现了一个叫做“HATEOAS”的概念,并且了解到我正在构建的API实际上并不是真正的RESTful,我错误地将其命名为RESTful(https://devblast.com/b/calling-your-web-api-restful-youre-doing-it-wrong)。似乎大多数人都错误地使用了这个术语(Roy T. Fielding - REST理念背后的人对此感到烦恼:http://roy.gbiv.com/untangled/2008/rest-apis-must-be-hypertext-driven)
从我所学的来看,HATEOAS背后的想法是将您的应用程序视为网站,这意味着它公开资源链接(例如HTML中的
当我查看现有的C#“REST”客户端时,例如: 他们的名称中都带有“REST”,但它们没有深入探讨HATEOAS的概念。那么它们为什么被命名为“Rest客户端”呢?
如何在客户端使用HATEOAS?令人惊讶的是,互联网上关于此方面的资料并不多,大部分内容都是关于如何在服务器上实现HATEOAS,但是很少有关于它在客户端应该如何工作的资料。通常,它应该提供导航逻辑。
除此之外,还有许多API客户端生成器(解析OpenAPI规范),例如AutoRest(出乎意料地没有关于超链接和HATEOAS的内容),或者NSwag。
我花了几个小时在谷歌上搜索学习HATEOAS,但大多数人只是谈论它而没有描述如何使用它(几乎没有支持它的客户端库)。
有许多相关标准,如HAL、Ion等,但几乎没有一个REST客户端库实现这些标准。还有json:api。所有这些标准都非常相似。
因此,我的问题是:
对我来说,似乎在客户端和服务器上都实现它需要大量的样板代码,那么为什么没有很多库直接支持它(使用其中一个标准)呢?看起来json:api有许多实现。http://jsonapi.org/implementations/#client-libraries-net
从我所学的来看,HATEOAS背后的想法是将您的应用程序视为网站,这意味着它公开资源链接(例如HTML中的
<a href.../>
),因此您不必在客户端代码中硬编码链接/终点,并且如果更改了某个终点,您的客户端代码不会中断。另一件事是它使您的API可发现,无需任何文档,即API自描述(如元API)。当我查看现有的C#“REST”客户端时,例如: 他们的名称中都带有“REST”,但它们没有深入探讨HATEOAS的概念。那么它们为什么被命名为“Rest客户端”呢?
如何在客户端使用HATEOAS?令人惊讶的是,互联网上关于此方面的资料并不多,大部分内容都是关于如何在服务器上实现HATEOAS,但是很少有关于它在客户端应该如何工作的资料。通常,它应该提供导航逻辑。
除此之外,还有许多API客户端生成器(解析OpenAPI规范),例如AutoRest(出乎意料地没有关于超链接和HATEOAS的内容),或者NSwag。
我花了几个小时在谷歌上搜索学习HATEOAS,但大多数人只是谈论它而没有描述如何使用它(几乎没有支持它的客户端库)。
有许多相关标准,如HAL、Ion等,但几乎没有一个REST客户端库实现这些标准。还有json:api。所有这些标准都非常相似。
因此,我的问题是:
HATEOAS是否适用于SPA、移动和桌面客户端等应用程序?
HATEOAS的真正用例是什么,如果我可以硬编码我的端点,或者根据OpenAPI(Swagger)规范生成新的API客户端,因为它发生了变化?
甚至值得去管它吗?
对我来说,似乎在客户端和服务器上都实现它需要大量的样板代码,那么为什么没有很多库直接支持它(使用其中一个标准)呢?看起来json:api有许多实现。http://jsonapi.org/implementations/#client-libraries-net