SDK 开发高级版!揭开 Foundation-SDK 的神秘面纱
foundation-sdk 其实源自于超哥的 easyWeChat,从中提取了大量的设计理念,并且融入我对 SDK 的理解而诞生。
what's created by foundation-sdk
这里必须要列一下 foundation-sdk 在背后默默的为多少个 SDK 提供支持。
其实有点小失落,发现自己开发的 SDK 没有自己想象中那么多 T_T
总共有 11 个包依赖 foundation-sdk ,而我自己开发的有7个,安装了接近 3 K 次。
简介
根据本人对 SDK 的理解,此包融入了几大关键的 SDK 元素。
- 容器
- 配置
- 日志
- 缓存
- 请求
- token
上面并非必要元素,但都极有可能用上。
来看看 foundation-sdk 的目录
这是 GitHub 插件 https://github.com/buunguyen/octotree
文件意思大概都不用解释,这里重点是 高级用法。
正片
Foundation
Foundation 是整个项目的核心,继承了 Pimple\Container
,也就是一个容器。你所使用的 $foundation->order
$foundation->config
$foundation->user
等等都是因为这个是一个容器。
Foundation 中含有一个 $providers
服务提供者的数组属性。
服务提供者
这是 Foundation 的第二个精华所在,容器的最佳表现。接上面所说的,你可以在 Foundation 中注册多个服务提供者, 参考这里
新建的服务提供者需要实现 Pimple\ServiceProviderInterface
,并补充完 register
方法,其实就是 new
一个类在 Foundation 中,参考这里
Config & Log & Cache
Foundation 的构造函数需要传入一个配置数组,例如 app_id
, secret
等,名称不局限。此时将存入 $foundation->config
里面。
Foundation 有几个默认的读取配置。
- debug
- log
- cache
举个栗子,假如你是这样使用的:
<?php
$app = new Foundation([
'app_id' => 'xxx',
'secret' => 'xxx',
'debug' => true,
'log' => [
'name' => 'foundation',
'file' => storage_path('logs/foundation.log'),
'level' => 'debug',
'permission' => 0777,
],
'cache' => new Doctrine\Common\Cache\FilesystemCache(sys_get_temp_dir());
]);
从上面可以看出,上面指定了 debug 状态,日志以及缓存。
当 debug 为 false 的时候,将不会输出日志(request 请求,response 返回,假如是控制台还会有输出)。
可以看出缓存方面使用的是 Doctrine\Common\Cache\FilesystemCache
,这一部分也可以完全参考 easywechat 的缓存文档
Api & Http
凡是写 SDK 都需要去新建一个 Api 的类,这个类需要去继承 Hanson\Foundation\AbstractAPI
。
API 类可以实现父类的 middlewares
去增加 guzzle 的中间件,例如 header 增加 Authorization 参考这里。
请求类使用的包是 guzzle 是毫无疑问的了,此外封装几个常用方法,目前来看是够用的了。
然后在 API 类里面通过 $http = $this->getHttp();
去获得一个 Http 请求类,去根据实际场景调用不同的请求方法。
$http->get($url, $query = [])
get 请求$http->post($url, $data = [])
post 请求,针对表单,使用的是 form_params$http->json($url, $data = [])
post 请求,针对 json$http->upload($url, $query = [], $files = [], $form = [])
post 请求,用于上传文件,具体我自己都觉得复杂,可以自己看看
小结
看到这里其实就介绍的差不多了,相信不少人看完会觉得有点懵,写的也不算好,讲的有点抽象,需要大家动手尝试才能加深印象。上面的 SDK 列表也可以当做学习的参考,每个 SDK 的情况都不一样,但 foundation-sdk 还是非常出色的兼容到各种不一样的情况。
篇幅有限,如果想再深入学习的同学需要去读读源码。
希望你们喜欢,来 star 一个 https://github.com/hanson/foundation-sdk
Learn from the best !
本作品采用《CC 协议》,转载必须注明作者和本文链接
推荐文章: