RepositoryRestResource注解中的collectionResourceRel等可选元素中的"rel"是什么意思?
Whats is the meaning of "rel" in the optional elements such as collectionResourceRel in RepositoryRestResource annotation?
你能帮我理解"rel"提到的RepositoryRestResource注解的collectionResourceRel的可选元素的含义吗?
我已经阅读了 Java 文档 here。
下面是文档中写的内容。
collectionResourceRel The rel value to use when generating links to
the collection resource.
在HATEOAS
API,rel
"describes how the current context (source) is related to the target resource"
基本上rel
是@RestResource
注解的一个属性。意思是"relationship"
例如订单可能具有 "rel" : "customer"
关系,即 link 订单与其客户之间的关系。
来自 https://docs.spring.io/spring-data/rest/docs/current/reference/html/ :
例如,在默认配置中,如果您向 http://localhost:8080/persons/search
发出请求以查明公开了哪些查询方法,您将返回类似于以下内容的 link 列表:
{
"_links" : {
"findByName" : {
"href" : "http://localhost:8080/persons/search/findByName"
}
}
}
要更改 rel
值,请在 @RestResource
注释上使用 rel
属性,如以下示例所示:
@RepositoryRestResource(path = "people")
interface PersonRepository extends CrudRepository<Person, Long> {
@RestResource(path = "names", rel = "names")
List<Person> findByName(String name);
}
前面的示例产生以下 link 值:
{
"_links" : {
"names" : {
"href" : "http://localhost:8080/persons/search/names"
}
}
}
您可以更改存储库的 rel,如下例所示:
@RepositoryRestResource(path = "people", rel = "people")
interface PersonRepository extends CrudRepository<Person, Long> {
@RestResource(path = "names", rel = "names")
List<Person> findByName(String name);
}
更改存储库的 rel 会更改 top-level 名称,如以下示例输出所示:
{
"_links" : {
"people" : { // rel = "people"
"href" : "http://localhost:8080/people"
},
…
}
}
rel = "people"
将 link 的名称更改为 people
。
问:您是否有示例显示 "an order might have a "rel" : "customer" 关系,即 link 订单与其客户的关系。"?它是否也考虑实体之间的关系,例如 OneToMany、ManyToMany 等
不同于OneToMany、ManyToMany等实体之间的关系
关系描述了当前资源如何与目标资源相关。
这里有一个来自 https://restfulapi.net/hateoas/ 的很好的例子来理解 rel
:
下面给定的 JSON 回复可能来自 API 比如 HTTP GET
http://api.domain.com/management/departments/10
{
"departmentId": 10,
"departmentName": "Administration",
"locationId": 1700,
"managerId": 200,
"links": [
{
"href": "10/employees",
"rel": "employees",
"type" : "GET"
}
]
}
在上面的例子中,服务器返回的响应中包含超媒体link到员工资源10/employees,客户端可以遍历读取属于部门的员工。
介于表示层和数据层之间。借助rel等属性创建的link:
{
"href": "10/employees",
"rel": "employees",
"type" : "GET"
}
帮助应用程序向正确的方向(存储库、方法等)检索数据(属于部门的员工)
根据您的设计,您还可以在数据层中创建实体之间的关系。但这些是不同的东西。
你能帮我理解"rel"提到的RepositoryRestResource注解的collectionResourceRel的可选元素的含义吗? 我已经阅读了 Java 文档 here。
下面是文档中写的内容。
collectionResourceRel The rel value to use when generating links to the collection resource.
在HATEOAS
API,rel
"describes how the current context (source) is related to the target resource"
基本上rel
是@RestResource
注解的一个属性。意思是"relationship"
例如订单可能具有 "rel" : "customer"
关系,即 link 订单与其客户之间的关系。
来自 https://docs.spring.io/spring-data/rest/docs/current/reference/html/ :
例如,在默认配置中,如果您向 http://localhost:8080/persons/search
发出请求以查明公开了哪些查询方法,您将返回类似于以下内容的 link 列表:
{
"_links" : {
"findByName" : {
"href" : "http://localhost:8080/persons/search/findByName"
}
}
}
要更改 rel
值,请在 @RestResource
注释上使用 rel
属性,如以下示例所示:
@RepositoryRestResource(path = "people")
interface PersonRepository extends CrudRepository<Person, Long> {
@RestResource(path = "names", rel = "names")
List<Person> findByName(String name);
}
前面的示例产生以下 link 值:
{
"_links" : {
"names" : {
"href" : "http://localhost:8080/persons/search/names"
}
}
}
您可以更改存储库的 rel,如下例所示:
@RepositoryRestResource(path = "people", rel = "people")
interface PersonRepository extends CrudRepository<Person, Long> {
@RestResource(path = "names", rel = "names")
List<Person> findByName(String name);
}
更改存储库的 rel 会更改 top-level 名称,如以下示例输出所示:
{
"_links" : {
"people" : { // rel = "people"
"href" : "http://localhost:8080/people"
},
…
}
}
rel = "people"
将 link 的名称更改为 people
。
问:您是否有示例显示 "an order might have a "rel" : "customer" 关系,即 link 订单与其客户的关系。"?它是否也考虑实体之间的关系,例如 OneToMany、ManyToMany 等
不同于OneToMany、ManyToMany等实体之间的关系
关系描述了当前资源如何与目标资源相关。
这里有一个来自 https://restfulapi.net/hateoas/ 的很好的例子来理解 rel
:
下面给定的 JSON 回复可能来自 API 比如 HTTP GET
http://api.domain.com/management/departments/10
{
"departmentId": 10,
"departmentName": "Administration",
"locationId": 1700,
"managerId": 200,
"links": [
{
"href": "10/employees",
"rel": "employees",
"type" : "GET"
}
]
}
在上面的例子中,服务器返回的响应中包含超媒体link到员工资源10/employees,客户端可以遍历读取属于部门的员工。
介于表示层和数据层之间。借助rel等属性创建的link:
{
"href": "10/employees",
"rel": "employees",
"type" : "GET"
}
帮助应用程序向正确的方向(存储库、方法等)检索数据(属于部门的员工)
根据您的设计,您还可以在数据层中创建实体之间的关系。但这些是不同的东西。