问题标签 [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.

0 投票
1 回答
59 浏览

rest - REST - 客户端可以缓存资源链接吗?

假设您有一个完全超媒体驱动的 API。消费者必须通过跟随超媒体导航三个资源,直到他们能够获得他们想要的资源。客户端是否有任何原因无法临时缓存这些步骤并直接访问他们想要的资源?

我知道 REST 的目标是解耦客户端和服务器,但是如果您有 5 个 Web 请求在幕后进行,那么等待所有这些发生的用户体验可能会很差。

我能想到的最坏情况是缓存的 URL 被更改。因此客户端将再次从入口点开始并缓存这些步骤。

0 投票
1 回答
53 浏览

mime-types - 时间序列图表有媒体类型吗?

我在IANA上寻找一种已经定义的媒体类型来表示时间序列图表,但我没有找到。

有谁知道媒体类型,如果不知道,您是否只使用Collection+JSON甚至HAL等通用集合媒体类型?

0 投票
0 回答
132 浏览

java - 多对多关系(集)

设计多对多关系的最佳方法是什么hateoas?我在两个类之间有双向关系,用Set.

我的问题是将一个资源绑定到另一个资源的POST/方法。PUT(建立关系)

例子:

第一种方式:资源 uris 可能是

A为了在id 1 和id 2之间添加关系,B我会做一个POSTon: /A/1/B/2or /B/2/A/1

第二种方式:

A要在id 1 和Bid 2POST之间添加关系,并/A/1/B以“B-object”作为内容:

哪个是更好的方法,或者有更好的解决方案?感谢帮助 :)

0 投票
1 回答
10377 浏览

inheritance - 如何在 Golang 中为多种类型编写函数?

我正在尝试编写一个可以在 Golang 中接受不同自定义类型的辅助函数,但我无法弄清楚如何完全按照我想要的方式进行操作。情况如下(顺便说一句,我正在构建一个返回实现 HAL 协议的 JSON 对象的 API。这只是意味着资源和关系作为链接返回,而不仅仅是 ID')。

我的应用程序中有许多模型,例如学生、校长、学校等……每个模型都有许多字段,有些相同,有些不同。理想情况下,我想要一个可以遍历结构字段并更改结构中另一个字段的函数。最大的挑战是这些结构可以是学生、校长、学校等类型......

楷模:

然后,我想要一个基本上可以采用任何这些结构的函数,遍历字段(使用reflect),并对每个字段做一些事情。

我尝试了一个函数,interface{}但问题是你必须键入断言参数才能访问任何字段。即使你有了它,你仍然必须为每种类型/模型编写单独的函数。:

最终,我试图找到一种方法来编写一个函数,该函数接受一个有点随意的结构并对可能存在或不存在的字段执行操作。

0 投票
3 回答
1404 浏览

rest - 您如何表示 RESTful 资源的“瘦”和“胖”版本?

您将如何对可以具有两种不同表示的资源进行建模。例如,一种表示可能是“瘦的”,其大部分相关资源可通过链接访问。另一种表示可能是“胖”的,其中嵌入了大多数相关资源。这个想法是,一些客户不介意必须多次调用来浏览链接的资源,但其他客户希望一次获得所有数据。

考虑一个与导演、演员等相关联的电影资源。也许它的精简版本只有电影标题,并且要获取导演的数据、演员列表等,必须通过嵌入它们的链接。也许它的胖版本包含嵌套在里面的所有电影,包括导演的数据,各种演员的数据等。

应该如何建模?

我看到几个选项:

  1. 这两种表示实际上是两种不同的资源,需要不同的 URI
  2. 这两种表示实际上是相同的资源,您可以通过自定义媒体类型在两种表示之间进行选择,例如application/vnd.movie.thin+jsonapplication/vnd.movie.fat+json
  3. 这两种表示实际上是相同的资源,应该使用查询参数(例如/movies/1?view=thin)来选择不同的表示。
  4. 还有什么...

您认为这种 API 的正确方法是什么?

0 投票
0 回答
177 浏览

javascript - 让 Ember.ArrayController 呈现一组承诺

Ember 控制器具有承诺意识,因为模型可以是承诺。对于 ArrayController 你可以对数组有一个 Promise,但是如果你有一个包含 Promise 的数组呢?

请参阅此 JSFiddle 以获取示例http://jsfiddle.net/7QSZ6/

为什么我需要这个?我们有一个带分页的超媒体 (HAL) API,所以如果我请求 500 个项目的集合,我会返回前 50 个项目,以及指向下一个 50 个项目的链接,以及总数。

我想创建一个基于 Ember.Array 的类似数组的对象,它可以延迟加载连续的页面。但是由于加载是异步的,objectAt 必须返回一个在元素到达时解决的承诺。

大致是伪代码

更新:

一种方法是使用 PromiseProxyMixin “手动”完成,例如http://jsfiddle.net/Au7LC/1/

0 投票
3 回答
2405 浏览

api - 实现 HATEOAS 的 REST API 的权限

我试图找出在单页应用程序中处理权限的正确方法,该应用程序直接与几个实现 HATEOAS 的 RESTful API 对话。

举个例子:

“作为我的应用程序的用户,我可以查看、启动和暂停作业,但不能停止它们。”

底层的 REST API 有以下资源:

/jobs/{id} 接受 GET 和 PUT。GET 返回一个作业模型,PUT 接受一个作业模型作为请求主体,格式如下:

接受的工作状态可以是:休眠 | 运行 | 暂停 | 停了下来。

要求说在 UI 上我必须有按钮:

开始、暂停、停止

...并且仅根据登录用户的权限显示。

从 API 的角度来看,一切都是服务器上的底层逻辑,确保用户在发出请求时无法将状态更新为 STOPPED 状态(可能返回 401)。

通知应用程序/ UI 用户权限的最佳方式是什么,以便它可以隐藏用户无权操作的任何按钮?

API 是否应该提供权限列表,可能类似于:

或者 API 是否应该更改,以便权限反映在 HATEOS 链接中,可能类似于:

还是应该以完全不同的方式完成?

更新

我发现以下文章提出了答案: https ://softwareengineering.stackexchange.com/questions/215975/how-to-handle-fine-grained-field-based-acl-permissions-in-a-restful-服务

0 投票
1 回答
911 浏览

rest - Get a collection of sub-resources at once with JSON-LD and Hydra

In the RESTful Web API book, the authors advise to expose a profile and use a content type which acknowledges link relations. JSON-LD extended by Hydra seem to match these requirements, and I want to use them in the design of my new API.

I am currently stuck with a performance issue. Let say that I have an online bike store, and I want to retrieve information about the wheels of a given bike.

With the Hydra specification, it seems to me that I need to send 2 requests to get the details about the wheels. The first request is toward the bike itself:

The response contains a Hydra::Link to the collection of wheels:

Now I can send a second request to the wheels resource to get the details:

Is it valid to send a single request and get a response such as the one below?

0 投票
2 回答
432 浏览

rest - Json-LD 中的主从表示

预先准备:对不起,如果我误解了超媒体或 Restfull 概念:这是一项正在进行的工作......)

我试图弄清楚超媒体和 hydra ( http://www.markus-lanthaler.com/hydra ),并且在设计我的 api 之前有一些关于向客户端返回信息的问题。

假设我有一个位于 www.myshop.com 的网上商店

到根的 HTTP GET 可以返回(例如)表示为链接的资源列表(在 json-ld 文档中):

关于 hydra 的第一个问题,我如何在此处添加操作?似乎客户端需要在加载应用程序之前加载另一个文档。我的意思是潜在的行动不在从 www.myshop.com/api 检索到的文档中或者我错过了什么?


然后更进一步,我已经声明products是一个 hydra:Link 以便客户端可以使用 HTTP GET 跟随该链接(与其交互)并检索产品列表。这将是一个这样的列表:

在这里,客户收到一个产品列表(这可能是一个分页集合)。但是如果客户想要向用户展示它,假设一个带有[产品 ID、价格、名称]的表格(不是所有产品的属性)

第二个问题:如果没有客户端向服务器发送每个产品的请求,但仍然提供获取产品详细信息的链接,我怎么能做到这一点,(或者甚至这里有四个链接:一个用于获取详细信息,一个用于删除,一个用于与朋友分享,最后一个用于将其添加到篮子)?

事实上,如果文档本身没有链接,我很难弄清楚 hydra 是如何发挥作用的?我认为 Hal 使用这种方法在文档本身中添加链接(如果我是对的),我试图找出 hydra 是如何做这个链接的......

问候

0 投票
2 回答
592 浏览

rest - 用于创建和更新资源的超媒体友好 REST 模式

我正在尝试设计一个充分利用超媒体的 RESTful 服务。
最好,用户代理应该只知道根 URI,以便能够探索服务的所有功能——也就是说,我希望它处于成熟度模型的第 3 级。

现在,用户代理应该能够创建一些资源并在以后编辑它们。在创建/编辑时,用户代理需要访问其他一些资源/枚举。

资源:



鉴于前面提到的要求,我提出了以下模式:

有一个fooRoot资源:

foo资源中包含指向fooWriter的链接:

资源:

fooWriter如下所示:


总而言之,任何可以创建和编辑的资源都可能具有关联的编写器资源
通过 GET-ting writer,用户代理可以非常方便地创建/编辑资源。
嵌入在编写器中的有效负载被 POST 到它的目的地,瞧 :)

此外,还应该有一个容器,其中包含指向资源及其新资源编写器的链接(参见上面示例中的fooRoot)。



问题是...

...上面描述的模式有一个众所周知的名字吗?
...有没有更好的方法来解决创建/编辑问题,在创建/编辑时需要相邻资源并且第三级成熟度仍然“保持”?

一些参考资料: