我在这里阅读了很多关于 SO 的讨论,观看了Jon Moore 的演示文稿(顺便说一句,其中解释了很多)并阅读了 Roy Fielding 在 HATEOAS 上的博客文章,但在客户端设计方面我仍然感到有点茫然。
API 问题
现在,我只是返回带有表单/锚点和定义列表的 xhtml 来表示资源。以下片段详细说明了我如何布置表单/锚点/列表。
# anchors
<li class='docs_url/#resourcename'>
<a rel='self' href='resource location'></a>
</li>
# forms
<form action='action_url' method='whatever_method' class='???'></form>
# lists
<dl class='docs_url/#resourcename'>
<dt>property</dt>
<dd>value</dd>
</dl>
我的问题主要是针对表格的。在 Jon 的演讲中,他记录了诸如 (add_location_form) 等表单类型以及它们所需的输入。我没有很多资源,但我正在考虑抽象表单类型(添加、删除、更新等),并且只是在文档中注意(添加、更新)您必须发送目标资源的有效表示并删除,您必须发送标识符。
问题 1:使用 HATEOAS 的概念,我们真的不应该让客户端“发现”表单(通过对它们进行分类添加、删除、更新等)并发送回我们提供给它们的所有数据吗?我在这里的真正问题(不是要讨论)是这是否遵循良好的做法?
客户问题
在 HATEOAS 之后,我们对资源的操作是可发现的,这将如何影响客户端代码(api 的消费者)及其 ui。遵循这些原则,UI 应该只显示可用的操作,这听起来很棒,但它是如何实现的?
我目前的方法是将响应解析为 xml 并使用 xpath 来查找在客户端开发时已知的操作(记录的表单类,即添加、删除、更新)并显示 ui 控件(如果它们可用)。
问题2:我的发现方式错了吗?还是就客户而言,这太神奇了(知道表单类)?这不是假设客户端知道每个资源可以使用哪些操作(这可能很好,因为它是创建客户端的某种原因,对吗?)并且应该记录操作(表单类)到资源的映射,或者只是记录表单类并允许客户(和客户开发人员)研究和发现它们?
我知道我无处不在,但任何洞察力都非常感谢。我将标记为很好地回答了这两个问题中的任何一个的回复。谢谢!