2014-12-10 15 views
13

Utilizzo Spring Data REST, che supporta HATEOAS. Sono nuovo di questo paradigma.Significato e utilizzo di "_embedded" in HATEOAS

Nelle risposte GET dal servizio web RESTful spesso ricevo risultati all'interno di un nodo denominato _embedded.

Mi chiedo: per cosa è il nodo _embedded? Fa parte delle specifiche REST? O parte delle specifiche HATEOAS? O è specifico per l'implementazione di Spring di loro?

Questo è un esempio di risultato JSON per 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 } 
       } 
      }, 

      ... 

     ] 
    } 
} 

ho notato che ho quasi sempre avuto _embedded nodo nella risposta: se chiedo una collezione, ma anche se una richiesta di una singola risorsa una ricerca (ad esempio con GET http://localhost:8080/mywebservice/persons/search/[email protected]@.com).

Non riesco a ottenere il nodo _embedded solo se la richiesta riguarda una risorsa specifica, ad esempio quando si esegue GET http://localhost:8080/mywebservice/features/GROUND.

risposta

14

Non esiste né una specifica REST né una specifica HATEOAS. Entrambi sono solo concetti, o stili architettonici, se vuoi. _embedded fa parte di HAL format.

Si intende incorporare (sic!) Risorse in cui altrimenti verranno restituiti solo gli URI. Ad esempio, GET http://localhost:8080/mywebservice/features restituisce solo un elenco di URI, come http://localhost:8080/mywebservice/features/GROUND, e dovresti caricare ogni singolo Feature se necessario. Utilizzando _embedded tutte le risorse Feature vengono incorporate nella risposta in modo da non doverle caricare separatamente.