代码之家  ›  专栏  ›  技术社区  ›  Jeff Tian

如何区分grpc服务中的未提供和空数组?

  •  0
  • Jeff Tian  · 技术社区  · 6 年前

    https://github.com/grpc/grpc-node/issues/1202 .

    但是如果您试图实现CRUD操作并通过grpc将它们作为服务提供,那么上述场景就很难实现。

    service CRUD {
      rpc updateTable(updateRequest) returns updateResponse {}
    }
    
    message updateRequest {
      repeated string a = 1;
      string b = 2;
    }
    
    message updateResponse {
      boolean success = 1;
    }
    

    如果使用默认选项加载包,则客户端无法删除by的项

    client.CRUD.updateTable({a: []})
    

    {a: []} 变成 {}

    如果使用选项{arrays:true}加载包,则 a

    client.CRUD.updateTable({b: 'updated value'}) 
    

    因为争论 {b: 'updated value'} {a: [], b: 'updated value'} 当它到达服务器端时。

    关于如何处理这两种情况,谁能分享一些更好的想法 grpc-node proto3 ?

    0 回复  |  直到 6 年前
        1
  •  1
  •   Nicolas Noble    6 年前

    protobuf编码无法区分这两种情况。由于protobuf与语言无关,它无法理解Javascript的“未定义”与“[]”之间的概念差别。

    我强烈建议阅读以下设计文档: https://developers.google.com/protocol-buffers

    推荐文章