问题标签 [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 回答
65 浏览

xml - 有没有办法注释 Java 类模型来生成 JSON+超媒体链接?

有很多关于如何使用JAXB 和 HATEOAS包含超媒体链接的示例,但我找不到任何超媒体 + JSON 的示例。我喜欢 JAXB,因为只需使用注释,您就可以将 XML 映射到 Object。包括 HATEOAS,这几乎是我需要的,除了它只在 XML 中(当然是因为 JAXB)。根据2.0 用户指南,问题是 JAXB 提供程序不支持 JSON 。

因此,使用上面的示例,我正在寻找的不是这个 XML+Hypermedia 输出

而是获取此 JSON+超媒体输出

*是的,两个示例都是资源的表示,但对象/模型的示例应该相似,因此我不包括它们。

是不是因为这个 JSON+超媒体规范还没有标准化,所以今天没有框架可以做到这一点?我 发现 最多 的 是一个 提案, 和 一个 "待续 ... "

我知道我可以使用 MessageBodyWriter 创建自己的 JAX-RS 提供程序,但这仅有助于将“应用程序/json”请求编组到对象。我仍然需要一种方法来获取超媒体链接。

我正在寻找这个的原因是因为我当前的要求是返回包含超媒体链接的 JSON 数据。

有没有人有完整的工作示例?我找不到任何东西,我隐约记得看到一篇文章说我需要“自己动手”。不可取,但如果这就是它所需要的......

0 投票
2 回答
1714 浏览

spring - 如何向客户端显示资源 ID?

org.springframework.hateoas.ResourceSupport已经包含一个getId方法。

如果我的资源(或更好的域对象)包含一个需要呈现给客户端的整数 id,我无法添加一个简单的id并添加getId/ setId(因为ResourceSupport已经有它)。

我应该返回一些东西<myResourceObjectName>_id还是让客户解释提供的 id 链接/URL 更好ResourceSupport

0 投票
1 回答
495 浏览

web-services - REST:表单、链接和超媒体格式

我目前正在借助 Richardson 的优秀书籍“RESTful Web Services”来学习 REST 实践。我想设计一个遵循 Richardson 成熟度模型的 REST API,尤其是称为 HATEOAS 的第 3 级,这似乎是最复杂的处理。

首先,我不太了解链接和表单之间的不同含义?(关于超媒体,我知道 HTML 解释..)。仅仅是“链接用于 GET 方法”和“表单用于 GET/POST/PUT 方法”的问题吗?

EDIT1:我明白了:表单可以是用于构建 URI 并使用 GET 方法的应用程序表单,也可以是用于 PUT/POST 方法的资源表单(或多或少是我问的)。如果我错了,请纠正我,客户端应该使用 OPTIONS 方法仔细使用链接,以了解如何使用它。

因为我想符合 HATEOAS,所以我需要选择一种超媒体格式……而且我知道它存在多种格式,例如 Siren、HAL、Collection+JSON、JSON-LD、Hydra 等……但是好吧, 不知道用哪一个?

在 Richardson 的书中,他使用了 xHTML,它有一个主要优点:使用浏览器测试您的 API。但是 xHTML 似乎很重。我可能更喜欢更轻量级的东西,但最近的超媒体格式(Siren、HAL、...)可能太新且太复杂,无法在没有可编程客户端的情况下进行测试。

0 投票
2 回答
3830 浏览

java - 如何手动注册 Jackson2HalModule 以进行独立单元测试?

我试过了:

但仍然有错误:

0 投票
1 回答
14123 浏览

rest - 可选择在 Spring Data Rest 中禁用 HATEOAS 格式

所以假设我有一个现有的应用程序,它有两个端点 /people 和 /pants。调用 GET /people 返回:

如果我要使用 Spring Data Rest 并调用 GET /person 我会收到类似的信息:

假设我有一堆我不想更改的现有客户端 - 有没有办法在某些情况下禁用响应的超媒体部分(比如 Accept="application/json")但启用它们其他(接受=“hal+json”)?

谢谢!

更新

好的 - 所以让我懊恼的是,我想要做的事情不受支持。我理解为什么 Spring Data Rest 强烈倾向于超媒体……但我不认为提供基于标头“禁用”超媒体的能力,从而提供更多选项是一件坏事。

除此之外,我有点不确定如何通过我自己的控制器实际实现这一点。如果我创建一个控制器并尝试/people使用 Accept="application/hal+json"` 覆盖 RequestMapping,produces = "application/json" I am able to get the "raw" json back with Accept="application/json" but if I pass 我会得到一个 406 并显示“找不到可接受的表示”。看起来 SDR 资源映射没有与内容类型映射......有什么建议吗?

0 投票
2 回答
59 浏览

ruby-on-rails - 理解 REST 中的抽象术语

不知道是不是在这里问这些关于 REST 的基本问题......

我越是尝试理解 REST 并想要实现它,我就越感到困惑。我想可能是因为当人们来教你什么是 REST 时我看到的那些抽象词。例如,

来自维基百科的 REST,

代表性状态转移(REST)是万维网架构的抽象;更准确地说,REST 是一种架构风格,由一组协调的架构约束组成,这些约束应用于分布式超媒体系统中的组件、连接器和数据元素。

从这个链接

  1. 资源的表示应该是统一的

  2. 使用超媒体(而不是 URL 方案或资源名称映射)来表示关系

  3. 使用 API 的单个条目,从那里获得超链接(超链接?为什么不使用超媒体??)

  4. 在您的陈述中包含“自我”链接

  5. REST 不仅仅意味着将 ActiveRecord 模型作为 JSON 输出(那么你应该输出什么??

那么,下面这些抽象的术语是什么意思呢?

  1. 陈述,
  2. 资源,
  3. URL方案,
  4. 超媒体(它与超文本超链接有什么区别???),
  5. 资源名称映射——到,
  6. ActiveRecord 模型

你能用一个具体的例子来解释它们吗?

0 投票
1 回答
1075 浏览

c# - 按名称获取路线

我正在开发一个带有超媒体的 asp.net web api。现在我正在创建一个链接创建器,它创建一个指向控制器公开的资源的链接。它应该支持属性路由,我已经通过反射解决了这个问题,而且还支持在 Owin.AppBuilder 中指定的映射路由:

我可以为此使用UrlHelper该类,但这取决于当前请求,并且我正在创建的链接可能指向另一个控制器,因此与当前请求没有关系。所以我需要的是为名为DefaultApi. 有什么办法吗?

0 投票
2 回答
589 浏览

rest - 如何在客户端的 Rest 中处理每个动词的权限?

假设我们在这样的 URL 上有一个资源:foo.com/api/bar 假设用户可能被允许获取该资源,但不允许发布到该资源。

我可以通过为每个动词指定不同的权限来轻松解决这个问题。但是,如果允许执行 POST,客户端应该如何事先知道呢?

假设我们在页面上有一个“保存”按钮,如果用户没有进行 POST 的权限,则不应启用该按钮。

我知道 HATEOAS/超媒体约束,并且我可以将不同操作的链接列表与资源一起传递。但是 AFAIK,它不携带有关使用哪些动词的信息,只有用于不同操作的 URL。是否存在包含动词的其他变体?

如果您不想用各种元数据使资源混乱,还有其他方法吗?

0 投票
4 回答
1590 浏览

rest - 使用 HATEOAS 时寻找宁静的资源?

在阅读 HATEOAS/超媒体约束时,我经常看到的一件事是资源应该具有某种 self/href。这样做的理由是客户端不需要知道如何为特定资源构建 URL,例如更新资源。

例如

我喜欢这个主意。

但是这个概念如何与获取数据相适应呢?假设我需要获取具有特定订单 ID 的订单,客户将如何处理?在这种情况下,我仍然需要知道如何构造资源的 URL,对吧?

客户应该如何知道在哪里以及如何寻找资源?它必须以某种方式了解 API URL?

0 投票
8 回答
79528 浏览

http - 编排微服务

编排微服务的标准模式是什么?

如果一个微服务只知道自己的领域,但是有一个数据流需要多个服务以某种方式交互,那该怎么做呢?

假设我们有这样的事情:

  • 发票
  • 运输

为了便于讨论,假设一旦订单发货,就应该创建发票。

在某个地方,有人按下了一个按钮GUI,“我完成了,让我们开始吧!” 在经典的单体服务架构中,我会说要么有一个ESB处理这个,要么发货服务知道发票服务并调用它。

但是在这个勇敢的微服务新世界中,人们如何处理这个问题?

我确实知道这可以被认为是高度基于意见的。但它有一个具体的方面,因为微服务不应该做上述事情。所以必须有一个“根据定义它应该做什么”,这不是基于意见的。

射击。