wizards / rest-api
一套帮助您创建美观REST API的服务
0.9.0
2021-01-17 22:08 UTC
Requires
- php: >=7.3
- league/fractal: ^0.19.2
- psr/http-message: ^1.0
- symfony/options-resolver: ^4.1|^5.0
Requires (Dev)
- doctrine/annotations: ^1.7
- doctrine/common: ^2.9
- doctrine/orm: ^2.6
- illuminate/contracts: ^5.6
- nyholm/psr7: ^1.1
- pagerfanta/pagerfanta: ^2.0
- phpmd/phpmd: ^2.6
- phpstan/phpstan: ^0.10.3
- phpunit/phpunit: ^7.3
- squizlabs/php_codesniffer: ^3.4
- symfony/phpunit-bridge: ^4.2
- symfony/psr-http-message-bridge: ^1.1
- symfony/routing: ^4.1|^5.0
- symfony/var-dumper: ^4.2
Suggests
- doctrine/common: ^2.9
- doctrine/orm: ^2.6
- pagerfanta/pagerfanta: ^2.0
- symfony/routing: ^4.1
This package is auto-updated.
Last update: 2024-09-18 06:00:52 UTC
README
一个基于 fractal 的无框架PHP库,帮助您构建美观的REST API。
目标
主要目标是提供一个易于使用且功能强大的REST API库,能够无缝集成到现代框架中。
该范式的阅读方式如下
- 一个方法将请求一个给定的资源(通常是一个控制器),发送一个 http 请求,我们将它 解析 以找到标准化的参数。资源是一个数据对象,您可以从中获取数据存储 - 作为集合或条目。这些资源可以有关联关系,可以进行筛选,可以修改,...
- 该库将根据给定的 对象管理器(类似于orm,odm)和请求获取资源
- 然后根据提供的 对象读取器(有多种配置资源的方式,例如doctrine注释,配置文件等)将数据转换为标准化的资源
- 然后使用适当的 转换器 将找到的资源发送到fractal以进行序列化到指定的输出格式。
安装
composer require wizards/rest-api
用法
该库的约定基于 jsonapi。
查询参数
RestQueryParser 预期这些查询参数
-
集合
排序
name
按升序名称排序-name
按降序名称排序- 示例:
?sort=-date
filter
通过值筛选资源。- 多个筛选值应以逗号分隔提供。
- 示例:
?filter[name]=dupont,dupond&filter[surname]=thomas
filteroperator
- 更改默认筛选操作符从
=
到其他。 - 可用操作符:
<
,>
,<=
,>=
,!=
,in
。 - 示例:
?filter[age]=18&filteroperator[age]=>
- 更改默认筛选操作符从
include
包括关联数据。- 示例:
/books?include=author,editor
- 示例:
limit
:每页要查看的结果数量。page
:页码。从1开始。
-
单个资源
include
包括关联数据。示例:/books/1?include=author,editor
示例
纯PHP
<?php namespace App\Controller; use Psr\Http\Message\ServerRequestInterface; use WizardsRest\ObjectManager\ArrayObjectManager; use WizardsRest\CollectionManager; use WizardsRest\Provider; use WizardsRest\Serializer; use WizardsRest\ObjectReader\ArrayReader; use WizardsRest\Paginator\ArrayPagerfantaPaginator; use Symfony\Component\Routing\RouterInterface; use WizardsRest\Transformer\ArrayTransformer; Class BookController { private $source = [ ['name' => 'Book 1', 'author' => 'Author 1', 'editor' => 'Editor 1'], ['name' => 'Book 2', 'author' => 'Author 2', 'editor' => 'Editor 2'], ]; // Books controller. Somehow, this is called public function getBooks(RouterInterface $router, ServerRequestInterface $request) { // Fetch $objectManager = new ArrayObjectManager(); $paginator = new ArrayPagerfantaPaginator($router); $collectionManager = new CollectionManager($paginator, $objectManager); $collection = $collectionManager->getPaginatedCollection($this->source, $request); // Transform $fractalManager = new \League\Fractal\Manager(); $reader = new ArrayReader(); $provider = new Provider(new ArrayTransformer(), $fractalManager, $reader); $resource = $provider->transform($collection, $request, null, 'books'); // Serialize $serializer = new Serializer($fractalManager, 'https://mysite.com'); return $serializer->serialize($resource, Serializer::SPEC_DATA_ARRAY, Serializer::FORMAT_ARRAY); } }
Symfony
请参阅 Wizards Technologies' REST API Bundle 上的文档
Laravel
我们正在积极寻找laravel开发人员来支持它!
未来计划
- 添加更多测试
- 添加稀疏字段集功能
- 添加如like或between等高级筛选操作符
- 优化从源获取数据的方式。
- 考虑序列化组。