繁体   English   中英

RESTful(HATEOAS)是否适合专业客户?

[英]Is RESTful (HATEOAS ) practical for specialised clients?

是否有概念证明客户端(即Web应用程序)代表使用RESTful原理实现的现实应用程序? 我只能找到API浏览器,但是现实应用程序(即社交网络或电子商务网站)的开发却大不相同。

我已经阅读了Roy的工作和相关论文,但是我仍然无法在客户开发过程中充分利用Restful。 我总是最终将状态存储在客户端上,或者专门处理媒体/类型渲染。 例如,相同的资源(即配置文件资源)根据上下文(即在首页,产品页面或专用配置文件页面上)进行不同的呈现,因此告别媒体类型->按需呈现代码。

我真的看不到HATEOAS相对于具有良好定义/自动生成的IDL (即json超模式)的API的任何优势(以我的工作方式)。

我目前的结论是,只有通用客户端(例如google)才能从HATEOS中受益,而不能从真实/专业应用程序中受益。 如果您的API是启用HATEOS的,而不是描述IDL ,则专用客户端开发似乎没有任何好处。

虽然HATEOAS确实为您提供了URI灵活性,并且可以人工发现流,但真正的好处是将其用作资源状态的编码。

如果您有一个与资源关联的状态机,则将有一些状态允许某些状态转换,而不允许其他状态转换。

通过针对资源URI的操作向REST客户端提供了实现可能的状态转换的机会-使用HATEAOS超媒体,您可以通过已知的rel链接名称定义转换,然后根据允许的转换来包含或排除rel链接按当前状态。

这意味着在服务器端保留确定哪些过渡有效的逻辑-客户端可以根据是否存在关联的rel链接来选择隐藏或禁用UI选项。

包括或排除特定rel链接的另一个原因可能与提供给当前用户的访问控制权限有关。 如果不允许当前用户执行转换,只需排除它们即可。

如果您不是根据资源状态和/或授权用户的状态动态地包含或排除rel链接,那么您对优点和缺点的分析就很不错了,因为您并不是出于真正原因而使用它们。 毕竟,REST中的S代表状态 :)

HATEOS是一种设计理念/样式/风格,这在很大程度上取决于品味或在成熟的代码生成与手写API之间进行权衡。

HATEOS的主要与众不同之处是对API中其他资源的引用构造方式(即,通过完整的URL)。 如果API响应仅包含一个ID(而不是资源的完整URL),则可以避免许多文档负担。

但是,当您将HATEOS与JSON而不是XML结合使用时,会丢失其他一些上下文(例如,我是否应将此端点PUTGETPOST ?),因此,如果要生成一个客户或人类文档。

以我的经验,与假设客户端正在使用生成的代码并且永远不会直接接触该API的WSDL或IDL相比,使用简单的REST客户端(例如cURL)使人更容易使用HATEOS API。

权衡

那么,为什么选择HATEOS vs WSDL或其他生成的选项呢?

API的基本假设(并非总是如此)是,它们将具有多种类型的客户端/使用者,可能以不同的语言实现。 这意味着,随着时间的流逝,编写和更新客户端比编写服务要多。

如果您或您的企业打算自己维护API客户端,则需要在为所有客户端(WSDL,SWIG等)生成代码或雇用特定语言的开发人员维护一个API之间进行成本权衡。

生成的API客户端很可能不会遵循任何给定语言的惯用风格,并且代码通常很难看。 如果这些事情对您来说很重要,那么您可能会希望有人编写客户端代码。 如果您对此不关心,则可以停止阅读有关HATEOS的信息,而改用WSDL或类似方法。

但是,如果您确实想为人类使用API​​进行优化,则HATEOS会成功,因为它可以将上下文信息传达给人类,这使得编写没有大量API文档的客户端变得更加容易。

有关类似HATEOS的API的示例,请查看GitHub API 使用REST客户端进行浏览非常容易,一旦您学会了如何进行身份验证,就可以通过遵循引用的数据URL来找到所需的大部分内容。 您仍将需要参考文档以获取特定的详细信息和高级用例(例如POSTing数据),但是为GitHub编写一个简单的客户端而无需拉入GitHub客户端库或端到端阅读文档非常容易。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM