首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Spring认证指南:了解如何使用 Spring 创建超媒体驱动的 RESTful Web 服务

超媒体是 REST 的一个重要方面。它使您可以构建在很大程度上解耦客户端和服务器的服务,并让它们独立发展。为 REST 资源返回的表示不仅包含数据,还包含指向相关资源的链接。...你将建造什么 您将使用 Spring HATEOAS 构建一个超媒体驱动的 REST 服务:一个 API 库,可用于创建指向 Spring MVC 控制器的链接、构建资源表示并控制如何将它们呈现为支持的超媒体格式...该服务将接受 HTTP GET 请求 http://localhost:8080/greeting。 它将以 JSON 表示的问候进行响应,该问候富含最简单的超媒体元素,即指向资源本身的链接。...除此之外,资源的 JSON 表示将通过_links属性中的超媒体元素列表进行丰富。最基本的形式是指向资源本身的链接。该表示应类似于以下列表: { "content":"Hello, World!"...这会导致 Spring MVC 将返回HttpEntity的及其有效负载 (the Greeting) 直接呈现给响应。

4K60

2022就业季|Spring认证教你,如何使用 Spring 构建 REST 服务(五)

书接上文⬆⬆⬆在 REST API 中构建链接到目前为止,您已经使用基本链接构建了一个可进化的 API。为了发展您的 API 并更好地为您的客户服务,您需要接受超媒体作为应用程序状态引擎的概念。...向客户端提供此类数据时,一件很自然的事情是让客户端根据此有效负载决定它可以做什么。但那是错误的。当您在此流程中引入新状态时会发生什么?UI 上各种按钮的放置可能是错误的。...与其让客户端解析有效负载,不如为它们提供链接以发出有效操作的信号。将基于状态的操作与数据负载分离。换句话说,当CANCEL和COMPLETE是有效操作时,将它们动态添加到链接列表中。...客户端只需要在链接存在时向用户显示相应的按钮。这使客户端不必知道此类操作何时有效,从而降低了服务器及其客户端在状态转换逻辑上不同步的风险。...通过利用超媒体和链接协议,客户端可以构建得更坚固,并且不太可能仅仅因为数据的变化而崩溃。Spring HATEOAS 可以轻松构建您需要为客户提供服务的超媒体。

92620
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    【ASP.NET Core 基础知识】--Web API--RESTful设计原则

    超媒体应用状态引擎(HATEOAS): 考虑使用HATEOAS原则,在响应中提供相关资源的链接,以引导客户端进行进一步的状态转换。...支持负载均衡: 由于请求之间相互独立,无状态通信使得负载均衡更为容易实现,每个请求可以独立地分发到不同的服务器节点。...这提高了系统的灵活性和可扩展性,因为服务器端的变更不会影响客户端的行为,只需客户端遵循超媒体链接即可。...资源状态的自描述性(HATEOAS): 使用超媒体作为应用状态的引擎,为资源表示中添加相关链接,使客户端能够动态地发现和使用可用的功能。...预检请求(Preflight): 对于复杂请求,浏览器会先发送一个预检请求(OPTIONS)获取服务器是否允许实际请求。服务器需响应预检请求,并包含相关头部信息。

    18200

    基于场景选择微服务的API范式:REST、GraphQL、Webhooks和gRPC

    超媒体意味着在REST API中,客户端和服务器是松耦合的,这使客户端和服务器在资源操作方面获得了极大的自由。也因此,快速迭代、服务器进化、资源弹性等元素才得以实现。...在这一成熟度模型中的第4级,使用超媒体作为应用状态引擎(HATEOAS);多个URI,多个HTTP方法。在资源的表达中包含了链接信息。客户端可以根据链接来发现可以执行的动作。...事实上,由于HATEOAS的存在,REST可以通过在返回的资源中引入链接的概念,就可以完成类似GraphQL一样的批量查询,包括客户端智能的根据服务端资源的反馈来确定下一步应该如何动作。...当服务器发生了变化时,如修改了资源的 URI,客户端也需要进行相应的修改。而使用 HATEOAS 的 REST 服务中,客户端可以通过服务器提供的资源的表达来智能地发现可以执行的操作。...Webhook,简单来说,就是在事件发生时触发的HTTP POST请求。 这又是一种对客户机-服务器模式的逆转,在传统方法中,客户端从服务器请求数据,然后服务器提供给客户端数据(客户端是在拉数据)。

    2.6K30

    We Do Sleep At Night, We Do REST Right

    通过表述来操作资源 当客户端对一个资源发起一个请求时,服务器会以一种有效的方式提供一个采集了资源信息的文档作为回应。这就是表述——一种以机器可读的方式对资源当前状态的说明。...请求之间的交互是无状态的。 对应于 REST 约束中的“无状态”约束,服务器可以独立处理每个请求,而无须对该客户端先前所有请求的处理进行记忆。 使用标准的方法和媒体类型来表达语义和交换信息。...“客户端依赖的是超文本的状态迁移语义,而不应该对于是否存在某个URI或URI的某种特殊构造方式作出假设。一切都有可能变化,只有超媒体的状态迁移语义能够长期保持稳定。”...改变应用状态是客户端的职责。 客户端仅能够通过发送请求和处理响应来改变应用状态。 客户端可以通过已经收到的表述中的超文本知道接下来可以操作的请求动作(如 HTML 中的超链接)。...有效的参考文档 理解本真的REST架构风格 理解本质的 REST REST APIs must be hypertext-driven HATEOAS作为领域特定协议描述的引擎 Richardson Maturity

    94810

    【API架构】REST API 设计的原则和最佳实践

    超媒体作为应用程序状态引擎 (HATEOAS):客户端通过正文内容、查询字符串参数、请求标头和请求的 URI(资源名称)传递状态。服务通过正文内容、响应代码和响应头向客户端提供状态。...如果您不确定更改的后果,最好谨慎行事并考虑版本控制。在决定新版本是否合适或对现有表示的修改是否充分和可接受时,需要考虑几个因素。...当链接在响应中返回时,API 变得更具自我描述性。对于支持分页的响应中返回的集合,“first”、“last”、“next”和“prev”链接至少是有益的。...安全: - 授权/认证:对服务的授权与对任何应用程序的授权没有什么不同。问这个问题,“这个主体对给定资源是否有请求的权限?”...接受“已知”好的输入并拒绝错误的输入,防止 SQL 和 NoSQL 注入,将消息大小限制为字段的确切长度,服务应仅显示一般错误消息等等。 - 限速:是一种限制网络流量的策略。

    1.4K10

    5.Web的需求 & 推导REST

    对于创作者而言,超媒体的创作语言也必须是简单的,能够使用现有的编辑工具来进行创建,无论是否链接到网络,都可以使用此超媒体格式来保存创作的内容。...这一约束可以改善可见性(监视系统不必为了确定一个请求的全部性质而去查看请求之外的其他请求);改善可靠性(减轻了从局部故障中恢复的任务量);改善可伸缩性(服务端不必在多个请求直接保存状态,从而允许服务器迅速释放资源...在分布式超媒体的特性中,当一个用户选择了一个链接后,该链接所指向的信息需要从其存储地移动到其使用地。...应用的下一个控制状态位于第一个请求的响应的表述之中,从一个表述迁移到下一个表述,因此这样的一系列表述可以构造出一个资源的有限状态机,即超媒体作为应用程序的状态引擎(HATEOAS)。...HATEOAS:超媒体作为应用程序状态的引擎,体现在HTML中的具体例子是a,form,link,img,input等这些超媒体控件构成的HTML表单,可以由这个表单(作为资源的表述)操作资源,而且a元素提供了当前表述中所允许的后续操作集合

    799100

    【转】使用 Spring HATEOAS 开发 REST 服务原文

    在不同的客户端请求之间,服务器并不保存客户端相关的上下文状态信息。任何客户端发出的每个请求都包含了服务器处理该请求所需的全部信息。 可缓存。客户端可以缓存服务器返回的响应结果。...客户端通过服务器提供的超媒体内容中动态提供的动作来进行状态转换。这也是本文所要介绍的内容。 在了解 REST 的这些约束之后,就可以对“表达性状态转换”的含义有更加清晰的了解。...基本配置 满足 HATEOAS 约束的 REST 服务最大的特点在于服务器提供给客户端的表达中包含了动态的链接信息,客户端通过这些链接来发现可以触发状态转换的动作。...“/{id}”这样的形式 超媒体控制与 HAL 在添加了链接之后,服务器端提供的表达可以帮助客户端更好的发现服务器端所支持的动作。...在启用了超媒体支持之后,服务器端输出的表达格式会遵循 HAL 规范。另外,启用超媒体支持会默认启用“@EnableEntityLinks”。

    1.1K10

    使用 Spring HATEOAS 开发 REST 服务

    在不同的客户端请求之间,服务器并不保存客户端相关的上下文状态信息。任何客户端发出的每个请求都包含了服务器处理该请求所需的全部信息。 可缓存。客户端可以缓存服务器返回的响应结果。...客户端通过服务器提供的超媒体内容中动态提供的动作来进行状态转换。这也是本文所要介绍的内容。 在了解 REST 的这些约束之后,就可以对“表达性状态转换”的含义有更加清晰的了解。...基本配置 满足 HATEOAS 约束的 REST 服务最大的特点在于服务器提供给客户端的表达中包含了动态的链接信息,客户端通过这些链接来发现可以触发状态转换的动作。...超媒体控制与 HAL 在添加了链接之后,服务器端提供的表达可以帮助客户端更好的发现服务器端所支持的动作。...在启用了超媒体支持之后,服务器端输出的表达格式会遵循 HAL 规范。另外,启用超媒体支持会默认启用“@EnableEntityLinks”。

    1.3K20

    使用 ASP.NET Web API 构建超媒体 Web API

    超媒体(通常称为应用程序状态的引擎 (HATEOAS))是具象状态传输 (REST) 的主要限制之一。有一种观念认为超媒体项目(如链接或表单)可用于说明客户端如何与一组 HTTP 服务交互。...应用程序状态工作流也应位于服务器端,它确定客户端接下来可以做什么。假定资源中的一个操作仅对指定状态可用,该逻辑是否应驻留在任意可能的 API 客户端?肯定不行。服务器应始终控制可以对资源执行什么操作。...例如,如果取消采购订单 (PO),就不应允许客户端应用程序提交该 PO,这意味着在发送到客户端的响应中应无法使用提交该 PO 的链接或表单。 超媒体应运而生 链接始终是 REST 体系结构的重要组件。...例如,如果要使用 XHTML 公开目录中的产品列表,资源负载可能类似于图 1 中所示的负载。...服务器还可以在表单中包含其他信息,例如,包含一个伪造标记以避免跨站点请求伪造 (CSRF) 攻击或对预先为服务器填充的数据进行签名。

    2.8K50

    通过案例读懂 RESTful 架构风格

    比如下图,客户端表示能接受json(首选),text(次选)以及任意格式(再次选);服务器端返回json内容给客户端: ?...HATEOAS HATEOAS(The Hypermedia As The Engine Of Application Statue),中文意思是“将超媒体作为应用状态的引擎”,这是REST的最高目标(...HATEOAS包括两个概念: 1、应用状态由应用(系统)中的各资源状态组成,资源状态的变化导致应用状态的变化。 2、通过在资源表述中添加状态迁移的超链接引导客户端改变资源状态。...2、基于WEB中间件进行扩展:缓存代理提高缓存扩展,反向代理提供负载均衡和内外网协议转化(HTTPS和HTTP之间)。 3、请求的无状态:由于服务器没有会话上下文信息,提高系统的可伸缩性。...6、资源状态变化促成应用状态迁移(HATEOAS),可使开发者以资源为中心建模,这种设计相对简单。 7、资源表述中链接广告了应用的状态流,但并不强迫客户端进行处理,有利于客户端平滑升级。

    98950

    2022就业季|Spring认证教你,如何使用 Spring 构建 REST 服务(三)

    事实上,到目前为止,我们构建的更好地描述为RPC(远程过程调用)。那是因为没有办法知道如何与这个服务器交互。...— 罗伊菲尔丁https://roy.gbiv.com/untangled/2008/rest-apis-must-be-hypertext-driven在我们的表示中不包括超媒体的副作用是客户端必须硬编码...,然后以可接受的格式呈现它以供客户使用。...只要保持链接结构,客户端仍然可以找到事物并与之交互。简化链接创建在前面的代码中,您是否注意到单个员工链接创建中的重复?为员工提供单个链接以及创建到聚合根的“员工”链接的代码显示了两次。...在这种情况下:将超媒体添加到您的服务中,而无需对事物进行硬编码。在这个阶段,您已经创建了一个实际生成超媒体驱动内容的 Spring MVC REST 控制器!

    97830

    分布式系统核心:REST风格的架构,REST成熟度模型及REST API管理

    HATEOAS是Hypertext AsThe Engine Of Application State的缩写,是指在资源的表达中包含了链接信息,客户端可以根据链接来发现可以执行的动作。...对于不使用HATEOAS的REST服务,客户端和服务器的实现之间是紧密耦合的。客户端需要根据服务器提供的相关文档来了解所暴露的资源和对应的操作。...当服务器发生变化(如修改了资源的URI)时,客户端也需要进行相应的修改。而在使用HATEOAS的REST服务中,客户端可以通过服务器提供的资源的表达来智能地发现可以执行的操作。...比如,我们事先就可以知道去哪个地址发送预约请求,因为响应中的超媒体控制直接在响应体中告诉了我们该如何做。 预约的POST请求与第2级中类似。...同样地,它也让服务器端的团队可以通过向响应中添加新的链接来增加功能。比如,如果客户端开发人员发现了一个之前未知的链接,那他们就会知道这个链接是服务器端提供的新的功能。

    91020

    使用ASP.NET Core 3.x 构建 RESTful API - 2. 什么是RESTful API

    换句话说,需要通过使用元数据或者其它方式,让REST的请求中包含的数据必须带有“自我描述”性的信息,以便让对方知道如何处理该请求。...超媒体作为应用程序状态的引擎(HATEOAS):REST架构风格中,客户端是通过超媒体与服务器端动态提供的一个“应用网络”来进行交互的。...举个例子,本文第二段中提到用户通过点击网页中的链接来进行跳转的时候,浏览器的状态就变化了。这些链接就是超文本,而超媒体就是超文本的泛化。针对API来说,它就是程序状态的引擎。...可缓存:每个响应信息必须明确的指出它是否可以被缓存。缓存响应数据可以减少客户端感知的响应时间,提高整体的可用性和可靠性,并控制整个Web服务器的负载。...这个GET请求的响应除了包含数据之外,还包含链接(超媒体),这些链接可以驱动应用程序的状态。从软件开发的角度讲,就是引入了可发现性和自包含文档。

    65810

    用ASP.NET Core 2.1 建立规范的 REST API -- HATEOAS

    Roy Fielding的一句名言: "如果在部署的时候客户端把它们的控件都嵌入到了设计中, 那么它们就无法获得可进化性, 控件必须可以实时的被发现. 这就是超媒体能做到的." ...HTTP协议还是很支持HATEOAS的: 如果你仔细想一下, 这就是我们平时浏览网页的方式. 浏览网站的时候, 我们并不关心网页里面的超链接地址是否变化了, 只要知道超链接是干什么就可以....如果服务器决定改变超链接的地址, 客户端程序(浏览器)并不会因为这个改变而发生故障, 这就浏览器使用超媒体响应来告诉我们下一步该怎么做. 那么怎么展示这些link呢? ...或者说他们是否对资源进行了描述(是否是元数据)?其它的链接也存在这个问题。如果是元数据,那么就应该放在Header,如果是资源的一部分,就可以放在响应的body里。...这里还有另外一个问题,超媒体允许程序控件、链接等在被需要的时候提供,针对某个动作的链接,API消费者并不知道应该在请求里放什么内容。

    86840

    单个资源

    Roy Fielding的一句名言: "如果在部署的时候客户端把它们的控件都嵌入到了设计中, 那么它们就无法获得可进化性, 控件必须可以实时的被发现. 这就是超媒体能做到的." ...HTTP协议还是很支持HATEOAS的: 如果你仔细想一下, 这就是我们平时浏览网页的方式. 浏览网站的时候, 我们并不关心网页里面的超链接地址是否变化了, 只要知道超链接是干什么就可以....如果服务器决定改变超链接的地址, 客户端程序(浏览器)并不会因为这个改变而发生故障, 这就浏览器使用超媒体响应来告诉我们下一步该怎么做. 那么怎么展示这些link呢? ...而请求application/vnd.mycompany.hateoas+json的时候,需要返回带有链接的资源表述。...这里还有另外一个问题,超媒体允许程序控件、链接等在被需要的时候提供,针对某个动作的链接,API消费者并不知道应该在请求里放什么内容。

    49710

    SpringBoot HATEOAS用法简介

    Level2:资源使用正确的URI + HTTP方法,比如更新用户就用put方式,查询用get方式 Level3:使用HATEOAS(作为应用程序状态引擎的超媒体),在资源的表达中包含了链接信息,客户端可以在链接信息中发现可以执行的操作...HATEOAS代表“超媒体是应用程序状态的引擎” 从前言我们已经可以清楚知道,使用HATEOAS约束是REST风格中成熟度最高的,也是官方推荐的一种方式,没使用HATEOAS的项目,服务端和客户端是耦合的...,客户端只能通过相关文档来知道服务端做了什么修改,使用HATEOAS约束的REST服务,服务端修改接口信息后,客户端可以通过服务器提供的资源的表达来智能地发现可以执行的操作,客户端不需要做啥修改,因为资源信息是会动态改变的...在Spring的官网,已经有提供这个项目的相关文档,链接:https://spring.io/projects/spring-hateoas SpringBoot HATEOAS SpringBoot...中也有集成HATEOAS,本博客介绍一下如何使用 工具准备: JDK8.0 Maven 3.0+构建工具 Eclipse或者IntelliJ IDEA git&gitlab 在pom.xml加上hateoas

    91510

    我们应该重新定义REST吗?

    可以引入专业的中间服务器来处理响应缓存,从而让这一跨域问题与终端服务器上的业务逻辑分离开。 此外,REST 风格鼓励服务器向客户端发出指示,告知后者是否可以在本地缓存资源。...例如,在服务端数据库中持久化的一个数据实体将以和原始格式不同的格式编码在客户端 - 服务器消息中。 自描述消息:请求和响应消息必须包含对其解码所需的所有信息。...作为应用程序状态引擎的超媒体(HATEOAS):服务器的响应媒体类型不仅应完全自描述其编码的数据,而且还应嵌入指令以使客户端对该数据及其相关数据执行进一步的操作。这种元数据类别称为控制数据。...为此,RESTful 服务器以超媒体(hypermedia)格式编码其响应消息——超媒体格式是一种包含超媒体控件(如链接和表单)的媒体类型。客户从给定的可用超媒体控件列表中选择下一步操作。...负载必须类似于 HTML:一种超媒体格式,定义客户端应如何处理编码的表征,并带有客户端执行进一步操作所需的所有超媒体控件。

    66110

    使用静态基类方案让 ASP.NET Core 实现遵循 HATEOAS Restful Web API

    HATEOAS的优点有: 具有可进化性并且能自我描述 超媒体(Hypermedia, 例如超链接)驱动如何消费和使用API, 它告诉客户端如何使用API, 如何与API交互, 例如: 如何删除资源, 更新资源...Roy Fielding的一句名言: "如果在部署的时候客户端把它们的控件都嵌入到了设计中, 那么它们就无法获得可进化性, 控件必须可以实时的被发现. 这就是超媒体能做到的." ????...所以说HTTP协议还是很支持HATEOAS的: 如果你仔细想一下, 这就是我们平时浏览网页的方式. 浏览网站的时候, 我们并不关心网页里面的超链接地址是否变化了, 只要知道超链接是干什么就可以....我们可以点击超链接进行跳转, 也可以提交表单, 这就是超媒体驱动应用程序(浏览器)状态的例子....如果服务器决定改变超链接的地址, 客户端程序(浏览器)并不会因为这个改变而发生故障, 这就浏览器使用超媒体响应来告诉我们下一步该怎么做. 那么怎么展示这些link呢?

    1.1K50
    领券