- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试将 HATEOAS 应用于现有应用程序,但在建模将由 API 响应驱动的表单输入时遇到问题。
该应用程序允许搜索和预订两个地方之间的连接。第一个端点允许搜索连接 GET /connections?from={lat,lon}&to={lat,lon}&departure={dateTime}
并返回以下有效负载(响应正文)。
[
{
"id": "aaa",
"carrier": "Fast Bus",
"price": 3.20,
"departure": "2019-04-05T12:30"
},
{
"id": "bbb",
"carrier": "Airport Bus",
"price": 4.60,
"departure": "2019-04-05T13:30"
},
{
"id": "ccc",
"carrier": "Slow bus",
"price": 1.60,
"departure": "2019-04-05T11:30"
}
]
POST /orders
请求:
{
"connectionId": "aaa",
"email": "passenger@example.org"
}
{
"connectionId": "bbb",
"email": "passenger@example.org",
"flightNumber": "EA1234"
}
{
"connectionId": "ccc",
"phoneNumber": "+44 111 222 333"
}
"_templates"
但模板本身没有 URI。假定在自链接上运行,在我的情况下是 /connections... 而不是 /orders 。 "template"
,因此假定集合的所有元素都具有相同的字段,而在我的应用程序中并非如此。 "actions"
适合我的用例,但该项目似乎已死,而且没有许多主要语言的支持库。 最佳答案
在您的示例中, Connections
似乎是资源。 Orders
是否真的是资源尚不完全清楚。我猜可能是的,但是要拥有 Order
,您需要 Client
和 Connection
。因此,要创建 Order
您需要公开一个集合,可能来自 Client
或 Connection
,可能两者都有。
我认为断开连接是因为“现在我们已经有了可用连接列表,客户端可以选择一个并创建一个 Order
”。这是完全有效的,但它是远程过程调用 (RPC) 思维,而不是 REST。客观上两者都不比另一个好,除非在一组特定的项目要求的上下文中,通常它们不应该混合在一起。
使用 RPC 思维,定义了创建订单方法(例如使用 OpenAPI),并且任何客户端都应该使用一些带外信息来确定所需的正确形式(即通过阅读 OpenAPI 规范)。
使用 REST/HATEOAS 思维方式,正确的方法是从 Orders
公开 Connection
集合。集合中的每个 Connection
都有一个 self
链接和一个 Order
集合(链接或对象,由应用需求定义)。 Order
的每一项都有一个 self
链接,这是指定可供性的地方。 Order
是一种已知类型(即使使用 REST/HATEOAS,客户端和服务至少必须就共享词汇表达成一致),客户端大概知道如何定义。该词汇表可以使用任何有效的机制来定义——json-ld、XSD 等。
HATEOAS 要求结果包含客户端更新状态所需的一切。不能有带外信息(共享词汇除外)。因此,要解决您的问题,您要么需要从 Order
公开 Connection
的集合,要么需要允许通过发布到 Order
来创建 Connection
。如果后者看起来有点像黑客,那可能是。
例如,在 HAL-Forms 中,我会执行以下操作:
{
"connections": [{
"id": "aaa",
"carrier": "Fast Bus",
"price": 3.20,
"departure": "2019-04-05T12:30"
"_links": {
"self": { ... }, // link to this connection
"orders": {} // link to collection of orders for this connection
}
},
, ...],
"_links": {
"self": { ... } // link to the collection
},
"_templates": { ... } // post/put/patch/delete connection
}
orders
的链接,并从那里获得
_templates
集合,其中包含管理
Order
资源的说明。
Order
POST 可能需要连接标识符和客户端信息。
HAL-Forms Spec 定义了一个正则表达式属性,可用于指定要为任何特定表单元素提供的数据类型。由于您已经通过特定连接导航到达订单,您将能够在您的
_templates
中为该订单准确指定哪些字段是必需的。例如
/orders?connectionType=aaa
将返回一组与
/orders?connectionType=bbb
不同的必需属性,但两者都使用
self
的相同
/orders?connectionType={type}
链接,您将在 POST/PUT/PATCH 上对其进行验证。
_links
和
_templates
。见
this GitHub issue 。
关于json-ld - HATEOAS 和由 API 驱动的表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55315913/
使用很棒的 HATEOAS 链接功能我正在尝试输出模板化的 url 以突出显示用户可用的过滤器参数 示例 Controller 方法 @RequestMapping(value = "/persons
我正在使用 spring-hateoas:0.18.0.RELEASE 与 spring-boot:1.2.5.RELEASE 为了调用我的 Web 服务并通过 HAL 链接,我正在使用 特拉弗森客户
我使用 Spring HATEOAS 在我的应用程序中创建 REST HATEOAS API。到目前为止它运行良好,但当涉及到嵌套资源时我陷入困境。将此类层次结构映射到 REST HATEOAS 资源
我想弄清楚如何使用 templated: true 建立 HAL 链接.如果我使用 BasicLinkBuilder.linkToCurrentMapping().slash("api/public/
我们使用 HATEOAS 取得了很好的效果,但是我们一直在关注性能,并且从链接的构建中得到了非常糟糕的结果,即看起来像这样的代码 resource.add(linkTo(methodOn(SomeCo
我有一个带有请求参数的方法,我正在尝试从另一个资源链接到这个方法。我希望链接是这样的: "rel":{ "href":".../resources{?param}", "templated":
我想链接到具有以下签名的方法: public SomeResponse getSomeObjects(@RequestParam(value = "foo", defaultValue = "bar"
我正在构建一个REST API。我有一个由bean组成的域模型,无法扩展ResourceSupport。使用Spring-HATEOAS将它们公开为资源的最佳方法是什么? 如果不可能,在bean生成的
我有这个问题已经在我的脑海里盘旋了一段时间。让我们假设我们已经在不同的层上构建了我们的项目,后端和前端。所以,从前端,我们想要一个客户,它来自 hal+json格式: GET /customers/1
我有一个关于 Spring HATEOAS 的表示模型处理器的问题。我们正在尝试在将模型序列化给客户端之前对其进行处理。我们的用例是丰富 imageUrl领域UserModel对象在运行时,因为我们必
想象一下,我有一个完全实现的REST API,它也提供了HATEOAS。 假设我浏览了根目录,除了自我链接之外,还返回了其他两个链接(例如,一个用于/users和一个用于/orders)。据我所知,H
据说在定义良好的 RESTful 系统中,客户端只需要知道根 URI 或几个众所周知的 URI,客户端将通过这些初始 URI 发现所有其他链接。我确实理解这种方法的好处(解耦客户端),但对我来说不利的
遵循 HATEOAS 原则,每个状态都应该是超链接的,对改变资源状态的链接进行建模的最佳方法是什么? 让我们以订单为例: { id : 12, state: 'pending', .
我试图对 HATEOAS 有一个清晰、简洁的理解,而且我绝不是 WRT REST 专家。 (我想我明白了,感谢这个 http://www.looah.com/source/view/2284 )。 有
我有理由相信我了解 HATEOAS 设计的服务器端 - 在响应中返回状态 URL - 但我对如何设计客户端来接受这些感到有点困惑。 例如,我们在//somehost.com/resource/1 访问
我正在阅读有关 spring-hateoas 的内容,看起来 1.0 有很多变化。我想切换到 1.0 但是我的 pom.xml 正在引入 0.25.2。 我试过用 org
我正在努力了解 HATEOAS。 让我们通过一个例子来工作。客户端将浏览器加载到 getemails.com。为简单起见,让我们假设对 getemails.com 的调用访问了服务器并返回一个电子邮件
我有 Spring Data Rest 和 Hateoas 作为我的支持。它在代理后面。 后端网址:backend.com 代理网址:proxy.com 当我查询代理网址时,例如http://prox
我可以有一些 HATEOAS 的示例/典型用例吗? ?我同意它可以是一个非常强大的概念,提供了很大的灵活性,但我不确定如何正确地从 HATEOAS 中受益。如果您可以分享您的经验/用例,那就太好了。
HATEOAS(作为应用程序状态引擎的超媒体)建议是否暗示查询字符串不是 RESTful? 编辑:下面建议查询字符串可能与状态没有太大关系,因此这个问题令人费解。我建议 URI 具有查询字符串没有意义
我是一名优秀的程序员,十分优秀!