Что означает «rel» в необязательных элементах, таких как collectionResourceRel в аннотации RepositoryRestResource?

Не могли бы вы помочь мне понять значение упомянутого необязательного элемента «rel» в аннотации RepositoryRestResource collectionResourceRel? Я просмотрел документы Java здесь.

Ниже то, что написано в документации.

collectionResourceRel The rel value to use when generating links to the collection resource.

2
0
718
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

В API HATEOASrel «описывает, как текущий контекст (источник) связан с целевым ресурсом».

https://restfulapi.net/hateoas/

Ответ принят как подходящий

По сути, 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 и т. д. И если это так, как это будет себя вести?

Sam 30.05.2019 17:21

Другие вопросы по теме