calcinai / strut
用于创建和操作Swagger架构的库
v1.0.0
2019-01-14 04:09 UTC
Requires
- ext-json: *
This package is auto-updated.
Last update: 2024-09-14 19:04:13 UTC
README
又一个OpenAPI/Swagger操作库!
此库的代码几乎全部由Gendarme生成。这样做的原因是,所有在规范中描述的用于操作架构所需的信息都可以通过Gendarme生成。
安装
通过composer
composer require calcinai/strut
使用方法
该库的测试案例是OpenAPI petstore。
该库将OpenAPI规范反序列化为本地PHP对象,然后将其重新序列化为原始形式,唯一的区别(有时)是对象属性顺序(这无关紧要)。
加载文档
$schema = json_decode(file_get_contents('http://petstore.swagger.io/v2/swagger.json')); $openapi = \Calcinai\Strut\OpenAPI::create($schema); print_r($swagger);
这将产生(省略)
Calcinai\Strut\OpenAPI Object
(
[data:protected] => Array
(
[openapi] => 3.0
[info] => Calcinai\Strut\Definitions\Info Object
(
[data:protected] => Array
(
[version] => 1.0.0
[title] => OpenAPI Petstore
[license] => Calcinai\Strut\Definitions\License Object
(
[data:protected] => Array
(
[name] => MIT
)
)
)
)
[servers] => Array
(
[0] => Calcinai\Strut\Definitions\Server Object
(
[data:protected] => Array
(
[url] => https://petstore.openapis.org/v1
[description] => Development server
)
)
)
[paths] => Calcinai\Strut\Definitions\Paths Object
(
[data:protected] => Array
(
[/pets] => Calcinai\Strut\Definitions\PathItem Object
(
[data:protected] => Array
(
[get] => Calcinai\Strut\Definitions\Operation Object
(
[data:protected] => Array
(
[summary] => List all pets
[operationId] => listPets
[tags] => Array
(
[0] => pets
)
[parameters] => Array
(
[0] => Calcinai\Strut\Definitions\Parameter Object
(
[data:protected] => Array
(
[name] => limit
[in] => query
[description] => How many items to return at one time (max 100)
[required] =>
[schema] => Calcinai\Strut\Definitions\Schema Object
(
[data:protected] => Array
(
[type] => integer
[format] => int32
)
)
)
)
)
[responses] => Calcinai\Strut\Definitions\Responses Object
(
[data:protected] => Array
(
[200] => Calcinai\Strut\Definitions\Response Object
(
[data:protected] => Array
(
[description] => An paged array of pets
[headers] => Calcinai\Strut\Definitions\HeadersOrReferences Object
(
[data:protected] => Array
(
[x-next] => Calcinai\Strut\Definitions\Header Object
(
[data:protected] => Array
(
[schema] => Calcinai\Strut\Definitions\Schema Object
(
[data:protected] => Array
(
[type] => string
)
)
[description] => A link to the next page of responses
)
)
)
)
[content] => Calcinai\Strut\Definitions\MediaTypes Object
(
[data:protected] => Array
(
[application/json] => Calcinai\Strut\Definitions\MediaType Object
(
[data:protected] => Array
(
[schema] => Calcinai\Strut\Definitions\Reference Object
(
[data:protected] => Array
(
[$ref] => #/components/schemas/Pets
)
)
)
)
)
)
)
)
...
创建和修改文档
以下是如何程序化生成该架构的示例
$pet = Schema::create() ->addRequired('id') ->addRequired('name') ->setProperties(Properties::create() ->set('id', Schema::create() ->setType('integer') ->setFormat('int64') ) ->set('name', Schema::create() ->setType('string') ) ->set('tag', Schema::create() ->setType('string') ) ); $pets = Schema::create() ->setType('array') ->setItems($pet); $error = Schema::create() ->addRequired('code') ->addRequired('message') ->setProperties(Properties::create() ->set('code', Schema::create() ->setType('integer') ->setFormat('int32') ) ->set('error', Schema::create() ->setType('string') ) ); $schema = OpenAPI::create() ->setInfo( Info::create() ->setTitle('Swagger Petstore') ->setVersion('1.0.0') ->setLicense( License::create() ->setName('MIT') ) ) ->addServer(\Calcinai\Strut\Definitions\Server::create()->setUrl('petstore.swagger.io')) ->setPaths(Paths::create() ->set('/pets', PathItem::create() ->setGet(Operation::create() ->setSummary('List all pets') ->setOperationId('listPets') ->addTag('pets') ->setResponses(Responses::create() ->set('200', Response::create() ->setDescription('A paged array of pets') ) ->set('default', Response::create() ->setDescription('Unexpected error') ) ) ) ) ) ->setComponents(\Calcinai\Strut\Definitions\Components::create() ->setSchemas(\Calcinai\Strut\Definitions\SchemasOrReferences::create() ->set('Pet', $pet) ->set('Pets', $pets) ->set('Error', $error) ) ); echo json_encode($schema, JSON_PRETTY_PRINT);
这将输出
{ "info": { "title": "Swagger Petstore", "version": "1.0.0", "license": { "name": "MIT" } }, "servers": [ { "url": "petstore.swagger.io" } ], "paths": { "\/pets": { "get": { "summary": "List all pets", "operationId": "listPets", "tags": [ "pets" ], "responses": { "200": { "description": "A paged array of pets" }, "default": { "description": "Unexpected error" } } } } }, "components": { "schemas": { "Pet": { "required": [ "id", "name" ], "properties": { "id": { "type": "integer", "format": "int64" }, "name": { "type": "string" }, "tag": { "type": "string" } } }, "Pets": { "type": "array", "items": { "required": [ "id", "name" ], "properties": { "id": { "type": "integer", "format": "int64" }, "name": { "type": "string" }, "tag": { "type": "string" } } } }, "Error": { "required": [ "code", "message" ], "properties": { "code": { "type": "integer", "format": "int32" }, "error": { "type": "string" } } } } } }
这不是完整的示例,但它给出了结构的概览。
贡献
我非常欢迎反馈和/或贡献,但它们可能需要针对生成库。如果您是这样,请前往Gendarme。生成此库的基本命令是
./bin/gendarme generate --namespace "Calcinai\Strut" --root-class Swagger ../strut/lib/schema.json ../strut/src/