HATEOAS中"_embedded"的含义和用法

blu*_*ish 24 rest spring json hateoas spring-hateoas

我正在使用支持HATEOAS的Spring Data REST.我是这个范例的新手.

GET我的RESTful Web服务的响应中,我经常在名为的节点内收到结果_embedded.

我想知道:什么是_embedded节点?它是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 }
               }
           },

           ...

       ]
   }
}
Run Code Online (Sandbox Code Playgroud)

我注意到我_embedded在响应中几乎总是有节点:如果我请求集合,但即使通过搜索请求单个资源(例如GET http://localhost:8080/mywebservice/persons/search/findByEmail?email=example@example@.com).

_embedded仅当请求是针对特定资源时,我才会获取节点,例如在执行时GET http://localhost:8080/mywebservice/features/GROUND.

a b*_*ver 29

既没有REST也没有HATEOAS规范.如果愿意,两者都只是概念或建筑风格._embeddedHAL格式的一部分.

它旨在嵌入(sic!)资源,否则只返回它们的URI.例如GET http://localhost:8080/mywebservice/features,应该只返回一个URI列表,如果需要,你必须自己http://localhost:8080/mywebservice/features/GROUND加载每个URI Feature.通过利用_embedded所有Feature资源嵌入到响应中,您无需单独加载它们.

  • `_embedded`由HAL规范定义.Spring Data REST基于其对应用程序存储库和域模型的了解组装了一个`Resources`对象,然后将实际的序列化委托给Spring HATEOAS,这是一个用于呈现各种形式的基于规范的超媒体的库. (2认同)