超市/ sainsburys-http-service
Requires
- php: >=7.0.0
- container-interop/container-interop: ~1.1.0
- psr/http-message: 1.0.0
- psr/log: 1.0.0
- samburns/config-file-parser: ^1.0
- shrikeh/teapot: ^1.0
- slim/slim: ^3.0.0
- ultra-lite/container: ^2.0
- zendframework/zend-diactoros: ^1.0
Requires (Dev)
- behat/behat: ~3.1.0rc1
- guzzlehttp/guzzle: ^6.1.1
- phpspec/phpspec: ~2.4.1
- phpunit/phpunit: ^5.1.3
This package is not auto-updated.
Last update: 2024-09-14 17:48:20 UTC
README
超市 HTTP 服务框架
PHP 微框架,用于构建小型 REST 或 HTTP RPC 服务。由 J Sainsbury plc 构建,并开源。
该框架基本上是 PHP Slim 微框架的包装器,但仅与更结构化的应用程序一起使用。
它依赖于 Slim 3。
1.x.x 版本是 LTS 版本,支持 PHP 5.5。2.0.0 版本及以后需要 PHP 7。
基本用法
请参阅示例应用程序,了解如何使用它。示例应用程序也被自动化测试所使用,因此将保持最新状态。
核心概念
标准兼容性
该框架旨在遵守以下标准:用于可互换日志记录器的 PSR-3 标准,用于可互换 HTTP 请求和响应对象的 PSR-7 标准,用于可互换依赖注入容器的 Container-Interop 标准,以及其发布号中的 语义版本。
控制器和依赖注入
控制器应如下所示
<?php namespace MyNamespace; use Psr\Http\Message\ServerRequestInterface; use Psr\Http\Message\ResponseInterface; class EmptyController { public function emptyAction(ServerRequestInterface $request, ResponseInterface $response) { return $response; } }
控制器必须是对象,而不是闭包。不提供抽象控制器 - 控制器应该是独立的对象,没有继承。控制器将从依赖注入容器中检索。
您的路由配置将把路由模式映射到控制器的服务 ID。提供包含您的控制器的 Container Interop 容器。提供的示例索引文件中使用了一个符合标准的 Pimple 3 包装器。
请参阅示例路由文件和典型的依赖注入配置以获得清晰的示例。您的路由配置文件可以是 .php 'return array' 文件,JSON 文件,YAML 文件或 .ini 文件。
控制器操作 - 可接受的返回类型
控制器操作必须返回一个 PSR-7 HTTP 响应对象。参数化响应是一个 Zend Diactoros JsonResponse
。
中间件
要在框架中使用中间件,请调用 Sainsburys\HttpService\Application::middlewareManager()
。您可以将自己的 BeforeMiddleware
和 AfterMiddleware
接口实现添加到列表中。它们将相应地运行。
异常处理
从控制器抛出的未捕获异常将导致包含异常详细信息编码为 JSON 的响应。通常状态码为 500。如果异常实现了 Sainsburys\HttpService\Components\ErrorHandling\Exceptions\ExceptionWithHttpStatus
,则将使用异常上的状态码。
如果您希望实现自己的错误处理器,例如在生产环境中不希望在响应中显示堆栈跟踪,请在您的 index.php
文件中调用 Sainsburys\HttpService\Application::useThisErrorController()
,并为其提供一个不同的错误控制器。如果希望使用输出更简洁的错误控制器,可以提供 Sainsburys\HttpService\Components\ErrorHandling\ErrorController\ProductionExternalisedErrorController
。
错误日志记录
您的错误控制器将接收一个 Psr\Log\LoggerInterface
,默认情况下将是一个 Psr\Log\NullLogger
。这不会做任何事情。要进行错误日志记录,请调用 Application::setLogger()
。您需要使用 PSR-3 兼容的记录器。我们建议您将您的记录对象传递到其他需要记录的控制器或其他类中。您可以在配置控制器依赖关系时,在依赖注入容器中进行此操作。如果您在寻找记录库的灵感,Monolog 记录工具 可能是一个不错的选择。
安装
使用 Composer。
"require": { "sainsburys/sainsburys-http-service": "*" }
根据您的项目 composer 设置,您可能还需要 require "slim/slim": "^3.0.0-RC3"
。这将很快更改。
测试
检出项目,运行 Composer,然后输入 ./bin/test
以运行所有测试。阅读 该 shell 脚本 以获取具体的测试命令。
- PHPSpec 用于单元测试;
- Behat 用于提供服务级别的行为测试,以及使用该框架的示例应用程序,对应用程序对象进行内联测试;
- PHPUnit 用于少数几个服务级别测试
- 一些 Behat 测试还将与 Web 服务器一起运行,使用 Guzzle 提供真实的 HTTP 请求。