PSR-7 HTTP 消息接口规范 此文档描述了 RFC 7230 和RFC 7231 HTTP 消息传递的接口,还有 RFC 3986 里对 HTTP 消息的 URIs 使用。
先了解下PSR-7 HTTP 消息是 Web 技术发展的基础。浏览器或 HTTP 客户端如 curl 生成发送 HTTP 请求消息到 Web 服务器,Web 服务器响应 HTTP 请求。 extension-recommended-interventionimage-image-processing 官方文档:http://image.intervention.io/getting_started/introduction 下面主要说明一下PSR 使用下面的代码可以生成一个 PSR-7 stream as instance of GuzzleHttp\Psr7\Stream. // encode png image as jpg stream ,可以调用 $code = $stream->getContents(); file_put_contents('a.png',$code); 这个getContents()方法就是Guzzle实现的PSR
3 PSR-3, PSR-7 在自动加载和编码标准之后,我们最终可以将PSR与php代码关联起来。这就需要通过PSR-3和PSR-7。 PSR-7: http消息对于web应用程序是必不可少的。用户执行的每个操作都是http请求和http响应的组合。PSR-7是最新认可的标准。它提供了关于http消息及其组成元素的抽象。 它将对实现http消息细节的项目产生巨大的影响,因为http是一个相当复杂的主题,而且大多数供应商都有自己的实现,因此供应商要适应PSR-7需要进行大量的重构。 作为http消息的用户,由于PSR-7,我们现在可以普遍地处理http消息。与PSR-3类似,PSR-7使我们的开发更容易构建可重用的代码库。 -7: http://www.php-fig.org/psr/psr-7/
PSR-7 标准支持 Guzzle 完全兼容 PSR-7 标准,使用统一的请求、响应和流接口。这意味着 Guzzle 可以与其他遵循 PSR-7 标准的库无缝集成,增强了代码的互操作性。 例如,你可以使用 Guzzle 的请求对象与任何 PSR-7 兼容的库进行交互,而无需担心底层实现。 4. 以下是版本概览: 版本 状态 PHP 版本 PSR-7 支持 3.x EOL >=5.3.3, <7.0 否 4.x EOL >=5.4, <7.0 否 5.x EOL >=5.4, <7.4 否 6. 它的 PSR-7 和 PSR-18 兼容性、环境无关的设计以及中间件系统,让开发者能够轻松应对各种复杂场景。
3.3 请求 请求对象(Request) 是完全基于 PSR-7 标准实现的,由 hyperf/http-message 组件提供实现支持。 注意 PSR-7 标准为 请求(Request) 进行了 immutable 机制 的设计,所有以 with 开头的方法的返回值都是一个新对象,不会修改原对象的值 1. 引入请求的对象 <?
如何实现 实现这一理念依赖于 PHP 社区的 PSR 标准和相关工具包,特别是 PSR-7、PSR-17、PSR-18 和 php-http/discovery。 1. PSR 标准 • PSR-7:HTTP 消息接口 定义了标准化的请求(RequestInterface)和响应(ResponseInterface)接口,为不同客户端提供统一的交互方式。 • PSR-17:HTTP 工厂接口 为创建 PSR-7 消息对象提供工厂接口(如 RequestFactoryInterface、StreamFactoryInterface),简化请求构造。
注意 PSR-7 标准为 响应(Response) 进行了 immutable 机制 的设计,所有以 with 开头的方法的返回值都是一个新对象,不会修改原对象的值 1. 引入请求的对象 <?
course, all user input data can be conveniently located in a single object (Symfony/HttpFoundation or PSR For our specific needs, we simply converted the Golang net/HTTP request into the PSR-7(https://www.php-fig.org /psr/psr-7/meta/) format which made it compatible with most PHP frameworks on the market. Since PSR-7 is stated as immutable (some engineers may point out that it’s not technically immutable)
使用PSR-7接口来请求、响应、分流,允许你使用其他兼容的PSR-7类库与Guzzle共同开发。
使用PSR-7接口来请求、响应、分流,允许你使用其他兼容的PSR-7类库与Guzzle共同开发。
当然,所有用户输入数据都可以方便地放在一个对象(Symfony/HttpFoundation 或 PSR-7)。框架用起来是那么得心应手! 但任何事都有两面性。 想要满足此需求,我们只需将 Golang net / HTTP 请求转换为PSR-7 (https://www.php-fig.org/psr/psr-7/meta/)格式,使其与大多数市场上的 PHP 由于 PSR-7 格式是不可变的(一些工程师可能会指出它在技术上不可变),它迫使开发人员编写不再将请求视为全局实体的应用程序。这完全符合长期运行 PHP 进程的想法。
使用 PSR-7 接口来请求、响应、分流,允许你使用其他兼容的 PSR-7 类库与 Guzzle 共同开发。
它利用PSR-7接口处理请求,响应和流。这使您可以在Guzzle中使用其他PSR-7兼容的库。它可以抽象出底层的HTTP传输,使您能够编写环境并传输不可知代码。
符合PSR-7规范:消息请求和响应都符合PSR-7规范,这使得它能够与遵循该规范的其他PHP组件和库无缝集成。
当然,所有用户输入数据都可以方便地放在一个对象( Symfony/HttpFoundation 或 PSR-7 )。框架用起来是那么得心应手! 但任何事都有两面性。 想要满足此需求,我们只需将 Golang net / HTTP 请求转换为 PSR-7 (https://www.php-fig.org/psr/psr-7/meta/)格式,使其与大多数市场上的 PHP 由于 PSR-7 格式是不可变的(一些工程师可能会指出它在技术上不可变),它迫使开发人员编写不再将请求视为全局实体的应用程序。这完全符合长期运行 PHP 进程的想法。最终实现看起来流程如下: ?
内置高性能网络服务器(Http/Websocket/RPC) 灵活的组件化 灵活的注解功能 多样化命令终端(Console) 强大的切面编程(AOP) 完善的容器管理、依赖注入 (DI) 灵活的事件机制 基于 PSR
composer require relay/relay:2.x@dev 而且根据 PSR-15 的中间件标准要求实现可传递兼容 PSR-7 的 HTTP 消息(http://www.php-fig.org /psr/psr-7/), 我们使用 Zend Diactoros(https://zendframework.github.io/zend-diactoros/) 作为 PSR-7 的实现。 除了 Request 的通用接口, PSR-7 同样也定义了另外一种 HTTP 消息结构,以辅助我们在应用运行周期的后半部分之用: Response。 我们已经用来封装请求的 Zend Diactoros 包同样也内置了发送 PSR-7 响应的发射器。 值得注意的是,为了举例,我们只是对发射器的使用小试牛刀。 它兼容 PSR-4, PSR-7,PSR-11 以及 PSR-15,这意味着你可以使用自己选择的其他任一供应商对这些标准的实现,来构建自己的 HTTP 消息, DI 容器,中间件,还有中间件调度器。
另外,一些链接提供者对象,如 PSR-7 响应对象,被设计为不可变的。这意味着在就地添加链接的方法将是不兼容的。 因此,允许它们去演进,与 PSR-7 值对象一样是个有用的选项。为了这个缘故,一个额外的 EvolvableLinkInterface 类被包含进来,它提供了只需一次更改而生成新对象实例的方法。 相同的模式被使用在 PSR-7 中,归功于 PHP 的 copy-on-write 机制,使 CPU 和内存依然高效。 然而,模板没有可演进的方法,由于一个链接的模板值是基于专门的 href 值。
符合PSR-7规范:消息请求和响应都符合PSR-7规范,这使得它能够与遵循该规范的其他PHP组件和库无缝集成。
HTTP 请求 PSR-7 标准消息接口 由于 Spiral 是完全遵循 PSR-7 消息接口规范的,因此我们在控制器方法(重要提示:不允许在控制器构造函数中注入 ServerRequestInterface // POST|PUT 等请求的请求体 $body = $request->getParsedBody(); // ... } } 更多的方法请参阅 PSR