我正在将 REST 接口(interface)连接到现有应用程序,我很好奇最合适的解决方案是处理那些如果要检索它们会返回大量数据的资源。
该应用程序是一个现有的时间表系统,其中一个资源是一组用户的“时间段”。
这些资源的示例 URI 是:
/users/44/timeslots/
我已经阅读了很多与如何为此资源提供过滤以检索子集相关的问题,并且我已经有了解决方案。
我想知道我应该如何(或是否)处理在上面的 URI 上发出 GET 会从数万或数十万行返回兆字节数据并且需要相当数量的服务器资源来实际响应的情况第一名。
我发现 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/