В основном 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"
}
}
}
Вы можете изменить rel репозитория, как показано в следующем примере:
@RepositoryRestResource(path = "people", rel = "people")
interface PersonRepository extends CrudRepository<Person, Long> {
@RestResource(path = "names", rel = "names")
List<Person> findByName(String name);
}
Изменение rel ofхранилище изменяет имя верхнего уровня, как показано в следующем примере:
{
"_links" : {
"people" : { // rel = "people"
"href" : "http://localhost:8080/people"
},
…
}
}
rel = "people"
изменил имя этой ссылки на people
.
В: Есть ли у васпример, показывающий, что «заказ может иметь отношение« rel »:« клиент », которое связывает заказ с его клиентом»?Учитывает ли он также отношения между объектами, такими как 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"
}
]
}
В предыдущем примере ответ, возвращаемый сервером, содержит гипермедиа ссылки на ресурсы 10 / сотрудников, которые клиент может просматривать для чтения сотрудников, принадлежащих котдел.
Он находится между представлением и уровнем данных.Ссылка, созданная с помощью rel и других атрибутов:
{
"href": "10/employees",
"rel": "employees",
"type" : "GET"
}
помогает приложению перейти в правильном направлении (хранилище, метод и т. Д.) Для получения данных (сотрудники, принадлежащие отделу)
В соответствии с вашим дизайном вы также можете создавать отношения между сущностями на уровне данных.Но это разные вещи.