frangeris/skeleton-provider

关于此软件包最新版本(v1.0.0)没有可用的许可证信息。

遵循RESTful标准的SDK使用者的骨架

v1.0.0 2015-06-01 09:57 UTC

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在设置中提供的签名进行每个调用的经纪人,可用(签名)方法有

  1. Hmac(公共和私人)密钥
  2. OAuth2 (待办)
  3. ...

配置由两部分组成:用于身份验证的方法和包含请求基础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响应的所有原生方法。