更优雅快速的为你的项目构建一个PHP版本SDK
前言#
随着互联网的发展,业务体量的递增,传统单体应用逐步演变为拆分多个模块应用进行分布式部署,甚至演变为微服务架构应用,在这种环境下,一个复杂的业务功能往往需要多个平台服务联动才可以完成,我们的业务系统在调用别人的系统服务同时,也可能对外提供接口服务,供其他系统调用。今天,我们就如何快速的为你的项目构建一个 PHP 版本 SDK 展开讨论
Easy-sdk 项目简介#
Easy-sdk 是一个用于快速构建 PHP 版本 SDK 的应用框架,通过此框架,开发人员可以快速将当前系统对外提供的功能服务封装成 PHP 版本的 SDK,供其他 PHP 项目快速引入并使用当前系统提供的功能服务,完成相应的业务逻辑。为了让开发人员更好的上手使用,系统实现上主要借鉴 Laravel、easy-wechat 等项目的相关设计,某些框架功能使用上与 Laravel、easy-wechat 基本保持一致。
项目地址: github.com/itsanr-oris/easy-sdk
基本使用#
1. 安装 easy-sdk-installer#
通过 composer 进行全局安装,如下
$ composer global require f-oris/easy-sdk-installer
注意需要将
~/.composer/vendor/bin
目录设置到 PATH 环境变量中,否则无法识别第二步中的 easy-sdk 命令
2. 创建 Sdk 应用#
执行 Sdk 初始化创建命令
$ easy-sdk new sdk-demo
按照命令行提示,依次输入以下包名、介绍、作者、根命名空间,easy-sdk
指令会读取当前目录信息以及 Git 认证信息生成默认 SDK 应用信息,如不需要调整,直接回车确认即可
3. Sdk 组件开发#
进入 sdk-demo
目录,执行命令创建组件
php artisan make:component Hello/Hello
命令执行完毕后,即可在 src
目录内可以看到 Hello
子目录,子目录内包含一个 Hello.php 文件,这个文件内只是一个空的组件类,我们需要根据业务完善相关业务代码。以输出一句 “Hello, easy sdk framework.” 为例,代码片段如下
<?php
// ...
class Hello extends Component
{
/**
* Return a hello message.
*
* @return string
*/
public function hello()
{
return "Hello, easy sdk framework.";
}
}
4. Sdk 组件测试#
在 tests
下新建 Hello
文件夹,新建 HelloTest.php 测试类,需要继承基类 tests/TestCase.php,按照常规的 phpunit 进行测试即可,如下
<?php
// ...
class HelloComponentTest extends TestCase
{
/**
* Test get a hello message from hello component.
*/
public function testGetAHelloMessageFromHelloComponent()
{
$this->assertEquals('Hello, easy sdk framework.', $this->app()->get(Hello::name())->hello());
}
}
5. 发布 Sdk 代码包#
功能测试完毕后,按照 packagist 组件包发布指引,发布 Sdk 代码包,待 composer 仓库同步完毕后,即可通过 composer 拉取 sdk 组件代码包进行使用
使用扩展包扩展系统功能#
Easy-sdk 只是一个简单的 Sdk 应用框架,主要用于 Sdk 应用的组件管理,本身并不提供太多复杂功能,可通过引入外部组件扩展包来丰富 Sdk 应用的基础功能服务,以较为常用的 Http 服务为例,为 Sdk 应用引入 Http 功能组件。
1. 引入功能组件包#
进入 sdk-demo
目录,通过 composer 引入 http 组件包
$ composer require f-oris/easy-sdk-httpclient
2. 发布 Http 组件配置文件#
进入 sdk-demo
目录,执行 artisan 命令
$ php artisan vendor:publish --provider="Foris\Easy\Sdk\HttpClient\ServiceProvider"
命令执行完毕后,即可在项目目录内 config
文件下找到 http-client.php
配置文件
3. 使用 Http 组件服务#
每一个 Sdk 组件都是通过 Application 获取到相应的组件实例才能进行调用相应的组件功能方法,获取 Http 组件的方式实例如下:
<?php
//...
$http = (new Application())->get(\Foris\Easy\HttpClient\HttpClient::class);
由于组件的生命周期其实是包含在 Application 的生命周期里面的,所以,在组件中就不能以上述方式进行调用,组件的调用方式如下:
<?php
//...
$http = $this->app()->get(\Foris\Easy\HttpClient\HttpClient::class);
另外,eask-sdk-httpclient 扩展包提供了一个 HasHttpClient
的 Trait 类,开发人员可以在 src/Component.php
文件中引入并使用该类,简化之后的 Http 组件调用方式如下
<?php
//...
$http = $this->http();
Http 组件扩展包提供具体功能参考 f-oris/easy-sdk-httpclient 扩展包说明
4. 扩展包列表#
- easy-sdk-logger Logger 组件包
- easy-sdk-httpclient HttpClient 组件包
- easy-sdk-cache Cache 组件包
- easy-sdk-develop Easy-sdk 开发辅助扩展包
其他#
1. 关于项目#
项目主要是源于笔者所在的开发团队需要对接数个平台服务来实现自己的系统业务,然后大部分第三方都只是提供一个 http 接口文档,然后需要开发人员自己去实现具体的对接逻辑,然后再到业务对接,整个过程中,重复工作挺多的,而且由于没有相应的规范,不同系统、不同开发人员对接出来的代码逻辑质量也参差不齐,出问题了,都是按照各自的规范去进行排查,难以统筹管理。因此,基于自己熟悉的 Laravel 框架以及使用过的 easy-wechat 扩展包,移植了部分功能代码,用于简化统一 SDK 应用的构建。
2. 未来方向#
其实这个项目还有很多功能待完善的,都是在想,比如说 Sdk 文档的自动化构建(Ps: 我也很讨厌写文档,但是文档还是很重要的),简化测试代码的编写流程,PHP 各种版本的一些兼容性修复测试(目前基本上兼容 5.5+,但某些测试代码在 7.x 下无法执行…)等,这个项目本身还是挺好玩的,有兴趣的童鞋可以一起玩。
本作品采用《CC 协议》,转载必须注明作者和本文链接
推荐文章: