{"id":19183991,"url":"https://github.com/sunrise-php/http-router-openapi","last_synced_at":"2025-04-20T04:34:29.982Z","repository":{"id":46301006,"uuid":"230237196","full_name":"sunrise-php/http-router-openapi","owner":"sunrise-php","description":"⚠️ OpenAPI (Swagger) support is now integrated in the router from version 3.","archived":true,"fork":false,"pushed_at":"2025-02-08T10:00:24.000Z","size":175,"stargazers_count":4,"open_issues_count":14,"forks_count":1,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-04-17T05:00:05.585Z","etag":null,"topics":["annotations","laravel","lumen","openapi","php","php-library","php7","php8","router","sunrise-php","swagger","symfony"],"latest_commit_sha":null,"homepage":"","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/sunrise-php.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-12-26T09:41:49.000Z","updated_at":"2025-02-10T05:38:37.000Z","dependencies_parsed_at":"2023-01-23T09:15:24.459Z","dependency_job_id":"4d5bb43a-e9e3-44f1-aaaa-dc99d37ed4ff","html_url":"https://github.com/sunrise-php/http-router-openapi","commit_stats":{"total_commits":115,"total_committers":4,"mean_commits":28.75,"dds":"0.10434782608695647","last_synced_commit":"73e08ffc7b49e76bb7f20f4551699135bf1d7611"},"previous_names":[],"tags_count":19,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sunrise-php%2Fhttp-router-openapi","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sunrise-php%2Fhttp-router-openapi/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sunrise-php%2Fhttp-router-openapi/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sunrise-php%2Fhttp-router-openapi/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sunrise-php","download_url":"https://codeload.github.com/sunrise-php/http-router-openapi/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":249850092,"owners_count":21334424,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["annotations","laravel","lumen","openapi","php","php-library","php7","php8","router","sunrise-php","swagger","symfony"],"created_at":"2024-11-09T11:05:46.128Z","updated_at":"2025-04-20T04:34:29.645Z","avatar_url":"https://github.com/sunrise-php.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"## OpenAPI (Swagger) Specification Support for Sunrise Router\n\n[![Build Status](https://circleci.com/gh/sunrise-php/http-router-openapi.svg?style=shield)](https://circleci.com/gh/sunrise-php/http-router-openapi)\n[![Code Coverage](https://scrutinizer-ci.com/g/sunrise-php/http-router-openapi/badges/coverage.png?b=master)](https://scrutinizer-ci.com/g/sunrise-php/http-router-openapi/?branch=master)\n[![Scrutinizer Code Quality](https://scrutinizer-ci.com/g/sunrise-php/http-router-openapi/badges/quality-score.png?b=master)](https://scrutinizer-ci.com/g/sunrise-php/http-router-openapi/?branch=master)\n[![Total Downloads](https://poser.pugx.org/sunrise/http-router-openapi/downloads?format=flat)](https://packagist.org/packages/sunrise/http-router-openapi)\n[![Latest Stable Version](https://poser.pugx.org/sunrise/http-router-openapi/v/stable?format=flat)](https://packagist.org/packages/sunrise/http-router-openapi)\n[![License](https://poser.pugx.org/sunrise/http-router-openapi/license?format=flat)](https://packagist.org/packages/sunrise/http-router-openapi)\n\n---\n\n## Important to understanding\n\n* [OpenAPI Specification](https://github.com/OAI/OpenAPI-Specification/blob/6ba1577240b79c9f613c2ea8d745c6ef6c832e50/versions/3.0.2.md)\n\n## Installation\n\n```bash\ncomposer require 'sunrise/http-router-openapi:^2.1'\n```\n\n## QuickStart\n\n```php\nuse Psr\\SimpleCache\\CacheInterface;\nuse Sunrise\\Http\\Router\\OpenApi\\Object\\Info;\nuse Sunrise\\Http\\Router\\OpenApi\\OpenApi;\nuse Sunrise\\Http\\Router\\OpenApi\\RouteInterface;\n\n$openapi = new OpenApi(new Info('Acme', '1.0.0'));\n\n// Passing PSR-16 cache to the openapi object:\n/** @var CacheInterface $cache */\n$openapi-\u003esetCache($cache);\n\n// Passing all routes to the openapi object:\n/** @var RouteInterface[] $routes */\n$openapi-\u003eaddRoute(...$routes);\n\n// When using Sunrise Router:\n/** @var \\Sunrise\\Http\\Router\\Router $router */\n$openapi-\u003eaddRoute(...$router-\u003egetRoutes());\n```\n\n#### Building OpenAPI Document\n\n```php\n// Converting the openapi object to JSON document:\n$openapi-\u003etoJson();\n// Converting the openapi object to YAML document:\n$openapi-\u003etoYaml();\n// Converting the openapi object to an array:\n$openapi-\u003etoArray();\n```\n\n#### Building JSON Schemas\n\n\u003e Converts an operation part to [JSON Schema](https://json-schema.org).\n\n```php\n$openapi-\u003egetRequestCookieJsonSchema();\n$openapi-\u003egetRequestHeaderJsonSchema();\n$openapi-\u003egetRequestQueryJsonSchema();\n$openapi-\u003egetRequestBodyJsonSchema();\n$openapi-\u003egetResponseBodyJsonSchema();\n```\n\n## PSR-15 Middlewares\n\n#### RequestValidationMiddleware\n\n\u003e Validates a request using a route description.\n\n```php\nuse Sunrise\\Http\\Router\\OpenApi\\Middleware\\RequestValidationMiddleware;\nuse Sunrise\\Http\\Router\\OpenApi\\OpenApi;\n\n/** @var OpenApi $openapi */\n$middleware = new RequestValidationMiddleware($openapi);\n```\n\n## Symfony Commands\n\n#### GenerateOpenapiDocumentCommand\n\n\u003e Generates OpenAPI document.\n\n```php\nuse Sunrise\\Http\\Router\\OpenApi\\Command\\GenerateOpenapiDocumentCommand;\nuse Sunrise\\Http\\Router\\OpenApi\\OpenApi;\n\n/** @var OpenApi $openapi */\n$command = new GenerateOpenapiDocumentCommand($openapi);\n```\n\n```bash\nphp bin/app router:generate-openapi-document --help\n```\n\n#### GenerateJsonSchemaCommand\n\n\u003e Generates an operation part to [JSON Schema](https://json-schema.org).\n\n```php\nuse Sunrise\\Http\\Router\\OpenApi\\Command\\GenerateJsonSchemaCommand;\nuse Sunrise\\Http\\Router\\OpenApi\\OpenApi;\n\n/** @var OpenApi $openapi */\n$command = new GenerateJsonSchemaCommand($openapi);\n```\n\n```bash\nphp bin/app router:generate-json-schema --help\n```\n\n## Test Kit\n\n#### assertResponseBodyMatchesDescription\n\n\u003e The assertion fails if the given response body doesn't match a description of the operation identified by the given ID.\n\n```php\nuse PHPUnit\\Framework\\TestCase;\nuse Psr\\Http\\Message\\ResponseInterface;\nuse Sunrise\\Http\\Router\\OpenApi\\Test\\OpenapiTestKit;\n\nclass SomeTest extends TestCase\n{\n    use OpenapiTestKit;\n\n    public function testResponseBodyMatchesDescription() : void\n    {\n        // some logic to run a route...\n\n        /** @var ResponseInterface $response */\n        $this-\u003eassertResponseBodyMatchesDescription('route.name', $response);\n    }\n}\n```\n\n## Simple Route Description\n\n```php\nclass SomeController\n{\n\n    /**\n     * @OpenApi\\Operation(\n     *   requestBody=@OpenApi\\RequestBody(\n     *     content={\n     *       \"application/json\": @OpenApi\\MediaType(\n     *         schema=@OpenApi\\Schema(\n     *           type=\"object\",\n     *           properties={\n     *             \"foo\": @OpenApi\\Schema(\n     *               type=\"string\",\n     *             ),\n     *           },\n     *         ),\n     *       ),\n     *     },\n     *   ),\n     *   responses={\n     *     200: @OpenApi\\Response(\n     *       description=\"Ok\",\n     *     ),\n     *   },\n     * )\n     */\n    public function someAction()\n    {\n    }\n}\n```\n\n---\n\nLook for more examples here: [Some App](https://github.com/sunrise-php/http-router-openapi/tree/be27acedfc1f100f8efdcdd9da9430714890baa3/tests/fixtures/SomeApp)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsunrise-php%2Fhttp-router-openapi","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsunrise-php%2Fhttp-router-openapi","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsunrise-php%2Fhttp-router-openapi/lists"}