Part 1: Hateoas-Waiter-Service
HAL
- HyperText Application Language
- 基于json的扩展,是一种简单的格式
- 为API的资源提供简单一致的链接
HAL模型
- 链接资源
- 内嵌资源,靠self的link代替id,标识coffee对象
- 状态
spring data rest
- spring-boot-starter-data-rest
- @Repository,spring自动会把它转化为一个RESTful接口,一个资源
- @RepositoryRestResource
- Resource
- PagedResource
- 根据超媒体的目录进行访问和搜索,search调用的是repository
实例
-
dependency
spring-boot-starter-data-jpa
spring-boot-starter-data-rest
hibernate对joda-money的支持 usertype.core
jackson对hibernate类型的支持 jackson-datatype-hibernate5
jackson对xml的支持 jackson-dataformat-xml -
repository extends JpaRepository<>,可以对应于超媒体的search

-
主程序注册hibernate5支持,对jacksonBuilder进行定制,输出的json是有缩进的,时区设为Asia/Shanghai
-
localhost:8080相当于目录,根据超媒体目录进行访问和搜索

- spring-data-rest帮我们实现了Controller,当访问/coffee,出现了embedded中的内嵌资源,显示所有coffee信息,通过self的href来代替id,标识coffee的
- 分页信息查询,第0页,每页三个资源,按id的降序排序
/coffee?page=0&size=3&sort=id,desc - /coffee/search对应repository的方法
/coffee/search/findByName{?name}
/coffee/search/findByNameInOrderById{?list} - 调用/coffee/search/findByName?name=mocha
- 调用/coffee/search/findByNameInOrderById?list=mocha,espresso
Part 2: Hateos-Customer-Service
编程的方式,用客户端访问HATEOAS服务
- 配置Jackson Json——HAL支持,在main中注册Jackson2HalModule这个bean
- 操作超链接——找到需要的link,restTemplate-httpClient-requestFactory/webClient访问超链接
实战
- 从ROOT_URI获得coffee_link,通过coffee_link获得所有的coffee信息,再添加一杯咖啡

- 从ROOT_URI获取coffeeOrders这个link,对这个订单link添加咖啡,最后查询修改过后的订单

- getLink()

- readCoffeeMenu()

- addCoffee()

- addOrder()

- queryOrders()

测试
创建订单:顾客lilei初始化创建订单,购买的是3号coffee,添加的是link

Get /coffeeOrders/1/items得到内嵌的coffee信息
向1号订单添加新的2号coffee
Post /coffeeOrders/1/items
