fitbug / guzzle-swagger-validation-middleware
一个guzzle中间件,用于验证请求和响应是否符合schema中定义的内容
v0.1.0
2016-10-15 13:42 UTC
Requires
- fr3d/swagger-assertions: ^0.6.0
- php-http/message: ^1.3
Requires (Dev)
- phpspec/phpspec: ^3.1
This package is not auto-updated.
Last update: 2024-09-14 19:31:22 UTC
README
一个guzzle中间件,用于验证请求和响应是否符合schema中定义的内容
入门
先决条件
您需要安装
- PHP (最低版本 5.6)
安装
composer require fitbug/guzzle-swagger-validation-middleware
使用
只需将其添加到您使用的guzzle中间件中。
use Fitbug\Guzzle\SwaggerValidation\SwaggerSchemaValidationHandler; use GuzzleHttp\HandlerStack; use Http\Adapter\Guzzle6\Client as GuzzleClientFactory; use Http\Message\MessageFactory\GuzzleMessageFactory; $this->messageFactory = new GuzzleMessageFactory(); $swaggerFile = 'file://'; $swaggerFile .= '/path/to/your/swagger.json'; $this->swaggerValidation = new SwaggerSchemaValidationHandler($swaggerFile); $stack = new HandlerStack(); $stack->setHandler(GuzzleHttp\choose_handler()); $stack->push($this->swaggerValidation); $this->httpClient = GuzzleClientFactory::createWithConfig( [ 'base_uri' => $apiEndpoint, 'handler' => $stack, ] );
您会得到输出,表明请求或响应不符合规范
PHPUnit_Framework_ExpectationFailedException: Failed asserting that 'application/json, application/json' is an allowed media type (application/json). in vendor/phpunit/phpunit/src/Framework/Constraint.php:115
Stack trace:
#0 vendor/phpunit/phpunit/src/Framework/Constraint.php(58): PHPUnit_Framework_Constraint->fail('application/jso...', '')
#1 vendor/phpunit/phpunit/src/Framework/Assert.php(1980): PHPUnit_Framework_Constraint->evaluate('application/jso...', '')
#2 vendor/fr3d/swagger-assertions/src/PhpUnit/AssertsTrait.php(128): PHPUnit_Framework_Assert::assertThat('application/jso...', Object(FR3D\SwaggerAssertions\PhpUnit\MediaTypeConstraint), '')
#3 vendor/fr3d/swagger-assertions/src/PhpUnit/Psr7AssertsTrait.php(89): Fitbug\BackOfficeApi\Features\Support\Guzzle\SwaggerSchemaValidationHandler->assertRequestMediaTypeMatch('application/jso...', Object(FR3D\SwaggerAssertions\SchemaManager), '/v0/company', 'POST', '')
...snip...
#45 vendor/symfony/symfony/src/Symfony/Component/Console/Command/Command.php(256): Behat\Testwork\Cli\Command->execute(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#46 vendor/symfony/symfony/src/Symfony/Component/Console/Application.php(818): Symfony\Component\Console\Command\Command->run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#47 vendor/symfony/symfony/src/Symfony/Component/Console/Application.php(186): Symfony\Component\Console\Application->doRunCommand(Object(Behat\Testwork\Cli\Command), Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#48 vendor/behat/behat/src/Behat/Testwork/Cli/Application.php(121): Symfony\Component\Console\Application->doRun(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#49 vendor/symfony/symfony/src/Symfony/Component/Console/Application.php(117): Behat\Testwork\Cli\Application->doRun(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#50 vendor/behat/behat/bin/behat(32): Symfony\Component\Console\Application->run()
#51 {main}
Next Exception: Failed asserting that 'application/json, application/json' is an allowed media type (application/json).
POST /v0/company HTTP/1.1
User-Agent: GuzzleHttp/6.2.1 curl/7.35.0 PHP/7.0.7
Host: localhost
Accept: application/json
Accept: application/json
Content-Type: application/json
Content-Type: application/json
Authorization: FITBUG-INTERNAL client-id=behat
{"name":"starhealth","description":"some description","contact_email":"some support information"}
HTTP/1.1 500 Internal Server Error
Date: Thu, 08 Sep 2016 10:47:15 GMT
Server: Apache/2.4.10 (Debian)
Vary: Authorization
X-Powered-By: PHP/7.0.10
Set-Cookie: PHPSESSID=93257eb031eb0a7b84e4a2af7fef1495; path=/; HttpOnly
Cache-Control: no-cache
Content-Length: 195
Connection: close
Content-Type: application/json
{
"meta": {
"error": {
"number": 2004,
"message": "Unknown error",
"user_message": "An unknown error has occured"
}
},
"data": {}
}
in features/support/Guzzle/SwaggerSchemaValidationHandler.php:99
Stack trace:
#0 vendor/guzzlehttp/promises/src/Promise.php(203): Fitbug\BackOfficeApi\Features\Support\Guzzle\SwaggerSchemaValidationHandler->Fitbug\BackOfficeApi\Features\Support\Guzzle\{closure}(Object(GuzzleHttp\Psr7\Response))
#1 vendor/guzzlehttp/promises/src/Promise.php(169): GuzzleHttp\Promise\Promise::callHandler(1, Object(GuzzleHttp\Psr7\Response), Array)
#2 vendor/guzzlehttp/promises/src/FulfilledPromise.php(39): GuzzleHttp\Promise\Promise::GuzzleHttp\Promise\{closure}(Object(GuzzleHttp\Psr7\Response))
#3 vendor/guzzlehttp/promises/src/TaskQueue.php(61): GuzzleHttp\Promise\FulfilledPromise::GuzzleHttp\Promise\{closure}()
...snip...
#41 vendor/symfony/symfony/src/Symfony/Component/Console/Application.php(186): Symfony\Component\Console\Application->doRunCommand(Object(Behat\Testwork\Cli\Command), Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#42 vendor/behat/behat/src/Behat/Testwork/Cli/Application.php(121): Symfony\Component\Console\Application->doRun(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#43 vendor/symfony/symfony/src/Symfony/Component/Console/Application.php(117): Behat\Testwork\Cli\Application->doRun(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#44 vendor/behat/behat/bin/behat(32): Symfony\Component\Console\Application->run()
#45 {main}
Next RuntimeException: Invalid exception returned from Guzzle6 in vendor/php-http/guzzle6-adapter/src/Promise.php:65
Stack trace:
#0 vendor/guzzlehttp/promises/src/Promise.php(203): Http\Adapter\Guzzle6\Promise->Http\Adapter\Guzzle6\{closure}(Object(Exception))
#1 vendor/guzzlehttp/promises/src/Promise.php(156): GuzzleHttp\Promise\Promise::callHandler(2, Object(Exception), Array)
#2 vendor/guzzlehttp/promises/src/TaskQueue.php(61): GuzzleHttp\Promise\Promise::GuzzleHttp\Promise\{closure}()
#3 vendor/guzzlehttp/guzzle/src/Handler/CurlMultiHandler.php(96): GuzzleHttp\Promise\TaskQueue->run()
...snip...
#41 vendor/behat/behat/src/Behat/Testwork/Cli/Application.php(121): Symfony\Component\Console\Application->doRun(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#42 vendor/symfony/symfony/src/Symfony/Component/Console/Application.php(117): Behat\Testwork\Cli\Application->doRun(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#43 vendor/behat/behat/bin/behat(32): Symfony\Component\Console\Application->run()
#44 {main}
运行测试
首先检出库,然后运行
composer install
编码风格
我们遵循PSR2,并对所有函数强制执行PHPDocs。要运行测试以检查编码风格违规,
vendor/bin/php-cs-fixer fix -v
单元测试
我们使用PHPSpec进行单元测试。要运行单元测试
vendor/bin/phpspec run
贡献
请阅读CONTRIBUTING.md以获取关于我们行为准则和向我们的提交拉取请求的流程的详细信息。
版本控制
我们使用SemVer进行版本控制。有关可用版本,请参阅此存储库上的标签。
作者
查看参与此项目的贡献者列表。
许可证
本项目采用MIT许可证 - 有关详细信息,请参阅LICENSE.md文件。