- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有理由相信我了解 HATEOAS 设计的服务器端 - 在响应中返回状态 URL - 但我对如何设计客户端来接受这些感到有点困惑。
例如,我们在//somehost.com/resource/1 访问资源 - 这为我们提供了资源数据和链接。我们假设返回 POST 到//somehost.com/resource,表示一个"new"操作。现在我知道将一些数据发布到该 url 会创建一个新资源并提供响应,但是发布该数据的表单位于何处?我已经看到实现,其中//somehost.com/resource/1/new 提供了一个 POSTS 到/resource 的表单,但是该 URL 本身包含一个动词,并且似乎违反了 REST。
我认为我的困惑在于我在同一个应用程序中实现了一个 RESTful API 和一个客户端来使用它。
对于这类事情是否有某种最佳实践?
最佳答案
I've seen implementations where //somehost.com/resource/1/new provides a form which POSTS to /resource, but that URL itself contains a verb, and seems to violate REST.
这是不正确的。 包含动词的 URI 本身不违反任何 REST 约束。只有当该 URI 代表一个 Action 时,这才成为违规行为。如果您可以对 URL 执行 GET 请求并接收到一些有意义的资源(例如“创建新资源”表单),那么这完全是 REST 风格的,也是很好的做法。
我自己的 API 与您描述的完全一样:/{collection}/new
返回一个表单。 /new
只是一个假设的/new-resource-creation-form
的简写,仍然代表一个名词,只支持GET请求(不支持HEAD、OPTIONS和TRACE) .
HATEOAS 禁止的是要求用户代理知道,为了创建新资源,它必须将 /new
添加到集合的名称中。
基本上,如果您将 API 实现为 (X)HTML,并且可以 surf it in a browser并执行所有操作(非 POST 表单提交可能需要 AJAX,直到 HTML 和浏览器 catch HTTP),然后它符合 REST 的超媒体约束。
编辑 从评论中推广:
只要响应否定对先验知识的任何需求,它就符合超媒体约束。如果客户端声称理解 HTML,并且您发回包含指向外部样式表或 javascript(无论托管在何处)的链接的响应,客户端需要能够正确呈现页面,那么可以合理地说约束得到满足。客户端应该知道如何处理它声称支持的所有媒体类型。普通的人类 Web 浏览器是客户端对任何 HTTP 服务(网站)没有带外知识的完美示例。
明确地说,网站是一种 HTTP 服务。 Web 浏览器不会区别对待不同的网站。为了在亚马逊上搜索产品,您在 http://amazon.com/
加载亚马逊服务端点并点击链接或填写该响应中提供的表格。为了在 eBay 上搜索产品,您在 http://ebay.com/
加载 eBay 服务端点并执行相同的操作。
浏览器事先并不知道要搜索 eBay 你必须做这个,但是要搜索 Amazon 你必须做那个。浏览器是无知的。其他 HTTP 服务的客户端也应该是无知的。
关于RESTful HATEOAS 客户端网址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12958237/
使用很棒的 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 具有查询字符串没有意义
我是一名优秀的程序员,十分优秀!