【问题标题】:Meaning and usage of "_embedded" in HATEOASHATEOAS中“_embedded”的含义和用法
【发布时间】:2015-02-08 22:05:57
【问题描述】:

我正在使用支持 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@example@.com)。

只有当请求是针对特定资源时,我才得到 _embedded 节点,例如在执行 GET http://localhost:8080/mywebservice/features/GROUND 时。

【问题讨论】:

标签: json spring rest hateoas spring-hateoas


【解决方案1】:

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

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

【讨论】:

  • 谁或什么控制了响应负载中_embeded 节点的写入?
  • _embedded 由 HAL 规范定义。 Spring Data REST 根据其对应用程序存储库和域模型的了解组装了一个 Resources 对象,然后将实际序列化委托给 Spring HATEOAS,这是一个为呈现各种形式的基于规范的超媒体而构建的库。
猜你喜欢
  • 2016-10-15
  • 2015-05-02
  • 2020-05-11
  • 1970-01-01
  • 2015-11-30
  • 2020-08-20
  • 1970-01-01
  • 2019-08-06
  • 1970-01-01
相关资源
最近更新 更多