Не могли бы вы помочь мне понять значение упомянутого необязательного элемента «rel» в аннотации RepositoryRestResource collectionResourceRel? Я просмотрел документы Java здесь.
Ниже то, что написано в документации.
collectionResourceRel The rel value to use when generating links to the collection resource.
В API HATEOASrel «описывает, как текущий контекст (источник) связан с целевым ресурсом».
По сути, 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 репозитория изменяет имя верхнего уровня, как показано в следующем примере:
{
"_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 GEThttp://api.domain.com/management/departments/10.
{
"departmentId": 10,
"departmentName": "Administration",
"locationId": 1700,
"managerId": 200,
"links": [
{
"href": "10/employees",
"rel": "employees",
"type" : "GET"
}
]
}
В предыдущем примере ответ, возвращенный сервером, содержит гипермедиа-ссылки на ресурсы сотрудников 10/employees, по которым клиент может пройти, чтобы прочитать информацию о сотрудниках, принадлежащих отделу.
Это между представлением и уровнем данных. Ссылка, созданная с помощью rel и других атрибутов:
{
"href": "10/employees",
"rel": "employees",
"type" : "GET"
}
помогает приложению перейти в правильном направлении (репозиторий, метод и т. д.) для извлечения данных (сотрудников, принадлежащих отделу)
В соответствии с вашим дизайном вы также можете создавать отношения между объектами на уровне данных. Но это разные вещи.
У вас есть пример, показывающий, что «заказ может иметь отношение «rel»: «клиент», которое связывает заказ с его клиентом»? Учитывает ли он также взаимосвязь между сущностями, такими как OneToMany, ManyToMany и т. д. И если это так, как это будет себя вести?