roemerb/php7-rest

PHP 7.0+ 的简单 REST 客户端

1.0 2017-06-14 09:08 UTC

This package is auto-updated.

Last update: 2024-09-16 20:14:19 UTC


README

Build Status

php7-rest

php7-rest 是一个非常简单的 Http REST 客户端,针对 PHP v7.0+ 进行了一些优化。它并不一定旨在具有丰富的功能或广泛使用,而只是提供一个简单的 API 来指定 REST API 行为。

安装

如果您想安装此库,我建议使用 Composer

composer require roemeb/php7-rest

尽管如此,由于此库没有任何依赖项(仅需要 ext-curl),您也可以克隆此存储库并开始使用 src/RestClient.php

用法

初始化

以如下方式初始化 API 客户端

require_once('vendor/autoload.php');

use RestClient\RestClient;

$client = new RestClient(RestClient::HTTPS, 'api.myhost.com', ['version' => 2]);

您只需指定方案和主机。如果您需要使用任何类型的身份验证,您可以通过添加头信息来实现。目前,生成 OAuth 令牌不是此库的功能之一。

$token = Oauth::gen_token($credentials);

$client->addHeader('Authorization', 'Bearer ' . $token);

选项

在初始化时可以指定一些选项

  • version 您的 API 版本。将作为路径附加到主机(例如,myhost.com/v2/
  • port 您的 API 是否在非标准端口上运行?在这里指定它。
  • cert 将被加载到以避免 curl 错误 60 的证书捆绑文件的路径
  • content_type 自定义 Content-Type 头的值。默认为 application/json。如果您根本不想使用此头,请将其设置为 false
  • user_agent 自定义 User-Agent 头的值。默认为 Php7Rest/{Version}。如果您根本不想使用此头,请将其设置为 false
  • insecure 设置为 true 以禁用 curl 主机验证。

您还可以通过使用 $client->addHeader($name, $value) 来设置头选项。它将覆盖默认值。

资源

可以通过两种方式之一查询数据。您既可以注册资源,这些资源将被自动调用,也可以让您的现有资源类扩展此库中提供的 RestResource 类。

注册资源

注册资源非常简单。只需提供名称和此资源支持的方法数组。另外,如果您的资源支持非默认方法,您也可以注册这些方法。如果这些方法需要 ID,它将自动包含在请求中。

$client->register('people', ['list', 'get', 'create']);
$client->registerMethod('people', [
	'name' 		=> 'address',
	'method' 		=> '{id}/formatted_address',
	'http_method'	=> RestClient::HTTP_GET // Or just 'GET'/'get'/'Get'
]);

/**
* This will call:
* GET https://api.myhost.com/people/v2/{id}
*/
$client->people->get($id);

// We can call custom methods the same way
$client->people->address($id);

扩展 RestResource

class Person extends RestResource
{
	public function __construct()
	{
		// Just give the parent constructor some information
		parent::__construct($restClient, strtolower(__CLASS__);
	}
}

$people = new Person();
$people->get($id);

闭包

所有方法都支持闭包,因此您不需要等待 API 响应即可继续您的业务逻辑。响应将作为参数包含在您的函数中。如下使用闭包

// Initiate an API call...
$client->people->get($id, function($response) {
	// Do something with $response
});

// ...and continue to do other stuff in the meantime.