2014-12-10 9 views
13

Ich verwende Spring Data REST, die HATEOAS unterstützt. Ich bin neu in diesem Paradigma.Bedeutung und Verwendung von "_embedded" in HATEOAS

In GET Antworten von meinem RESTful-Webdienst erhalte ich oft Ergebnisse innerhalb eines Knotens mit dem Namen _embedded. Ich frage mich: Was ist _embedded Knoten für? Ist es Teil der REST-Spezifikation? Oder Teil der HATEOAS-Spezifikation? Oder ist es spezifisch für die Frühlingsimplementierung von ihnen?

Dies ist ein Beispiel von JSON Ergebnis für 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 } 
       } 
      }, 

      ... 

     ] 
    } 
} 

Ich bemerkte, dass ich fast immer _embedded Knoten in der Antwort habe: wenn ich bitte um eine Sammlung, sondern auch dann, wenn eine Anforderung eine einzelne Ressource durch eine Suche (zum Beispiel mit GET http://localhost:8080/mywebservice/persons/search/[email protected]@.com).

Ich bekomme nicht _embedded Knoten nur, wenn die Anfrage für eine bestimmte Ressource ist, zum Beispiel, wenn Sie GET http://localhost:8080/mywebservice/features/GROUND tun.

Antwort

14

Es gibt weder eine REST- noch eine HATEOAS-Spezifikation. Beides sind nur Konzepte oder architektonische Stile, wenn Sie so wollen. _embedded ist Teil der HAL format.

Es ist beabsichtigt, (sic!) Ressourcen einzubetten, wo sonst nur ihre URIs zurückgegeben würden. Zum Beispiel GET http://localhost:8080/mywebservice/features soll nur eine Liste von URIs, wie http://localhost:8080/mywebservice/features/GROUND zurückgeben, und Sie müssten jedes einzelne Feature selbst laden, wenn Sie es brauchten. Durch die Verwendung von _embedded werden alle Feature Ressourcen in die Antwort eingebettet, sodass Sie sie nicht separat laden müssen.