Rest gRPC中的分页

Rest gRPC中的分页,rest,pagination,rpc,grpc,Rest,Pagination,Rpc,Grpc,我正在使用gRPC对呼叫进行分页,并试图找出执行此操作的选项/近似值。这是一个明智的问题吗?我可以使用哪些资源来实现这一点?分页与分块二进制有效负载非常相似。我的回答可能值得一读 也就是说,分页可能有不同的权衡,因为它通常吞吐量要低得多,有时使用单独的请求也不那么困难。低吞吐量会阻止流控制在足够短的时间内发挥作用。对于完全动态的结果(如搜索结果),使用单独的请求比较困难,但对于更静态的数据(如资源的子项),可能不是什么问题 由于gRPC流控制可能缓冲过多,另一个选项是使用流,但引入应用程序级流控

我正在使用gRPC对呼叫进行分页,并试图找出执行此操作的选项/近似值。这是一个明智的问题吗?我可以使用哪些资源来实现这一点?

分页与分块二进制有效负载非常相似。我的回答可能值得一读

也就是说,分页可能有不同的权衡,因为它通常吞吐量要低得多,有时使用单独的请求也不那么困难。低吞吐量会阻止流控制在足够短的时间内发挥作用。对于完全动态的结果(如搜索结果),使用单独的请求比较困难,但对于更静态的数据(如资源的子项),可能不是什么问题


由于gRPC流控制可能缓冲过多,另一个选项是使用流,但引入应用程序级流控制。使用应用程序级流控制,您可以使用流上的消息来确定您需要多少响应,这并不难使用或实现。有人说gRPC本机支持精确的基于消息的流控制(在本例中会产生类似的结果),但不清楚这是否会发生以及何时发生。

这个问题已经很老了,但我觉得答案中缺少了一些东西

虽然流媒体是IMHO的首选,但我有一些“传统”分页非常有用的情况。让我们设想一个
user
服务,它允许CRUD访问用户存储,并具有
ListUsers
SearchUsers
rpc。在这里,将结果分块到页面中要方便得多


我个人使用谷歌的方法:

谷歌自己已经为此编写了一份很好的设计文档:

  • 列表
    方法的请求消息中定义
    字符串
    字段
    页面标记
    。客户端使用此字段请求列表结果的特定页面
  • 列表
    方法的请求消息中定义
    int32
    字段
    页面大小
    。客户端使用此字段指定服务器返回的最大结果数。服务器可以进一步限制单个页面中返回的最大结果数。如果页面大小为0,服务器将决定返回的结果数
  • 列表
    方法的响应消息中定义
    字符串
    字段
    下一页\u标记
    。此字段表示检索下一页结果的分页标记。如果值为“”,则表示请求没有进一步的结果
关于使用
FieldMask
进行部分响应的部分也值得一读,因为这是一种常见的api设计模式