devizzent/cebe-php-openapi
Composer 安装命令:
composer require devizzent/cebe-php-openapi
包简介
Read and write OpenAPI yaml/json files and make the content accessable in PHP objects.
关键字:
README 文档
README
This is a fork of cebe/php-openapi. I created it as library because the pull request of the openapi3.1 was taking years and a lot of developers want to use it.
php-openapi
Read and write OpenAPI 3.x YAML and JSON files and make the content accessible in PHP objects.
It also provides a CLI tool for validating and converting OpenAPI 3.x Description files.
Supported OpenAPI versions:
- 3.0.x
- 3.1.x
Install
composer require devizzent/cebe-php-openapi
Requirements
- PHP 7.1 or higher (works fine with PHP 8)
Used by
This library provides a low level API for reading and writing OpenAPI files. It is used by higher level tools to do awesome work:
- ... (add yours)
Usage
CLI Tool
$ vendor/bin/php-openapi help
PHP OpenAPI 3 tool
------------------
by Carsten Brandt <mail@cebe.cc>
Usage:
php-openapi <command> [<options>] [input.yml|input.json] [output.yml|output.json]
The following commands are available:
validate Validate the API Description in the specified input file against the OpenAPI v3.0 schema.
Note: the validation is performed in two steps. The results are composed of
(1) structural errors found while reading the API Description file, and
(2) violations of the OpenAPI v3.0 schema.
If no input file is specified input will be read from STDIN.
The tool will try to auto-detect the content type of the input, but may fail
to do so. You may specify --read-yaml or --read-json to force the file type.
Exits with code 2 on validation errors, 1 on other errors and 0 on success.
convert Convert a JSON or YAML input file to JSON or YAML output file.
If no input file is specified input will be read from STDIN.
If no output file is specified output will be written to STDOUT.
The tool will try to auto-detect the content type of the input and output file, but may fail
to do so. You may specify --read-yaml or --read-json to force the input file type.
and --write-yaml or --write-json to force the output file type.
By default all references are resolved (replaced with the object referred to). You can control
handling of references with the following arguments:
--resolve-none Do not resolve references.
--resolve-external Only resolve references that point to external files.
This process is often referred to as "inlining".
--resolve-all Resolve all references (default).
Recursive pointers will stay references.
inline Convert a JSON or YAML input file to JSON or YAML output file and
resolve all external references. The output will be a single API Description file.
This is a shortcut for calling convert --resolve-external.
help Shows this usage information.
Options:
--read-json force reading input as JSON. Auto-detect if not specified.
--read-yaml force reading input as YAML. Auto-detect if not specified.
--write-json force writing output as JSON. Auto-detect if not specified.
--write-yaml force writing output as YAML. Auto-detect if not specified.
-s, --silent silent mode. Will hide all success/information messages and only print errors.
Reading API Description Files
Read OpenAPI Description from JSON file:
use cebe\openapi\Reader; // realpath is needed for resolving references with relative Paths or URLs $openapi = Reader::readFromJsonFile(realpath('openapi.json'));
Read OpenAPI Description from YAML:
use cebe\openapi\Reader; // realpath is needed for resolving references with relative Paths or URLs $openapi = Reader::readFromYamlFile(realpath('openapi.yaml')); // you may also specify the URL to your API Description file $openapi = Reader::readFromYamlFile('https://raw.githubusercontent.com/OAI/OpenAPI-Specification/3.0.2/examples/v3.0/petstore-expanded.yaml');
Access API Description data:
echo $openapi->openapi; // openAPI version, e.g. 3.0.0 echo $openapi->info->title; // API title foreach($openapi->paths as $path => $definition) { // iterate path definitions }
Object properties are exactly like in the OpenAPI Specification. You may also access additional properties added by specification extensions.
Writing API Description Files
use cebe\openapi\spec\OpenApi; use cebe\openapi\spec\PathItem; // create base API Description $openapi = new OpenApi([ 'openapi' => '3.0.2', 'info' => [ 'title' => 'Test API', 'version' => '1.0.0', ], 'paths' => [], ]); // manipulate description as needed $openapi->paths['/test'] = new PathItem([ 'description' => 'something' ]); // ... $json = \cebe\openapi\Writer::writeToJson($openapi);
results in the following JSON data:
{
"openapi": "3.0.0",
"info": {
"title": "Test API",
"version": "1.0.0"
},
"paths": {
"/test": {
"description": "something"
}
}
}
Writing API Description Files using prepared Objects
Since version 1.2.0, the above example can also be written like this (passing objects instead of arrays):
use cebe\openapi\spec\OpenApi; use cebe\openapi\spec\PathItem; use cebe\openapi\spec\Info; // create base API Description $openapi = new OpenApi([ 'openapi' => '3.0.2', 'info' => new Info([ 'title' => 'Test API', 'version' => '1.0.0', ]), 'paths' => [ '/test' => new PathItem([ 'description' => 'something' ]), ], ]); $json = \cebe\openapi\Writer::writeToJson($openapi);
Reading API Description Files and Resolving References
In the above we have passed the raw JSON or YAML data to the Reader. In order to be able to resolve references to structures in external files, we must provide the full context.
use cebe\openapi\Reader; use cebe\openapi\spec\OpenAPI; use cebe\openapi\ReferenceContext; // there are two different modes for resolving references: // ALL: resolve all references, which will result in a large description with a lot of repetition // but no references (except if there are recursive references, these will stop at some level) $mode = ReferenceContext::RESOLVE_MODE_ALL; // INLINE: only references to external files are resolved, references to places in the current file // are still Reference objects. $mode = ReferenceContext::RESOLVE_MODE_INLINE; // an absolute URL or file path is needed to allow resolving external references $openapi = Reader::readFromJsonFile('https://www.example.com/api/openapi.json', OpenAPI::class, $mode); $openapi = Reader::readFromYamlFile('https://www.example.com/api/openapi.yaml', OpenAPI::class, $mode);
If data has been loaded in a different way you can manually resolve references like this by giving a context:
$openapi->resolveReferences( new \cebe\openapi\ReferenceContext($openapi, 'https://www.example.com/api/openapi.yaml') );
Validation
The library provides simple validation operations, that check basic OpenAPI spec requirements. This is the same as "structural errors found while reading the API Description file" from the CLI tool. This validation does not include checking against the OpenAPI v3.0/v3.1 JSON schemas, this is only implemented in the CLI.
// return `true` in case no errors have been found, `false` in case of errors.
$specValid = $openapi->validate();
// after validation getErrors() can be used to retrieve the list of errors found.
$errors = $openapi->getErrors();
Note: Validation is done on a very basic level and is not complete. So a failing validation will show some errors, but the list of errors given may not be complete. Also a passing validation does not necessarily indicate a completely valid spec.
Development
You may use the docker environment for local development:
docker-compose build
make IN_DOCKER=1 install
make IN_DOCKER=1 test
...
devizzent/cebe-php-openapi 适用场景与选型建议
devizzent/cebe-php-openapi 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 10.62M 次下载、GitHub Stars 达 38, 最近一次更新时间为 2023 年 01 月 26 日, 在 PHP 生态内属于活跃度较高的组件。
它主要适用于以下技术方向: 「openapi」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。
我们在过去多个企业项目中使用过 devizzent/cebe-php-openapi 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 devizzent/cebe-php-openapi 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
与 devizzent/cebe-php-openapi 相关的其它包
同方向 / 同关键字的高下载量 PHP Composer 包推荐,方便对比选型:
The following pages give you some general information on how to use our APIs.<br/>The actual API services documentation then follows further below. You can use the menu to jump between API sections.<br/><br/>This page has a built-in HTTP(S) client, so you can test the services directly from within t
Apollo - OpenAPI
Twitter API v2 available endpoints
支付宝开放平台v3协议文档,支持最新版PHP8+
Merchant-side PHP SDK for YoPay Pay Open API.
SDK oficial da API AurePay para PHP (tipado via OpenAPI)
统计信息
- 总下载量: 10.62M
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 38
- 点击次数: 18
- 依赖项目数: 45
- 推荐数: 3
其他信息
- 授权协议: MIT
- 更新时间: 2023-01-26