当前位置: 首页 > 后端技术 > Java

SpringBoot:SpringBoot的HATEOAS基础

时间:2023-04-01 21:13:01 Java

介绍SpringBoot提供了一种方便的方式来使用HATEOAS。在上一篇文章中,我们也谈到了如何在SpringBoot中使用HATEOAS。本文将围绕这些内容展开,详细讲解SpringBoot提供的基本方法。LinksHATEOAS的一个很重要的特性就是在resources资源中包含了超媒体,而超媒体最简单的表示就是链接。SpringHATEOAS为我们简化了封装Links的功能。让我们看一个HTML中链接标签的例子:你可以看到一个链接有两个comparisons重要的属性,一个是href代表link的链接,一个是当前文档和rel代表的被链接文档的关系。让我们看看Link中的关键方法:publicstaticLinkof(Stringhref){returnnewLink(href);}publicstaticLinkof(Stringhref,Stringrelation){returnnewLink(href,relation);}publicstaticLinkof(Stringhref,LinkRelationrelation){returnnewLink(href,relation);您可以传入href和relation来构建一个Link对象。看下面的例子:Linklink=Link.of("/something");link=Link.of("/something","my-rel");其中LinkRelation是关联关系的封装接口,注意是一个接口,我们可以使用IanaLinkRelations中的具体实现来赋值,如下:IanaLinkRelations.PREV;LinkRelationREL_NEXT=IanaLinkRelations.NEXT;LinkASTRelationREL_L=IanaLinkRelations.LAST;URI模板在上面的示例中,链接是指定的和静态的。有时我们希望链接可以根据参数进行转换,那么这样的链接就是动态链接,我们可以通过定义一个URI模板来实现。所以Link也可以通过UriTemplate来构造:publicstaticLinkof(UriTemplatetemplate,Stringrelation){returnnewLink(template,relation);}publicstaticLinkof(UriTemplatetemplate,LinkRelationrelation){returnnewLink(template,relation));}UriTemplate是对URI模板的封装,看一个用法示例:Linklink=Link.of("/{segment}/something{?parameter}");Mapvalues=newHashMap<>();values.put("段","路径");values.put("参数",42);assertThat(link.expand(values).getHref()).isEqualTo("/path/something?参数=42");上面的例子,通过string构造一个链接,然后调用expand传入参数对应的map,构造出真正的href值。除了直接使用string,还可以传入UriTemplate:UriTemplatetemplate=UriTemplate.of("/{segment}/something").with(newTemplateVariable("parameter",VariableType.REQUEST_PARAM);assertThat(template.toString()).isEqualTo("/{segment}/something{?parameter}");Linkrelations链接关系是指链接中的ref属性,表示当前文档和被链接文档的关系,Spring中有HATEOASLinkRelation类,IANA(InternetAssignedNumbersAuthority)预定义了一些关系,可以通过IanaLinkRelations类获取,如下:Linklink=Link.of("/some-resource"),IanaLinkRelations.NEXT);assertThat(link.getRel()).isEqualTo(LinkRelation.of("next"));assertThat(IanaLinkRelation.isIanaRel(link.getRel())).isTrue();Representationmodels我们需要访问的是一个一个的资源,然后需要给每一个资源添加链接,SpringHATEOAS为我们提供了一个简单的类RepresentationModel。它包含Links和一些方便的方法来帮助我们创建链接资源。最简单的使用方法是创建RepresentationModel的子类:类).getBook(id)).withSelfRel());注意,在这种情况下,我们的Accept类型应该是application/hal+json。对于简单的类型,我们可以直接使用EntityModel进行封装:Personperson=newPerson("Dave","Matthews");EntityModelmodel=EntityModel.of(person);对于集合,可以使用CollectionModel:Collectionpeople=Collections.singleton(newPerson("Dave","Matthews"));CollectionModelmodel=CollectionModel.of(people);总结中讲解的Link、URI模板、Link关系和RepresentationModel是SpringHATEOAS的基础,掌握了它们就基本掌握了SpringHATEOAS。更多内容请参考http://www.flydean.com/00043-springboot-hateoas-fundamentals/最通俗的解读,最深刻的干货,最简洁的教程,很多你不知道的小技巧都是等你发现!欢迎关注我的公众号:《程序那些事儿》,懂技术,更懂你!