Подтвердить что ты не робот

Значение и использование "_embedded" в HATEOAS

Я использую Spring Data REST, который поддерживает HATEOAS. Я новичок в этой парадигме.

В ответах GET моего веб-сервиса RESTful я часто получаю результаты внутри node с именем _embedded.

Мне интересно: что такое _embedded node для? Является ли он частью спецификации REST? Или часть спецификации HATEOAS? Или это специфично для их реализации Spring?

Это пример результата JSON для GET http://localhost:8080/mywebservice/features:

{
   "_links":
   {
       "search": { "href": "http://localhost:8080/mywebservice/features/search" }
   },
   "_embedded":
   {
       "features":
       [
           {
               "feature": "GROUND",
               "name": "Terreno",
               "data_type": "String",
               "_links":
               {
                   "self"  : { "href": "http://localhost:8080/mywebservice/features/GROUND" },
                   "values": { "href": "http://localhost:8080/mywebservice/features/GROUND }
               }
           },

           ...

       ]
   }
}

Я заметил, что в ответе почти всегда есть _embedded node: если я запрашиваю коллекцию, но даже если запрос одного ресурса выполняется поиском (например, с GET http://localhost:8080/mywebservice/persons/search/[email protected]@.com).

Я не получаю _embedded node, только если запрос предназначен для определенного ресурса, например, при выполнении GET http://localhost:8080/mywebservice/features/GROUND.

4b9b3361

Ответ 1

Нет ни REST, ни спецификации HATEOAS. Оба являются только концепциями или архитектурными стилями, если хотите. _embedded является частью формата HAL.

Он предназначен для встраивания (sic!) ресурсов, в противном случае будут возвращены только их URI. Например, GET http://localhost:8080/mywebservice/features должен возвращать только список URI, например http://localhost:8080/mywebservice/features/GROUND, и вам придется загружать каждый отдельный Feature самостоятельно, если вам это нужно. Используя _embedded все ресурсы Feature вставляются в ответ, поэтому вам не нужно их отдельно загружать.