当前位置: 首页 > 知识库问答 >
问题:

使用HAL显示分页资源的正确方法是什么?

蓟浩旷
2023-03-14

这听起来像是一个新手问题,但我想知道用HAL格式呈现分页资源的最佳方式是什么?现在我正在使用Spring HATEOAS API将Page对象转换为资源PagedResourcesAssembler#toResource(页面

{
"_links": {
    "self": {
        "href": "http://example.org/api/user?page=3"
    },
    …
}
"count": 3,
"total": 498,
"_embedded": {
    "users": [
        {
            "_links": {
                "self": {
                    "href": "http://example.org/api/user/mwop"
                }
            },
            "id": "mwop",
            "name": "Matthew Weier O'Phinney"
        }
    ]
}

}

一切正常,但唯一的问题是返回的集合位于嵌入的字段下,并且有类名,所以客户端也必须知道这个类名,对吗?只需像非HAL格式一样在内容下返回集合是否更好?如果是,我应该如何使用Spring HATEOAS实现它?


共有1个答案

姚丰羽
2023-03-14

这不是问题,这是HAL规范中定义嵌入式的方式。

user不是一个类,它是一个链接关系,它允许客户端实际找到它首先要求的集合(例如使用JSONPath表达式)。这根本不是突然出现的事情,但通常是相同的链接关系,客户端首先用于查找该资源。

假设API根公开此文档:

{
  "_links": {
    "users": {
      "href": "…"
    },
    …
  }
}
  

看到这一点,客户端必须知道user的语义学才能找到它想要遵循的链接。在您的案例中,user基本上指向支持分页的集合资源。

因此,如果客户端遵循名为“用户”的链接,则可以在“嵌入”下找到它要查找的实际内容。用户通过结合有关媒体类型(HAL,嵌入式)和服务的应用程序级语义(用户)的知识,在HAL响应中选择用户。

 类似资料:
  • 问题内容: 即使在使用Java Swing一年以上之后,对我来说,它仍然像魔术一样。如何正确使用BufferStrategy,尤其是方法? 我想添加一个JFrame和一个Canvas,然后进行绘制。我还希望能够调整()画布的大小。每次我调整Canvas的大小时,似乎都会被浪费掉,或者变得毫无用处,因为在上使用并没有真正做任何事情。另外,它具有怪异的不确定性行为,我不知道如何正确同步它。 这就是我的

  • 问题内容: 我想在Linux上使用该机制。我希望我的应用程序知道何时更改了文件。能否请您提供给我一个示例,该怎么做? 问题答案: 文档(来自具有inotify的Monitor文件系统活动) 在C API 提供了三个系统调用来构建各种文件系统监视器: 在内核中创建子系统的实例,并在成功和失败时返回文件描述符。与其他系统调用一样,如果失败,请检查诊断。 顾名思义,它增加了一块 手表 。每个监视都必须提

  • 问题内容: 需要帮助,以了解如何在UIKit中使用prepareForReuse()。该文件说 您只应重置与内容无关的单元格属性,例如Alpha,编辑和选择状态 但是如何重置单个属性属性(例如isHidden)呢? 假设我的单元格有2个标签,我应该在哪里重置: 标签文本 label.numberOfLines label.isHidden 我的tableView(_:cellForRowAt :)

  • 一段时间以来,我一直试图将我的tableview工作作为一种电子表格,通过背景线程进行更新,当单元格更新时,它会亮起几秒钟(更改样式),然后返回到原始样式。我已经知道,我不能直接在表格单元格中存储和设置样式,我需要某种支持类来保存这些数据。但是tableview“重用”单元格(使用相同的单元格处理不同的数据)的行为真的很奇怪。当所有单元格都适合屏幕时,它对我来说完美无瑕,但一旦我放置大约100个单

  • 我正在创建一个web客户端,它的目的是通过向数据库表中添加记录和从数据库表中删除记录来修改一组数据库表。它必须以原子的方式这样做,因此删除和插入都必须用单个HTTP请求来完成。显然,这是某种写操作,但我很难确定哪种方法是合适的。 POST起初似乎是正确的,只是RFC2616指定POST请求必须描述指定资源的“新从属”。我在这里可不是这么做的。 PUT可以用于对现有的东西进行更改,所以这似乎是正确的

  • 我使用apache ignite缓存作为数据存储。想知道是否有方法从客户端对大型数据集合进行分页。我不需要或希望数百万的记录从服务器转移到我的网络/移动客户端。 这是一个有效的方法吗? 我看过使用游标,但API仅限于迭代器...