rest - 如何处理 REST API 中的大量资源

标签 rest

我正在将 REST 接口(interface)连接到现有应用程序,我很好奇最合适的解决方案是处理那些如果要检索它们会返回大量数据的资源。

该应用程序是一个现有的时间表系统,其中一个资源是一组用户的“时间段”。
这些资源的示例 URI 是:

/users/44/timeslots/

我已经阅读了很多与如何为此资源提供过滤以检索子集相关的问题,并且我已经有了解决方案。

我想知道我应该如何(或是否)处理在上面的 URI 上发出 GET 会从数万或数十万行返回兆字节数据并且需要相当数量的服务器资源来实际响应的情况第一名。
  • 在这些情况下,是否存在按惯例使用的 HTTP 响应?
    我发现 HTTP 代码 413 与太大的请求实体相关,但不适用于响应实体太大
  • 是否有替代约定来限制响应或告诉客户这是一个愚蠢的请求?
  • 我应该简单地让服务器满足这个庞大的请求吗?

  • 编辑:需要明确的是,我已经实现了资源的过滤和拆分,并考虑了对其他大型集合资源的分页。我想对没有意义的请求做出适当的响应(显然是由构建 URI 的客户端请求的)。

    最佳答案

    您可以自由设计您的 URI,因为您想对任何 进行编码。概念 .

    因此,根据您的用户(人/机器),您可以根据您的问题空间或领域将其用作概念级别的拆分。正如你提到的,你可能有这样的事情:

    /users/44/timeslots/afternoon
    /users/44/timeslots/offshift
    /users/44/timeslots/hours/1
    /users/44/timeslots/hours/1
    /users/44/timeslots/UTC1624
    

    一旦也可以通过上述想法/概念来限制。您可以通过添加查询/users/44/timeslots?day=weekdays&dow=mon 来过滤更多

    像这样使用或概念和过滤器自然会限制响应大小。但是您需要尝试设计您的 API 不要陷入那种情况 .如果您的客户行为不端,请给它一个 400 Bad Request。如果您的服务器端出现问题,请使用 5XX 代码。

    利用 REST 工具之一 - 超媒体和链接 (另见 HATEOAS )链接到您的超媒体的下一部分,利用您的领域理解的“ block 状概念”(页面,时间段)。也无需下载兆字节不适合缓存 这会影响可扩展性/速度。

    关于rest - 如何处理 REST API 中的大量资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5438386/

    相关文章:

    java - JAX-RS 404 未找到异常映射器

    asp.net - 将业务逻辑与 Controller 解耦的最佳方式

    ajax - Extjs 调用 RESTful Web 服务

    rest - 尝试使用用户配置文件 REST API 访问用户属性

    javascript - 如何在 Mocha 中维护两个请求之间的 session

    jquery - 获取响应头 jquery ajax post Set-Cookie

    java - 在 Play 应用程序中调用模块 Controller 的 REST API

    java - 区分同一 servlet 请求中的 URI 和请求正文参数

    ruby - 从/到 JSON API 对象化 Ruby 哈希

    security - 通过另一个 REST API 进行 Spring Rest API 身份验证