web-dev-qa-db-ja.com

HATEOASでの「_embedded」の意味と使い方

私はHATEOASをサポートするSpring Data RESTを使用しています。私はこのパラダイムに不慣れです。

RESTful WebサービスからのGET応答で、_embeddedという名前のノード内で結果を受け取ることがよくあります。

_embeddedノードとは何ですか?REST仕様の一部ですか?またはHATEOAS仕様の一部ですか?または、Spring実装に固有ですか?それら?

これは、GET http://localhost:8080/mywebservice/featuresのJSON結果の例です。

{
   "_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ノードが含まれていることに気付きました。コレクションをリクエストした場合でも、検索で単一のリソースをリクエストした場合でも(たとえば、GET http://localhost:8080/mywebservice/persons/search/findByEmail?email=example@[email protected]を使用して)。

_embeddedを実行するときなど、リクエストが特定のリソースに対するものである場合にのみ、GET http://localhost:8080/mywebservice/features/GROUNDノードを取得しません。

25
bluish

RESTもHATEOASの仕様もありません。どちらも概念であり、アーキテクチャスタイルでもあります。_embeddedHAL形式

(sic!)リソースを埋め込むことを目的としています。それ以外の場合は、URIのみが返されます。たとえば、GET http://localhost:8080/mywebservice/featureshttp://localhost:8080/mywebservice/features/GROUNDのようなURIのリストのみを返すことが想定されており、必要に応じてすべてのFeatureを自分でロードする必要があります。 _embeddedを使用することで、すべてのFeatureリソースが応答に埋め込まれるため、個別にロードする必要がありません。

31
a better oliver