dandoetech/openapi-generator
Composer 安装命令:
composer require dandoetech/openapi-generator
包简介
Generate OpenAPI 3.1 from DanDoeTech Resource Registry with optional model metadata fallback.
README 文档
README
Pre-release — Architecture by senior tech lead, implementation largely AI-assisted with human review. Not fully reviewed. Architecture may change before v1.0.0.
Generate OpenAPI 3.1 specifications from a Resource Registry. Framework-agnostic — no Laravel required.
Installation
composer require dandoetech/openapi-generator
Requires dandoetech/resource-registry.
Quick Start
use DanDoeTech\ResourceRegistry\Registry\{ArrayRegistryDriver, Registry}; use DanDoeTech\ResourceRegistry\Definition\{FieldDefinition, FieldType, ActionDefinition}; use DanDoeTech\OpenApiGenerator\OpenApiGenerator; use DanDoeTech\OpenApiGenerator\Support\ResourceResolver; // Build a registry (or use class-based resources via laravel-resource-registry) $registry = new Registry(new ArrayRegistryDriver([ 'product' => [ 'label' => 'Product', 'fields' => [ new FieldDefinition('id', FieldType::Integer, nullable: false), new FieldDefinition('name', FieldType::String, nullable: false), new FieldDefinition('price', FieldType::Float, nullable: false), ], 'actions' => [new ActionDefinition('create')], ], ])); // Generate the spec $generator = new OpenApiGenerator( resolver: new ResourceResolver(), title: 'My API', version: '1.0.0', ); $doc = $generator->generate($registry); echo $doc->toJson();
Output (abbreviated):
{
"openapi": "3.1.0",
"info": { "title": "My API", "version": "1.0.0" },
"paths": {
"/product": {
"get": { "summary": "List Product", "..." : "..." },
"post": { "summary": "Create Product", "..." : "..." }
},
"/product/{id}": {
"get": { "summary": "Fetch Product", "..." : "..." }
}
},
"components": {
"schemas": {
"Product": {
"type": "object",
"properties": {
"id": { "type": "integer", "format": "int64" },
"name": { "type": "string" },
"price": { "type": "number", "format": "double" }
},
"required": ["id", "name", "price"]
},
"ProblemJson": { "..." : "..." }
}
}
}
Laravel users: Use
dandoetech/laravel-openapi-generatorfor Artisan commands and automatic registry binding.
API Overview
| Class | Purpose |
|---|---|
OpenApiGenerator |
Main entry point — generate(Registry): OpenApiDocument |
OpenApiDocument |
Result container — toArray() and toJson() |
ResourceResolver |
Resolves fields from resource definitions with optional fallback |
PathsBuilder |
Builds OpenAPI path items from resource definitions |
ComponentsBuilder |
Builds component schemas from resource fields |
SchemaFactory |
Maps fields and computed fields to JSON Schema properties |
Types |
Maps FieldType enum to OpenAPI type/format pairs |
Contracts
| Interface | Purpose |
|---|---|
OpenApiGeneratorInterface |
generate(Registry): OpenApiDocument |
ModelMetaProviderInterface |
Optional fallback for field metadata — fieldsFor(string $key): array |
Type Mapping
| FieldType | OpenAPI |
|---|---|
String |
{ "type": "string" } |
Integer |
{ "type": "integer", "format": "int64" } |
Float |
{ "type": "number", "format": "double" } |
Boolean |
{ "type": "boolean" } |
DateTime |
{ "type": "string", "format": "date-time" } |
Json |
{ "type": "object" } |
Date |
{ "type": "string", "format": "date" } |
Text |
{ "type": "string" } |
Email |
{ "type": "string", "format": "email" } |
Url |
{ "type": "string", "format": "uri" } |
Enum |
{ "type": "string" } |
Configuration
All configuration is via constructor arguments:
$generator = new OpenApiGenerator( resolver: new ResourceResolver($optionalFallbackProvider), title: 'My API', version: '2.0.0', servers: [['url' => 'https://api.example.com']], );
Field Fallback
If a resource has no fields defined, the generator can fall back to a ModelMetaProviderInterface:
use DanDoeTech\OpenApiGenerator\ModelMeta\ArrayModelMetaProvider; $fallback = new ArrayModelMetaProvider([ 'product' => [ new FieldDefinition('id', FieldType::Integer, nullable: false), new FieldDefinition('name', FieldType::String, nullable: false), ], ]); $resolver = new ResourceResolver($fallback);
Testing
composer install composer test # PHPUnit composer qa # cs:check + phpstan + test
License
MIT
dandoetech/openapi-generator 适用场景与选型建议
dandoetech/openapi-generator 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 0 次下载、GitHub Stars 达 0, 最近一次更新时间为 2026 年 03 月 15 日, 在 PHP 生态内属于活跃度较高的组件。
它主要适用于以下技术方向: 「php」 「api」 「swagger」 「openapi」 「code-generation」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。
我们在过去多个企业项目中使用过 dandoetech/openapi-generator 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 dandoetech/openapi-generator 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
与 dandoetech/openapi-generator 相关的其它包
同方向 / 同关键字的高下载量 PHP Composer 包推荐,方便对比选型:
A PSR-7 compatible library for making CRUD API endpoints
Swagger integration to Laravel 5
Easy Swagger endpoint using the Zend Expressive routes config
一个接口文档生成器
OpenAPI specification generator and Swagger UI for PHP 7.2-8.4 projects (standalone and Nette Framework)
统计信息
- 总下载量: 0
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 0
- 点击次数: 28
- 依赖项目数: 2
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2026-03-15