能否请您帮助我理解RepositoryRestResource批注的collectionResourceRel中提到的“ rel”可选元素的含义? 我已经阅读过Java文档here。
下面是文档中写的内容。
collectionResourceRel生成指向以下链接的关联值 收集资源。
答案 0 :(得分:3)
基本上rel
是@RestResource
批注的属性。意思是“关系”
例如订单可能具有将订单链接到其客户的"rel" : "customer"
关系。
来自https://docs.spring.io/spring-data/rest/docs/current/reference/html/:
例如,在默认配置中,如果您向http://localhost:8080/persons/search
发出请求以了解公开了哪些查询方法,则会返回类似于以下内容的链接列表:
{
"_links" : {
"findByName" : {
"href" : "http://localhost:8080/persons/search/findByName"
}
}
}
要更改rel
的值,请使用rel
批注上的@RestResource
属性,如以下示例所示:
@RepositoryRestResource(path = "people")
interface PersonRepository extends CrudRepository<Person, Long> {
@RestResource(path = "names", rel = "names")
List<Person> findByName(String name);
}
前面的示例将产生以下链接值:
{
"_links" : {
"names" : {
"href" : "http://localhost:8080/persons/search/names"
}
}
}
您可以更改存储库的版本,如以下示例所示:
@RepositoryRestResource(path = "people", rel = "people")
interface PersonRepository extends CrudRepository<Person, Long> {
@RestResource(path = "names", rel = "names")
List<Person> findByName(String name);
}
更改存储库的关系将更改顶级名称,如以下示例输出所示:
{
"_links" : {
"people" : { // rel = "people"
"href" : "http://localhost:8080/people"
},
…
}
}
rel = "people"
将该链接的名称更改为people
。
问:您是否有一个示例显示“订单可能具有将订单链接到其客户的“ rel”:“ customer”关系”?是否还会考虑OneToMany,ManyToMany等实体之间的关系?
它不同于OneToMany,ManyToMany等实体之间的关系。
该关系描述了当前资源与目标资源的关联方式。
这是https://restfulapi.net/hateoas/理解rel
的一个很好的例子:
以下给出的JSON响应可能来自HTTP GET
http://api.domain.com/management/departments/10之类的API
{
"departmentId": 10,
"departmentName": "Administration",
"locationId": 1700,
"managerId": 200,
"links": [
{
"href": "10/employees",
"rel": "employees",
"type" : "GET"
}
]
}
在前面的示例中,服务器返回的响应包含指向员工资源10 /雇员的超媒体链接,客户端可以遍历该链接以读取属于该部门的雇员。
它位于表示层和数据层之间。借助rel和其他属性创建的链接:
{
"href": "10/employees",
"rel": "employees",
"type" : "GET"
}
帮助应用程序朝正确的方向(存储库,方法等)检索数据(属于部门的员工)
根据您的设计,您还可以在数据层中的实体之间创建关系。但这是不同的东西。
答案 1 :(得分:1)
在HATEOAS
API中,rel
“描述了当前上下文(源)与目标资源之间的关系”