eoneopay / api-formats
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-09-30 05:05:55 UTC
README
安装
使用Composer 在您的项目中安装此包
composer require eoneopay/apiformats
格式
默认情况下,该包处理 JSON (application/json) 和 XML (application/xml, text/xml) 格式。如果您想处理不同的格式或想实现自己的 JSON/XML 编码逻辑,您只需创建一个实现 \EoneoPay\ApiFormats\Interfaces\RequestEncoderInterface
的编码器,并将该包配置为使用它,具体请参考配置部分。
集成
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
为了在您的应用程序中配置支持的格式,创建一个名为 api-formats.php
的配置文件,并使用编码器类作为键,相关MIME类型数组作为值来创建一个 formats
数组。
// config/api-formats.php return [ 'formats' => [ JsonRequestEncoder::class => ['application/json'], XmlRequestEncoder::class => ['(application|text)/xml'], YourCustomerEncoder::class => ['you-custom-mime-type'] ] ];