Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

jrpc接口版本管理问题 #957

Open
linj-disanbo opened this issue Nov 3, 2020 · 2 comments
Open

jrpc接口版本管理问题 #957

linj-disanbo opened this issue Nov 3, 2020 · 2 comments

Comments

@linj-disanbo
Copy link
Collaborator

linj-disanbo commented Nov 3, 2020

chain33 在实现jrpc接口时, 存在直接返回 types 包中的数据结构. 会有两个问题

  1. pb格式的 0值在json中, 会被忽略
  2. 内部数据结构的改动, 会影响协议. 这不一定都是bug, 有时这个改动也需要协议改动, 但有时代码的修改者没有意识这会导致协议的变动, 就没有去修改协议文档.

部分类型已经在 rpc/types/types.go 已经定义, 只是有接口没有用上.

我们可以约定 jrpc 的实现 为 先调用 rpc的实现函数, 再处理返回值的类型转换, 这样不容易产生上诉问题. 类型转换可以写一些小的转换函数来实现.

@linj-disanbo
Copy link
Collaborator Author

接口中用的数据结构就算有和内部用到的数据结构一模一样, 也建议单独在定义一份, 用更多的代码换更稳定的接口.

在chain33项目中, types.transaction 应该是相对不会变的数据结构, 也有两次变化

  1. 增加对交易组的支持: 加了 next, groupCount等
  2. 最近加入 hashCache, fullHashCache

@33cn 33cn changed the title jrpc接口实现问题 jrpc接口版本管理问题 Nov 4, 2020
@33cn
Copy link
Owner

33cn commented Nov 4, 2020

  1. json rpc 和 grpc 一样,客户端要对后续新增字段兼容,使用的json 解析的库,需要支持这一点,这个要明确重点的写在我们的接口说明上。

  2. 修改字段或者字段的名字,类型之类的,需要新建一个函数 GetAccountV2 V3... , 并且把旧版本设置为过期,提醒客户端。一段时间后,改成 GetAccount ,不再对非常老的版本支持。提供一个启动后调用过期函数,以及次数的统计接口,他们的运维可以监控这个接口,及时的升级客户端。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants