Что означает значение «rel» в необязательных элементах, таких как collectionResourceRel, в аннотации RepositoryRestResource? - PullRequest
0 голосов
/ 30 мая 2019

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

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

collectionResourceRel Значение rel, используемое при создании ссылок на коллекциюресурс.

Ответы [ 2 ]

3 голосов
/ 30 мая 2019

В основном 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"
}

помогает приложению перейти в правильном направлении (хранилище, метод и т. Д.) Для получения данных (сотрудники, принадлежащие отделу)

В соответствии с вашим дизайном вы также можете создавать отношения между сущностями на уровне данных.Но это разные вещи.

1 голос
/ 30 мая 2019

В HATEOAS API rel "описывает, как текущий контекст (источник) связан с целевым ресурсом"

https://restfulapi.net/hateoas/

...