manuman85/hal-client

一个轻量级的客户端,用于消费和操作超文本应用程序语言(HAL)资源。

1.0.1 2023-10-05 15:42 UTC

This package is not auto-updated.

Last update: 2024-09-20 18:49:08 UTC


README

一个轻量级的PHP客户端,用于消费和操作 超文本应用程序语言(HAL) 资源。

Build Status Coverage Status

安装

使用 Composer 安装最新版本。

composer require jsor/hal-client

查看 Packagist 页面 以获取所有可用版本。

HTTP 客户端依赖

Hal客户端需要一个可以处理 PSR-7 请求和响应的 HttpClientInterface 实现。

要使用此库中包含的默认实现,您需要安装Guzzle 7、6或5。

composer require guzzlehttp/guzzle:"^5.0||^6.0||^7.0"

使用方法

我们将使用 Propilex 作为示例API端点。

创建客户端

首先,我们设置一个 HalClient 实例。

use Jsor\HalClient\HalClient;

$client = new HalClient('http://propilex.herokuapp.com');

现在,我们可以设置额外的头部(例如,一个授权头部),这些头部会随着每个请求一起发送。

$client = $client->withHeader('Authorization', 'Bearer 12345');

请注意,客户端实例是 不可变的,这意味着,任何更改实例状态的调用都会返回一个 新的 实例,而不会更改原始实例。

// Wrong!
$client->withHeader('Authorization', '...');
$resource = $client->get('/protected');

// Correct!
$client = $client->withHeader('Authorization', '...');
$resource = $client->get('/protected');

浏览API

要开始浏览API,我们首先获取根资源。

/** @var \Jsor\HalClient\HalResource $rootResource */
$rootResource = $client->root();

我们现在跟随 p:documents 链接。

/** @var \Jsor\HalClient\HalLink $documentsLink */
$documentsLink = $rootResource->getFirstLink('documents');

$documentsResource = $documentsLink->get();

$totalDocuments = $documentsResource->getProperty('total');

foreach ($resource->getResource('documents') as $document) {
    echo $document->getProperty('title') . PHP_EOL;
}

如果有包含更多文档的第二页,我们可以跟随 next 链接。

if ($documentsResource->hasLink('next')) {
    $nextDocumentsResource = $documentsResource->getFirstLink('next')->get();
}

好的,让我们创建一个新的文档。

$newDocument = $documentsResource->post([
    'body' => [
        'title' => 'Sampl document',
        'body'  => 'Lorem ipsum'
    ]
]);

哎呀!文档标题有一个拼写错误。让我们改正它。

$changedDocument = $newDocument->put([
    'body' => [
        'title' => 'Sampe document',
        'body'  => $newDocument->getProperty('body')
    ]
]);

糟糕,我们放弃了。

$changedDocument->delete();

许可协议

版权所有(c)2015-2021 Jan Sorgalla。在 MIT 许可协议 下发布。