- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
一个直截了当的问题:如果我正在构建一个无状态客户端,它会在请求之间“更改页面”,我该如何正确使用超媒体 API?
当然,一个关键点是客户端不应该构造 URL。例如,如果我们要获取某种集合(比如说水果),每个集合条目都会有一个 URL 以链接到 API 中的单个水果资源。太好了。
[ { "name": "Apple", "url": ".../fruits/15" } ]
但是在我的客户中,在呈现水果列表后,我希望将该列表链接到另一个包含水果详细信息的前端页面。这样的详细信息页面当然应该可以添加书签等。我意识到,从哲学上讲,前端 URL 的精确结构并不重要 - 但它对下面的问题具有实际意义。
<a href="?">Apple</a>
那么问题是,在加载水果详情页面时,没有当前上下文的客户端如何决定要获取的 API URL?
/my/frontend/stuff/fruits/{?}
现在怎么办?
最初想到的解决方案是在集合响应中有一个“项目”URL 模板,并使用其中的命名参数来构造页面 URL。然后,详细信息页面将查询 API 以恢复相同的“项目”URL 并植入传递给它的参数。这看起来并不理想,但它确实实现了所需的解耦。
提前致谢。
最佳答案
网络浏览器是许多用户最熟悉的无状态客户端。您所要求的称为 URI 模板,并受各种超媒体格式的支持。例如,在 HTML 中:
<form action="/api/fruits" method="GET">
<input type="number" name="id" value="1" min="1">
<button type="submit">Get Fruit</button>
<form>
当然会在提交时生成对 URI /api/fruits?id=1
的 GET 请求。
其他超媒体格式 such as HAL允许在 URI 中的任何位置进行模板化,并且比 HTML 更适合 Web 应用程序。您需要研究您首选的超媒体表示格式支持的模板机制,或者切换到支持您需要的格式。
当然,由于模板设计不佳,在 HTML 中,我们必须列出每个需要的 URI 并对长列表进行分页:
<a href="/api/fruits/1/">Apple</a>
<a href="/api/fruits/2/">Banana</a>
<a href="/api/fruits/3/">Citrus</a>
...
<a href="/api/fruits/?page=2" rel="next">Page 2</a>
老实说,如果用户要直接输入 ID,您可能也应该允许 HTML 和查询字符串参数。当第三方客户端开发人员针对您的 API 进行构建时,它会有所帮助,如果您需要与最终用户进行调试,它的可用性也会有所帮助。只需将他们指向一个 URL 并询问“如果你去这里有用吗?”
关于REST 超媒体 API - 从无状态客户端导航,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17445175/
在C#中,我可以通过base关键字访问基类,在java中,我可以通过super关键字访问它。在delphi中如何做到这一点?假设我有以下代码: type TForm3 = class(TF
在这件事上我已经把头撞到墙上好几次了。所以我希望在正确的方向上得到一点帮助。 我有一张 table ,上面有订单,一张 table 上有火车,一张 table 上有航类,一张 table 上有巴士。每
在 Python 中,假设我有以下代码: class SuperClass(object): def __init__(self, x): self.x = x
我希望这个 subview 扩展到它的父 View 之外,但是父 View 的边框正在切入 subview 。有没有办法防止这种情况? class TheView : UIView { let
我有一个标准的高斯函数,看起来像这样: def gauss_fnc(x, amp, cen, sigma): return amp * np.exp(-(x - cen) ** 2 / (2
例如,我有下一个类,带有有界类型参数: public class ItemContainer { void addItems(List items); } 在另一个带有参数的类中使用: pub
如何将此设置转换为命令? 结果如下: // Manual Compression (see the image above) Compressed Size: 12,647,451 bytes //
请建议在应用继承时如何使用@Wither/@With。 我有一个抽象类Parent和具体的Child。 Child 应该是不可变的。将 @Wither 放在两者上会给我两个错误: 构造函数 Child
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎不是关于 a specific programming problem, a softwar
我正在尝试向服务器(虚拟托管)发出 HTTP2 请求,该服务器根据主机 header 值 (SNI) 提供 SSL 证书。 # conn = hyper.HTTP20Connection('h
我有一个应用程序,必须将大约 1300 万行、大约 10 个平均长度的字符串插入到嵌入式 HSQLDB 中。我一直在调整一些东西(批量大小、单线程/多线程、缓存/非缓存表、MVCC 事务、log_si
我想定义一个函数f(x, t::Type)根据 isa(x, t) 是否执行不同的行为.假设我想调用b1(x)如果是,b2(x)除此以外。 我知道我可以像这样在运行时进行动态检查: function
我正在使用 Hyper-V WMI Provider在 Hyper-V 中导入虚拟机,特别是使用 ImportVirtualSystemEx Msvm_VirtualSystemManagementS
这几个星期以来一直困扰着我,我没有结束对它的研究,因为我目前重载并且它让我落后于第一年的 CS (opengl) 大学类(class),这首先让我研究了这个:如何只用一个 for 循环绘制立方体的所有
我正在我的计算机(操作系统:Windows 8)上开发一个 WP8 应用程序。我需要安装一个 VM 才能拥有 linux。同时我需要使用我的 Windows Phone 模拟器。 我下载了 VMWar
我是一名优秀的程序员,十分优秀!