eoneopay / apiformats
Requires
- php: >=7.1
- ext-json: *
- doctrine/inflector: ^1.3
- eoneopay/utils: ^0.2.0
- league/fractal: ^0.17.0
- symfony/psr-http-message-bridge: ^1.0
- woohoolabs/yang: ^1.4
- zendframework/zend-diactoros: ^2.1
Requires (Dev)
- eoneopay/standards: dev-master
- illuminate/http: ^5.8
- illuminate/support: ^5.8
- laravel/lumen-framework: ^5.8
- phpmd/phpmd: ^2.6
- phpstan/phpstan: ^0.11.0
- phpstan/phpstan-phpunit: ^0.11.0
- phpstan/phpstan-strict-rules: ^0.11.0
- phpunit/phpunit: ^7.0
- roave/security-advisories: dev-master
- sebastian/phpcpd: ^4.0
- squizlabs/php_codesniffer: ^3.0
- vlucas/phpdotenv: ^3.0
Suggests
- illuminate/http: To use the Laravel implementation
- illuminate/support: To use Laravel service provider
Provides
This package is auto-updated.
Last update: 2019-11-10 23:49:57 UTC
README
安装
使用 Composer 在项目中安装此软件包
composer require eoneopay/apiformats
格式
默认情况下,该软件包处理 JSON (application/json) 和 XML (application/xml, text/xml) 格式。如果您想处理不同的格式或想实现自己的 JSON/XML 编码逻辑,您只需要创建一个实现 \EoneoPay\ApiFormats\Interfaces\RequestEncoderInterface
的编码器,并告诉软件包使用它,具体使用哪些Mime类型请参考配置部分。
集成
Laravel
要将软件包集成到您的 Laravel 或 Lumen,您需要注册以下服务提供者和中间件
- 服务提供者:
\EoneoPay\ApiFormats\Bridge\Laravel\Providers\ApiFormatsServiceProvider
- 中间件:
\EoneoPay\ApiFormats\Bridge\Laravel\Middlewares\ApiFormatsMiddleware
就是这样!您的应用程序现在可以轻松地以多种格式接收请求和生成响应。
格式化的API响应
如果您想自定义生成的响应(如状态码或头信息)而不处理主体编码,该软件包提供了可以从您的控制器/中间件返回的 \EoneoPay\ApiFormats\Bridge\Laravel\Responses\FormattedApiResponse
对象。该 FormattedApiResponse
通过构造函数接受三个参数,如下所示
- $content (mixed): 可以转换为数组的数组或对象
- $statusCode (int): 响应的状态码,默认为 200
- $headers (array): 响应的头信息,默认为空数组
配置
该软件包的核心理念是通过数组将编码器映射到可以处理的MIME类型列表
$formats = [ <RequestEncoderInterface> => [<mime_type>, <mime_type>, ...] ];
每个MIME类型可以是精确的名称,如 application/json
,或者是一个 正则表达式,用于匹配多个MIME类型,如 application/vnd.eoneopay.v[0-9]+\+json
。
Laravel
要配置应用程序中支持的格式,创建一个包含 formats
数组的 api-formats.php
配置文件,其中使用编码器类作为键,关联的MIME类型数组作为值
// config/api-formats.php return [ 'formats' => [ JsonRequestEncoder::class => ['application/json'], XmlRequestEncoder::class => ['(application|text)/xml'], YourCustomerEncoder::class => ['you-custom-mime-type'] ] ];