问题标签 [hypermedia]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
rest - 在 RESTful API 中包含/嵌入与链接
因此,RESTful API 的一般模式是返回一个带有嵌入式链接的对象,您可以使用它来检索相关对象。但有时为了方便起见,您想一次拉回整个对象图块。
例如,假设您有一个包含客户、订单和退货的商店应用程序。您想同时显示客户 ID 12345 的个人信息、所有订单和所有退货。(可能有充分的理由不总是退回订单和退货以及客户个人信息。)
执行此操作的纯 RESTful 方式类似于:
GET /
- 返回链接模板列表,包括一个用于查询客户的模板
GET /customers/12345
(基于来自的链接模板/
)- 返回客户个人信息
- 返回链接以获取该客户的订单和退货
GET /orders?customerId=12345
(来自/customers/12345
回复)- 获取客户 12345 的订单
GET /returns?customerId=12345
(来自/customers/12345
回复)- 获取客户 12345 的退货
customers
但是,一旦您有了URI,就能够在一个查询中将所有这些都拉回来,那就太好了。这种便捷查询是否有最佳实践,您想在其中嵌入部分或全部链接而不是发出多个请求?我在想类似的事情:
但如果人们有办法做到这一点,我宁愿不只是编造一些东西。
(FWIW,我不是在开一家商店,所以我们不要争论这些是否是模型的正确对象,或者你将如何深入研究实际产品,等等。)
更新添加:看起来在HAL中这些被称为“嵌入式资源”,但在显示的示例中,似乎没有任何方法可以选择要嵌入的资源。我发现一篇博客文章提出了类似于我上面描述的内容,embed
用作查询参数:
这是一种标准或半标准的做法,还是只是某个博主编造的?
html - 使用超媒体约束 API 驱动 UI
我想使用带有超媒体约束的 REST API 来驱动我的 UI。也就是说,根据我获取的资源的“可能的下一个状态”,我想为此调整我的 UI。我对网络上的 UI 开发人员很陌生,所以我想知道这里是否有任何特殊的注意事项需要注意?
假设我有一个如下所示的资源:
上述链接方法在 HATEOAS 的上下文中是否有效?在一个完美的世界里,我想一个人应该只知道对资源进行操作的 HTTP 动词,但是如果我想让 UI 知道可以对资源做什么,我该如何以惯用的方式做到这一点?
我的意思是,同一种资源可以有不同的“下一个可能的状态”,具体取决于当前状态。UI 需要知道这一点。UI 是否应该检查资源上可用的链接,或者我该怎么做?
rest - ServiceStack 超媒体
是否有首选方法/示例来实现与服务堆栈的超媒体链接。我应该尝试遵循本文中列出的概念还是有更好的方法?
在此先感谢达伦
rest - 没有超媒体的 REST?
没有使用超媒体的 REST 仍然是 REST 吗?换句话说,真正的 RESTful 架构是否需要REST 统一接口约束的超媒体部分?
我理解它的方式,不是超媒体本身是 REST 的约束,而是“统一接口”。那么我可以有一个没有超媒体的 RESTful 统一接口吗?
javascript - AngularJS 中到 REST 资源的链接(关系)
我有一个 REST API,它返回用户对象,它的角色是通过链接到另一个对象来指定的。所以在localhost/project/api/users/27/
是 JSON 对象:
我想要做的是在控制器中获得角色。我的用户服务如下所示:
我试图添加(到那个资源代码块):
这个在 ngRepeat 中调用时会冻结浏览器。所以我尝试了
这行得通。然后我尝试了
说,那roles
是未定义的。我还尝试将transformResponse
参数添加到用户服务GET
操作,但从未调用过该函数。
第二个选项工作得很好——除了我必须对用户 ID 进行硬编码。合适的解决方案是以某种方式为我获取用户 ID(我尝试过this.id
,但没有奏效)。
完美的解决方案是从 given 创建资源href
,但由于我无法roles
在原型中访问,我不知道如何。
感谢您的任何建议。
rest - REST 超媒体:是否应该根据用户的权限过滤操作?
根据 Roy Fielding 的超媒体作为应用程序状态引擎 (HATEOAS),每个资源都应该附有可以对该资源执行的操作(或链接)列表。
如果动作包含在实体中(与使用 Json-Schema 的链接属性相反),我如何告诉用户代理特定选项对经过身份验证的用户不可用?
后端可以进行过滤,但是相同的资源 URL 可能具有不同的表示形式,具体取决于经过身份验证的用户。这似乎对 REST 不友好或对缓存不友好。
另一种选择是保留所有链接,并让用户代理在经过身份验证的用户无法使用该操作时收到 403 Forbidden。这对用户来说可能很烦人。
当这些操作可以根据经过身份验证的用户而改变时,如何通知用户代理可用的操作,同时保持对 REST 友好?
flask - 使用flask-restless实现超媒体
我已经使用 flask 和 flask-restless 扩展实现了一个 REST API。为了使导航更容易,我想实现超媒体风格的链接。我可以编写一个后处理器来手动插入链接,但感觉很笨拙。有没有更清洁的方法或者烧瓶不安的东西支持?
node.js - 在基于 Node.js、Express 和 MongoDb 的 REST Api 中使用绝对引用
我正在使用 Node.js、Express.js 和 MongoDb 创建一个 REST api。
到目前为止,一切都很好。让事情顺利进行相当容易,而且我有一个网站正在运行。但与往常一样,当你处理小细节时,它就会变得困难。
我对这个堆栈相当陌生,但我发现它相对容易使用。只是为了让你了解我的技能。
我要问的是:
假设我有一个从此 URL 访问的用户资源:
它返回:
我希望它返回
具有完整的完全限定的 url 而不仅仅是相对的。
我不想将完整的 URL 保存在数据库中。我宁愿在运行时预先添加服务器信息。不仅仅是为了自我参考,而是为了我的 API 中的每一个参考。
但是我对 Express 和 Javascript 的了解还不足以让我找出最好的方法来做到这一点。我应该让猫鼬去,还是应该编写某种映射器,我从 Express 中的路由调用。
其他人如何做到这一点?
谢谢,杰
android - 本机客户端(android、iOS)的超媒体 API?
您认为为本地客户端(android、iOS)公开超媒体 api(HATEOAS)是个好主意吗?当客户端尝试使用这样的 API 时有什么困难?
我假设 UI 将由 API 的响应驱动。
我对本地客户端以及它们如何在内部构建的经验为零。
rest - REST - 在超媒体中与大型数据集共享 URI 模板?
我正在构建一个打算成为完全超媒体驱动器的 REST 应用程序。服务的消费者将到达一个入口点,从那时起将跟随链接。但是,我为父母提供了大量的子资源列表 - 例如 orders/1 orders/2 ... orders/5000000000
为此提供有效的导航非常困难,因为客户端可能必须发出数百个请求。我在想一个URI模板是要走的路。推荐吗?它是 RESTful 的吗?如何以其他人可以理解的标准方式呈现 URI 模板?