Closed TheNorthMemory closed 3 years ago
对于异步请求和链式请求,能先给出一些代码片段,展示下开发者是如何使用它的吗?在贡献代码之前可以充分讨论讨论。
最好实现上使用的关键技术也介绍下?
网络编程是异步的,guzzle在5+就已经支持类似 getAsync
这样的 PromiseA+
实现,guzzle7 已经提权异步请求代码为 ClientTrait,可以像其他支持Promise/A+
的开发语言一样,异步甚至协程式编程,请求的语法糖类似如下:
$client->getAsync('v3/certificates', [])
.then(function(ResponseInterface $response) {})
.otherwise(function(ResponseInterface $response) {})
或者
try {
$response = $client->getAsync('v3/certificates', [])->wait();
} catch (Exception $e) {}
上述伪代码的核心思路是充分利用语法糖优势,把正常处理逻辑和异常处理逻辑区分开来,让语言自己解释自己。
guzzle其实已经提供了链式型如 get($uri, [])
语法糖,这里更进一步,就是把 $uri
也按照 slash
切分法,动态前置化,仅使HTTP Verbs保留 \GuzzleHttp\RequestOptions
,工程化实践可见 wechatpay-axios-plugin 项目。
伪代码类似如下:
$wxpay = new Wechatpay();
$wxpay->v3->certificates->get([]).then(function(){}).otherwise(function(){});
$res = $wxpay->v3->pay->transactions->native([])->wait();//native默认为`POST`
merged onto the new repo: https://github.com/wechatpay-apiv3/wechatpay-php
目标
[get|post|put|patch|delete]Async
驱动PromiseA+
风格v3->pay->transactions->native->postAsync()
链式请求