hkulekci / expressive-api-component
API 组件
dev-master
2018-10-31 14:40 UTC
Requires
- php: ^7.2
- fig/http-message-util: ^1.1
- psr/http-message: ^1.0
- psr/http-server-middleware: ^1.0
- roave/security-advisories: dev-master
- zendframework/zend-config-aggregator: ^0.2.0
- zendframework/zend-expressive: ^3.0
- zendframework/zend-filter: ^2.7
- zendframework/zend-inputfilter: ^2.7
- zendframework/zend-json: ^3.0
Requires (Dev)
- phpunit/phpunit: ^5.7
This package is not auto-updated.
Last update: 2024-09-15 05:23:40 UTC
README
这个库解决特定问题。不是 API 的通用解决方案。有辅助类、特性和过滤器。
使用 composer 安装
composer require hkulekci/expressive-api-component
将中间件添加到您的配置文件中
'middleware_pipeline' => [
'always' => [
'middleware' => [
.....
],
'priority' => 10000,
],
'routing' => [
'middleware' => [
Zend\Expressive\Router\Middleware\RouteMiddleware::class,
Zend\Expressive\Helper\UrlHelperMiddleware::class,
....
ApiComponent\Helper\ApiMiddleware::class,
ApiComponent\RequestDataParser::class,
....
Zend\Expressive\Router\Middleware\DispatchMiddleware::class,
\Zend\Stratigility\Middleware\NotFoundHandler::class,
],
'priority' => 1,
],
'notFound' => [
'middleware' => 'Application\NotFound',
'priority' => -1000,
]
],
然后使用 ApiComponent\AbstractResource
类扩展您的 API 端点资源,如下所示
<?php
/**
* @author Haydar KULEKCI <haydarkulekci@gmail.com>
*/
namespace CoreApi\Common;
use ApiComponent\AbstractResource;
use ApiComponent\Helper\ApiResponse;
use ApiComponent\Helper\ApiResponseInterface;
class PingAction extends AbstractResource
{
/**
* Ping Service
*
* @SWG\Get(
* path="/ping",
* tags={"common"},
* @SWG\Response(response="200", description="Ping Service"),
* @SWG\Response(response="500", description="Internal Server Error"),
* )
*
* @param array $data
*
* @return ApiResponseInterface
*/
protected function fetchAll(array $data = []): ApiResponseInterface
{
return new ApiResponse(['service' => $data['service']]);
}
}
为了过滤您的输入,创建一个路由中间件并扩展 ApiComponent\AbstractInputFilter
类,如下所示
<?php
/**
* @author Haydar KULEKCI <haydarkulekci@gmail.com>
*/
namespace CoreApi\Common;
use ApiComponent\AbstractInputFilter;
class PingActionInputFilter extends AbstractInputFilter
{
protected function inputFilterSpecsForFetchAllParameters(): array
{
return [
$this->string('service', true, ['min' => 3, 'max' => 255]),
];
}
}
现在,您的路由配置应该如下所示
[
'name' => 'coreapi.common.ping',
'path' => '/ping',
'middleware' => [
\CoreApi\Common\PingActionInputFilter::class,
\CoreApi\Common\PingAction::class,
],
'allowed_methods' => ['GET'],
],