anik/apiz
Apiz是一个REST API管理器的模板
v3.0
2023-11-20 14:57 UTC
Requires
- php: ^8.0
- ext-curl: *
- ext-xmlwriter: *
- lib-libxml: >=2.6.20
- anik/loguzz: ^3.0
- guzzlehttp/guzzle: ^7.0
- nahid/jsonq: ^5.1
Requires (Dev)
- colinodell/psr-testlogger: ^1.2
- mockery/mockery: ^1.3
- monolog/monolog: ^1.12|^2.0
- phpunit/phpunit: ^7.5.15|^8.4|^9.0
- symfony/var-dumper: ^3.4
README
APIZ是一个PHP API客户端开发套件。您可以使用此包轻松处理所有类型的JSON API响应。
需求
- PHP >= 8
安装
composer require anik/apiz
配置
此包无需额外配置。
用法
让我们为https://reqres.in创建一个API服务。
假设您需要为您的包创建多个API服务。您的服务目录是app/Services
。现在我们正在为https://reqres.in开发一个服务并创建一个名为ReqResApiService.php
的类文件,该文件扩展自\Apiz\AbstractApi
类。
namespace App\Services; use Apiz\AbstractApi; class ReqResApiService extends AbstractApi { protected function setBaseUrl() { return 'https://reqres.in'; } }
AbstractApi
是一个抽象类,其中setBaseUrl()
是一个抽象方法。
要获取该URL的API响应,它们有一个前缀'api',所以我们首先使用受保护的属性$prefix
设置它
namespace App\Services; use Apiz\AbstractApi; class ReqResApiService extends AbstractApi { protected function setBaseUrl() { return 'https://reqres.in'; } protected function setPrefix () { return 'api'; } }
现在我们创建一个获取所有用户信息的方法
namespace App\Services; use Apiz\AbstractApi; class ReqResApiService extends AbstractApi { protected function setBaseUrl() { return 'https://reqres.in'; } protected function setPrefix () { return 'api'; } public function allUsers() { $users = $this/*->query(['page'=>2])*/->get('/users'); if ($users->getStatusCode() == 200) { return $users->parseJson(); } return null; } }
我们为此包使用GuzzleHttp。因此,您可以使用所有HTTP动词作为魔法方法。这完全不麻烦。我们返回三个对象response
、request
和contents
作为所有响应。您可以从此响应中访问所有Guzzle响应方法。我们使用魔法方法从响应中访问它。
输出
带有表单参数的Post请求
public function createUser(array $data) { $user = $this->formParams($data) ->post('/create'); if ($user->getStatusCode() == 201) { return $user->parseJson(); } return null; }
参数选项列表
formParams(array $params)
headers(array $params)
query(array $params)
allowRedirects(array $params)
auth(string $username, string $password [, array $options])
body(array|string $contents)
json(array $params)
file(string $name, string $file_path, string $filename [, array $headers])
attach (string $name, string $contents, string $filename [, array $headers])
params(array $params)
HTTP动词列表
get(string $uri)
post(string $uri)
put(string $uri)
delete(string $uri)
head(string $uri)
options(string $uri)
额外方法
getGuzzleClient()
日志记录
Apiz允许您记录您的请求和响应。它需要配置一些方法。
logger()
返回\Psr\Log\LoggerInterface
对象。返回null将不会记录任何数据。requestFormatter()
应返回满足\Loguzz\Formatter\AbstractRequestFormatter
实现的对象。返回null将不会记录请求数据。responseFormatter()
应返回满足\Loguzz\Formatter\AbstractResponseFormatter
实现的对象。返回null将不会记录响应数据。logRequestLength()
应返回整数值。这是记录curl字符串时的长度。logOnlySuccessResponse()
返回true
将仅记录成功的响应数据,如果Guzzle没有引发任何错误。logOnlyExceptionResponse()
返回true
将仅记录错误响应,如连接超时、响应超时。logLevel()
可以设置为任何可用的日志级别。tag()
应返回非空字符串,该字符串将日志设置为["tag" => "log-message"]
格式。forceJson()
应返回布尔值,该值将消息转换为JSON字符串(如果为true
),否则转换为数组(如果为false
)。它内部转换为布尔值。useSeparator()
应返回布尔值。与如tag.request
、tag.success
、tag.failure
之类的标签一起使用。它内部转换为布尔值。