umber / http
一系列辅助 HTTP 类和实现。
Requires
- php: >=7.1
- ext-json: *
Requires (Dev)
- mmoreram/php-formatter: ^1.3.2
- phpstan/phpstan: ^0.10
- phpstan/phpstan-strict-rules: ^0.10
- phpunit/phpunit: ^7.0
- symfony/config: ^4.0
- symfony/dependency-injection: ^4.0
- symfony/http-kernel: ^4.0
- symfony/yaml: ^4.0
- umber/coding-standard: 4.0.x-dev
Suggests
- umber/database: For paginated responses
- umber/reducer: For reducing data structures for responses
This package is auto-updated.
Last update: 2021-06-02 23:01:52 UTC
README
一系列围绕构建 HTTP 响应的轻量级抽象。
主分支 | 开发分支 |
---|---|
安装
可以通过 composer 通过 Packagist 安装此软件包
composer require umber/http
请将版本锁定为 2.x
,因为 1.x
版本已不再支持。
使用方法
HTTP 响应由 HttpResponseInterface
的实现表示。这些类实现了 HTTP 响应的基本概念,可以用来编译一个有效的响应以供使用,或者可以转换为您选择的框架。
以下类是其核心
Umber\Http\Header\HttpHeaderInterface
Umber\Http\Response\HttResponseInterface
这些类的基实现存在
Umber\Http\Header\HttpHeader
Umber\Http\Response\HttpResponse
Umber\Http\Response\Type\JsonHttpResponse
目前该软件包支持的唯一格式是 json
。这不是设计限制,而是因为该软件包最初是针对 API 设计的。对于处理 json
,以下类可用
Umber\Http\Factory\Type\JsonHttpResponseFactoryInterface
Umber\Http\Factory\Type\JsonHttpResponseFactory
Umber\Http\Factory\Type\JsonHttpResponseGenerator
Umber\Http\Response\Type\JsonHttpResponse
还实现了以下 API 概念的抽象
序列化
分页
序列化
对于在 API 上下文中使用的请求,您可能需要调用序列化器。此软件包不提供序列化实现,但提供了一个与您选择的任何实现交互的抽象。
提供了一个定制的 HttpResponseInterface
用于序列化
Umber\Http\Serializer\Response\SerializerHttpResponse
此响应需要一个 HttpResponseSerializerInterface
实例以及任何序列化组。提供给响应的数据是要序列化的原始数据。当使用响应获取主体时,它将在该点序列化数据。
注意,当使用带有 HttpResponseSerializerInterface
的 JsonHttpResponseGenerator
时,它将自动为您构造这些 SerializerHttpResponse
类。
序列化是即时完成的,因此不会在您的控制器中表现为性能损耗。这样做是为了使响应可以被拦截和更改,而不会浪费计算资源在序列化不需要的数据上。
分页
对于在 API 上下文中使用的请求,您可能需要调用分页器。此软件包不提供分页实现,但提供了一个与您选择的任何实现交互的抽象。
HttpResponseInterface
不应接受分页器作为其数据。但是,PaginatiorAwareHttpResponseInterface
会。
因此,以下响应是可用的(并应作为添加其他类型的示例使用)
Umber\Http\Response\Type\JsonPaginatorHttpResponse
支持分页器的响应应使用PagiantorResponseHelper
,并遵循JsonPaginatorHttpResponse
的示例。当调用分页器时,这些响应将初始化4个新头信息。
分页-每页结果数
分页-结果总数
分页-结果总数
分页-页数总数
当将响应提供给所选的*Factory
时,应自动构建分页器感知的响应。由于*Generator
通常使用*Factory
,因此此类也接受分页器。例如,向JsonHttpResponseFactory
(或JsonHttpResponseGenerator
)提供分页器将返回一个JsonPaginatorHttpResponse
。
框架
目前我有一个用于Symfony的包,该包将所有类定义为服务。控制器可以返回HttpResponseInterface
的实例,并且它们将被转换为Symfony的Request
对象。
只需使用以下包
Umber\Http\Framewor\Symfony\UmberHttpBundle
配置是可选的,但为了定义序列化实现,请使用以下方法提供要使用的服务的链接。
umber_http: serializer: 'service.definition.reference.here'