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

提议分开 http 和 gRPC 的实现代码 #31

Open
kids-return opened this issue Aug 12, 2022 · 8 comments
Open

提议分开 http 和 gRPC 的实现代码 #31

kids-return opened this issue Aug 12, 2022 · 8 comments

Comments

@kids-return
Copy link
Contributor

  1. 可以在项目中 同时支持 http 和 gRPC 两种协议,配置里不再需要 'protocol' => Protocol::HTTP,
  2. 对强类型更友好
    例如
现在的 Tcc callBranch
public function callBranch($body, string $tryUrl, string $confirmUrl, string $cancelUrl)

之后
Http 文件的 TCC callBranch
public function callBranch(array $body, string $tryUrl, string $confirmUrl, string $cancelUrl)

gRPC 文件的 TCC callBranch
public function callBranch(\Google\Protobuf\Internal\Message $body, string $tryUrl, string $confirmUrl, string $cancelUrl)
  1. 维护起来更方便,相关的实现之间不会有影响,也便于后续的协议扩展
@kids-return
Copy link
Contributor Author

改动的可能有点大,官方的客户端也是分开的

@PandaLIU-1111
Copy link
Member

这个可以改,但是会造成BC。还有一个,协议混用的场景多吗,我是认为提供过多可以调用的方法,对于使用者来说在协议切换的时候还得改代码,这块也不是很友好

@kids-return
Copy link
Contributor Author

kids-return commented Aug 12, 2022

相对来说我认为切协议 修改代码是必要的,协议混用的场景我也无法确定多不多,但如果遇到混用的话将会很麻烦,即使切协议也要全部的服务都切,无法实现只切一部分,切部分协议就是混用的场景呀。

@kids-return
Copy link
Contributor Author

kids-return commented Aug 12, 2022

如果只能使用一种协议,全切的成本也是巨大的,必须全部涉及到的服务协议修改完成才能切,还需要大量的测试。
目前 gRPC 我只跑通了一半的 TCC,现在的版本即使 BC 影响也不会很大,当前版本是0.2.x,在没到 1.0.0前 0.3的版本就能BC

@kids-return
Copy link
Contributor Author

kids-return commented Aug 12, 2022

相对来说我认为切协议修改代码是必要的,协议混用的场景我也无法确定多不多,但如果遇到混用的话将会很麻烦,即使切协议也要全部的服务都切,无法实现只切一部分,切部分协议就是混用的场景呀。

如果切部分协议是混用的场景,越往后切协议的成本就约高,导致很难切最后基本不可能切,不如早早提供混用的场景便与后期可以过渡,代码层面也更友好

@huangzhhui
Copy link
Member

把两个放一起是故意的设计,我不认为分开更好,会造成很多代码的浪费,PHP 本身可以接受多种参数类型,写成以下的方式即可

public function callBranch(\Google\Protobuf\Internal\Message|array $body, string $tryUrl, string $confirmUrl, string $cancelUrl)

@PandaLIU-1111
Copy link
Member

把两个放一起是故意的设计,我不认为分开更好,会造成很多代码的浪费,PHP 本身可以接受多种参数类型,写成以下的方式即可

public function callBranch(\Google\Protobuf\Internal\Message|array $body, string $tryUrl, string $confirmUrl, string $cancelUrl)

这块我考虑另外一个问题,就是在协议切换的时候,比如我原本的服务用的是 http协议的,后面在切换GRPC协议,是否会有协议混用的场景,按照目前的做法应该是不支持协议混用的场景的

@huangzhhui
Copy link
Member

协议混用理论上是可以支持的,就看要不要去做了,我是希望弱化用户对协议层的关注和理解,只通过一个配置值就能内部隐式完成切换

@PandaLIU-1111 PandaLIU-1111 added good first issue Good for newcomers and removed good first issue Good for newcomers labels Aug 16, 2022
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

3 participants