frangeris / skeleton-provider
遵循RESTful标准的SDK使用者的骨架
Requires
- php: >=5.5.0
- frangeris/skeleton-sdk: v1.0.0
- symfony/console: 2.6.*
This package is not auto-updated.
Last update: 2024-09-14 17:16:17 UTC
README
这是一个包装器的补充,用于使用标准REST SDK创建快速提供者,这是确定每个给定资源逻辑的常见地方,该逻辑通过RESTful API实现。
需要考虑以定义工作逻辑的功能
- 您可以实现psr您想要的,使其更适合您的项目,使用composer(默认psr-4)进行配置。
- 与REST通信的整个逻辑包含在一个名为skeleton-sdk的外部包中,该包专注于与api的传输交互,此逻辑不包括在此包中。
- 在源代码中存在一个超级基本的示例类,它展示了如何根据此模式启动流程并实现您想要的逻辑。
让我们摇滚起来...
1) 安装
开始一个干净项目最好的方法是将此任务委托给composer,只需运行以下命令
$ composer create-project frangeris/skeleton-provider /path/to/install/ 0.0.5
之后,创建了一个干净的文件夹(现在是一个没有仓库的文件夹),初始化您的仓库并快速充电...所有依赖项都已安装,如果您的位置在这里,您已经可以开始创建您各自的提供者以消耗您的RESTful api。
2) 设置
首先要考虑的是默认使用的命名空间相关内容,在Providers
命名空间下使用psr-4,如果您想更改,可以这样做...
默认配置(composer.json中的autoload)
"autoload": {
"classmap": [
"src/"
],
"psr-4": {
"Providers\\": "src/providers/"
}
}
3) 配置
为了使skeleton-sdk客户端正常工作,它需要变量来管理请求,这些变量是域名(base_url,public和private key(signatures)当使用hmac身份验证时),配置的示例结构如下
$config = [ 'method' => 'hmac', // Signature to use 'public_key' => 'asdasdasd', 'private_key' => 'zxzxzxzxzx', 'base_url' => ['http://api.{domain}.{extension}/{version}/', ['version' => 'v1', 'extension' => 'io', 'domain' => 'somedomain']], ];
其中method
是用于身份验证的签名,如果是“hmac”,则需要public和private key,base_url用于创建请求路径。这是skeleton-sdk客户端用于执行后续请求的配置。
4) 开始编码
每个提供者必须扩展属于skeleton-sdk包的抽象类Skeleton\SDK\Providers\AbstractProvider
(我们在扩展SDK),并实现Skeleton\SDK\Common\Supplier\ISupplier
接口以重写继承的方法(CRUD),使您的提供者如下
namespace Providers\Test; use Skeleton\SDK\Providers\AbstractProvider, Skeleton\SDK\Common\Supplier\ISupplier ; /** * Mock provider test class */ class TestProvider extends AbstractProvider implements ISupplier { public function create($provider) {} public function read() {} public function update($provider) {} public function delete($id) {} public function getById($id) {} }
在这个示例类中,展示了通过API进行资源的基本操作,如果仔细观察,一些方法需要参数才能运行,我们将开始发送值并自定义我们的提供者..
在包内,有一个用于创建具有所有默认结构(枚举、异常)和文件夹的提供者的工具,从/运行
$ ./skeleton
它会显示可用的命令列表,要创建新的提供者,请使用
$ ./skeleton provider:new
create($provider)
通常用于创建资源,在这种情况下,向指定的地址发送数据的POST请求,让我们看看以下示例,您想要使用hmac身份验证签名来创建一个测试用户
// test/run.php include(__DIR__ . '/../vendor/autoload.php'); use Skeleton\SDK\Common\Client, Providers\Test\TestProvider ; // Setting up the client with the configuration and credentials $config = [ 'method' => 'hmac', // Signature to use 'public_key' => 'asdasdasd', 'private_key' => 'zxzxzxzxzx', 'base_url' => ['http://{identifier}.{domain}.io/{version}', ['version' => 'v1', 'identifier' => 'demo4354589', 'domain' => 'mockable']], ]; $client = Client::getInstance()->setConfig($config); // Data to send $data = [ 'email' => 'test@test.com', 'first_name' => 'Jhon', 'last_name' => 'Doe', 'phone' => '000-000-0000' ]; // Lets create the new test $test = new TestProvider($client); print $test->create($data);
TestProvider类包含从AbstractProvider继承的属性skeleton,该属性允许通过guzzle进行请求,这是一个使用通过skeleton-sdk在设置中提供的签名进行每个调用的经纪人,可用(签名)方法有
- Hmac(公共和私人)密钥
- OAuth2 (待办)
- ...
配置由两部分组成:用于身份验证的方法和包含请求基础URL的base_url参数。
5) 提供者
对于提供者可能具有请求的能力,这需要一个客户端实例,如上所述,在创建时作为参数传递,这是所有提供者都需要的内容,然后您只需传递参数(数据)以发送请求,可以是数组或对象,创建的方法将负责发出请求并返回响应。
// src/provider/test/TestProvider.php class TestProvider extends AbstractProvider implements ISupplier { public function create($provider) { if (!is_array($provider)) $provider = $this->skeleton->fragment($provider); return $this->skeleton->post('/tests', $provider); } // ... }
上述方法的第一步是验证接收到的提供者不是一个数组,骨架实例的post方法接收一个关联数组,其中索引是字段名及其相应的值。
如果值不是数组,骨架提供了将对象属性值映射到包含所有分配值的关联数组的能力,这是通过接收对象并返回关联数组的fragment方法完成的。
然后只需在骨架实例方法中调用post内容,将第一个参数作为要消费的资源,第二个参数作为要发送的关联数据,在测试/运行.php的侧面打印输出,如下所示
HTTP/1.1 200 OK
Content-Type: application/json; charset=UTF-8
access-control-allow-origin: *
Vary: Accept-Encoding
Date: Wed, 22 Apr 2015 13:42:39 GMT
Server: Google Frontend
Cache-Control: private
Alternate-Protocol: 80:quic,p=1,80:quic,p=1
Accept-Ranges: none
Transfer-Encoding: chunked
{
"msg": "response from test method v1 using POST"
}
由骨架实例方法的post返回的对象是类型 GuzzleHttp\Message\Response,提供了处理guzzle响应的所有原生方法。