目前已完成了PHP和js語言的客戶端sdk v1.0.0 dev版本。
PHP版本uctoo-api-clientSDK開源項目地址[https://gitee.com/UCT/uctoo-api-client-php](https://gitee.com/UCT/uctoo-api-client-php)
JS版本uctoo-api-clientSDK開源項目地址[https://gitee.com/UCT/uctoo-api-client](https://gitee.com/UCT/uctoo-api-client)
uctoo-api-client-php 是一個輕量級、語義化、對IDE友好的HTTP客戶端,支持常見的HTTP請求、異步請求和并發請求,是PHP開發者向UCToo服務端發送請求的SDK工具。
以訪問微信小商店的標準版交易組件及開放接口為例。
我們開發了一個wechatopen標準微信開放平臺前置服務器,wechatopen產品的作用是對接微信生態的所有API,同時以與微信官方API文檔完全相同的調用方式和返回結果,以微服務的方式提供給需要對接微信生態API的客戶端。(貌似wechatopen產品的作用和微信官方前幾天發布的微信云托管作用類似,英雄所見略同)
與wechatopen標準微信開放平臺前置服務器類似,目前還沒有看到市面上有標準抖音開放平臺前置服務器,可能也是可以試一試的產品方向。
言歸正傳,當我們要開發一個集成微信小商店的UCToo商城模塊minishop時,在商品類目管理功能頁面,有一個同步微信小商店獲取類目詳情的功能,我們就可以采用如下的開發規范:

*圖1.minishop同步微信小商店獲取類目詳情*
1. 從前端VUE項目,發起一個請求給minishop產品的php后臺同步類目接口sync。
2. 在php后臺同步類目方法中,我們并不是按照傳統的方式初始化一個本地運行實例的微信sdk去調用微信小商店標準版交易組件的開放接口,而是初始化一個uctoo-api-client-php客戶端,轉發請求到wechatopen產品的獲取類目詳情微服務。示例代碼如下:
~~~php
/**
* 同步微信小商店類目數據到本地
* @time 2021年06月10日 20:29
* @param $f_cat_id
*/
public function sync(Request $request)
{
$result = null;
$host = trim(Utils::config('wechatopen.host'));//獲取管理后臺配置的微信第三方平臺地址 http://serv.uctoo.com
$account = trim(Utils::config('wechatopen.account'));
$password = trim(Utils::config('wechatopen.password'));
$response = Http:: withHost($host) //指定第三方平臺
->withAccountAuth($account,$password) //采用服務端帳號認證
->withVerify(false) //無需SSL驗證
->product('/api/wechatopen') //如果指定產品 則必填參數
->post('/product/category/get', ['appid' => AdminApplet::adminApplet($request->user()->id)['appid'],'f_cat_id'=>0]); //當前管理員管理的appid
$res = $response->body();
return CatchResponse::success( $res,'sync success');
}
~~~
*圖2.minishop同步獲取類目方法*
雖然在sync方法中,看起來比傳統調用本地微信sdk方法多了幾行代碼,但是所帶來的好處是非常巨大的。
uctoo-api-client可以指定第三方平臺地址,可以路由到實現服務的產品模塊,可以指定調用服務的商戶帳號,可以指定調用具體的服務接口,所有這些輸入的參數,都是可以在管理后臺或模塊的配置界面可視化配置的。這樣就可以解耦wechatopen、minishop以及所有其他產品模塊。產品之間的服務調用都是采用類似微服務的方式進行,可以實現服務訪問與產品模塊的部署方式無關,wechatopen產品可以是運行在UCT官方的serv.uctoo.com部署實例,也可以是部署在一些其他第三方平臺或者大客戶的第三方平臺運行實例,而minishop產品模塊的這段代碼完全可以復用,進而為以后的可視化配置,低代碼/無代碼,工作流、服務編排等高級特性提供良好的基礎設施。如果所有ISV都采用相同的開發規范,那實現SaaS產品之間的互聯互通,產品模塊在不同服務商間的商業化分發也是有可能的。
我們給這樣的編程模式起個名字,就叫分布式服務總線吧,類似harmonyOS的分布式軟總線。我們認為一切低代碼/無代碼應該至少在自身產品內部做到了標準的服務解耦,有統一的開發規范和產品模塊作為標準的基礎設施,就像微信小程序的云CMS和微搭低代碼產品之間的關系,否則越做到后面越是復雜的業務場景,低代碼/無代碼產品本身反而會成為制約生產力發展的結點。
uctoo-api-client SDK結合我們上個月發布的API tester產品模塊,給開發者提供了一個簡單易用的SaaS應用開發基礎設施。由于云原生時代的SaaS產品有越來越多需要和公有云集成和對接的地方,我們基本上把幾個主流公有云提供商的開發文檔和SDK都用過了。感覺目前只有某國內排名第一的公有云提供商,開發者門戶中的文檔、API在線測試工具、SDK形成了完整統一的標準體系,其他云提供商都還差點意思,要么是缺少API在線測試工具,要么是連統一的客戶端SDK都提供不完整。大部分公有云服務商都還處在只管云不管端的初級階段。比如,微信生態的在線調試工具,[https://mp.weixin.qq.com/debug/](https://mp.weixin.qq.com/debug/),已經十年不變了,而微信開發相關的SDK基本是完全依賴第三方服務商和開源項目自由發揮。抖音開放平臺至少每個接口都有在線調試工具。

*圖3,微信調試工具*
UCToo產品體系希望能夠盡力做到端云結合,基于UCToo統一SaaS應用實例開發規范開發的產品可以云原生去中心化部署,又可以任意組合跨生態協同。
## 更新日志
### 2021-06-30
* 支持withHost
* 支持product產品模塊路由
* 支持withAccountAuth
**Todo List**
* \[x\] 異步請求
* \[x\] 并發請求
* \[ \] 重試機制
* \[ \] 支持http2
* \[ \] 支持OAUTH2
* \[ \] 支持openapi機制,可從服務端獲取API信息,客戶端即可快捷使用
GraphQL技術路線參考
[https://gitee.com/UCT/uctoo-api-client](https://gitee.com/UCT/uctoo-api-client) 技術選型 [https://github.com/apollographql/apollo-client](https://github.com/apollographql/apollo-client)