friendsofapi / boilerplate
优秀的API客户端基础
dev-master
2017-05-21 18:02 UTC
Requires
- php: ^7.0
- php-http/client-common: ^1.1
- php-http/discovery: ^1.0
- php-http/httplug: ^1.0
- php-http/multipart-stream-builder: ^1.0
Requires (Dev)
- guzzlehttp/psr7: ^1.3
- nyholm/nsa: ^1.0
- php-http/curl-client: ^1.6
- php-http/message: ^1.0
- php-http/message-factory: ^1.0
- phpunit/phpunit: ^5.7
This package is auto-updated.
Last update: 2024-08-25 07:41:17 UTC
README
安装
通过Composer
$ composer require friendsofapi/boilerplate
用法
$apiClient = new ApiClient(); $total = $apiClient->stats()->total(); echo $total->getCount(); // 22;
示例
此仓库包含一个针对FakeTwitter的示例API客户端。FakeTwitter的API有以下端点。
开发
API通常分为类别,称为资源。在你的实现中,你也应该反映这些类别,例如通过在Api/
中有它们自己的类。让我们以我们的情况中的Api/Stats
为例。任何调用的响应应该是一个位于Model/Stats/X
中的对象,例如Model/Stats/Total
。
注水器
终端用户选择要使用的注水器。默认注水器应返回领域对象。
请求构建器
请求构建器在必要时创建一个PSR-7请求,并使用多部分流。如果API不需要多部分流,您应删除RequestBuilder
并替换为RequestFactory
。
领域对象作为参数
如果API要求特定端点有大量参数,则可能会诱使您创建一个领域对象并将其作为参数传递给该端点。
public function create(string $username, Tweet $model) { // send the Tweet to Fake Twitter API // ... } $model = new Tweet(); $model->setMessage('foobar'); $model->addHashTag('stuff'); $model->addHashTag('test'); $model->setLocation('Stockhom/Sweden'); // ... $api->create('foobar', $model);
然而,此方法不受欢迎,因为创建的推文对象是不必要的开销。它也可能与应用程序开发者的推文对象冲突。此外,请求通常没有与响应相同的参数,因此在大多数情况下无法使用相同的对象进行两者。您不应强迫用户使用您的推文对象,而应使用数组传递参数到请求。
public function create(string $username, array $param) { // send the Tweet to Fake Twitter API // ... } $param['message' => 'foobar']; $param['hashtags' => ['stuff', 'test']]; $param['location' => 'Stockhom/Sweden']; // ... $api->create('foobar', $param);
如果您的参数复杂,您可以为推文提供推文构建器。由于它是构建器,因此流畅接口在这里可能是一个好主意。但请注意,流畅接口是邪恶的。
public function create(string $username, array $param) { // send the Tweet to Fake Twitter API // ... } $builder = (new TweetBuilder()) ->setMessage('foobar'); ->addHashTag('stuff'); ->addHashTag('test'); ->setLocation('Stockhom/Sweden') ; // ... $api->create('foobar', $builder->build());
许可证
MIT许可证(MIT)。请参阅许可证文件以获取更多信息。