Api 如何在服务器和客户端之间保持grpc服务定义的同步?

Api 如何在服务器和客户端之间保持grpc服务定义的同步?,api,version-control,synchronization,protocol-buffers,grpc,Api,Version Control,Synchronization,Protocol Buffers,Grpc,我计划使用grpc来构建我的搜索API,但我想知道grpc服务定义文件(例如.proto)是如何在服务器和客户端之间同步的(假设它们都使用不同的技术) 此外,如果服务器更改了.proto中的一个,则将如何通知客户端根据这些更改重新生成存根 总结:如何与客户端共享定义(.proto),以及如何在这些文件发生任何更改时通知客户端 很简单:它们不是。这里的所有同步都是手动的,通常需要在您意识到更改并更新了.proto文件后重新构建和重新部署 如果不进行更新,您知道的字段和方法至少应该继续工作。你就不会

我计划使用
grpc
来构建我的搜索
API
,但我想知道grpc服务定义文件(例如
.proto
)是如何在服务器和客户端之间同步的(假设它们都使用不同的技术)

此外,如果服务器更改了
.proto
中的一个,则将如何通知客户端根据这些更改重新生成存根


总结:如何与客户端共享定义(
.proto
),以及如何在这些文件发生任何更改时通知客户端

很简单:它们不是。这里的所有同步都是手动的,通常需要在您意识到更改并更新了.proto文件后重新构建和重新部署

如果不进行更新,您知道的字段和方法至少应该继续工作。你就不会有新的东西了


另请注意:虽然您可以通过添加新字段和服务/方法来扩展架构,但如果您更改字段的含义、字段类型或服务上的消息类型,则可能会出现严重错误。

因此,这完全是手动操作,只能通过严格的工作流来管理?@adnanmuttaleb yes;请记住,在许多平台上,该工具作为编译时步骤工作,以目标语言生成代码,正如您所说的:“假设所有工具都使用不同的技术”;更新Java服务器对C++客户端来说不会有任何作用——C++客户端需要用一个更新的.java来重建,以生成处理C++所需的额外C++代码;有些库使用运行时元编程,因此在理论上可以适应.proto的更改,但这仍然不会使您的代码对附加字段做任何事情,也不会使用新的服务方法