Agent skill
openapi-development
Guide for contributing to the OpenAPI layer at src/Shared/Application/OpenApi/. Use when adding endpoint factories, sanitizers/augmenters/cleaners, updating OpenAPI generation logic, or fixing OpenAPI validation errors (Spectral, OpenAPI diff, Schemathesis).
Stars
163
Forks
31
Install this agent skill to your Project
npx add-skill https://github.com/majiayu000/claude-skill-registry/tree/main/skills/data/openapi-development
SKILL.md
OpenAPI Development Skill
Context (Input)
- Adding new OpenAPI endpoint factories under
src/Shared/Application/OpenApi/Factory/Endpoint/ - Adding/editing request/response/schema factories under
src/Shared/Application/OpenApi/Factory/ - Adding/editing sanitizers/augmenters/cleaners that transform the generated spec
- Fixing OpenAPI validation errors from:
make validate-openapi-spec(Spectral)make openapi-diffmake schemathesis-validate
Task (Function)
Develop and maintain OpenAPI specification generation in a way that:
- Keeps code quality thresholds intact (complexity, style, architecture)
- Preserves immutability when working with API Platform OpenAPI models (
with*()methods) - Produces a spec that passes Spectral and stays diff-stable
Success Criteria:
make generate-openapi-specproduces.github/openapi-spec/spec.yamlmake validate-openapi-specpasses
Architecture Overview
This service uses a layered OpenAPI customization approach:
text
src/Shared/Application/OpenApi/
├── Augmenter/ # Add extra metadata/responses to operations
├── Builder/ # Build common OpenAPI pieces
├── Cleaner/ # Remove/normalize generated artifacts
├── Extractor/ # Extract example values / payload fragments
├── Factory/ # Endpoint/Request/Response/Schema/UriParameter factories
├── Sanitizer/ # Normalize pagination/path/query parameter behavior
├── ValueObject/ + Enum/ # Strongly typed OpenAPI-related value objects
└── Factory/OpenApiFactory.php # Main coordinator (decorator)
config/services.yaml decorates API Platform’s OpenAPI factory with:
App\Shared\Application\OpenApi\Factory\OpenApiFactory!tagged_iterator 'app.openapi_endpoint_factory'
Key Principles (Keep Complexity Low)
- Single Responsibility: one class = one transformation.
- Immutability: prefer
with*()methods; avoid mutating nested arrays unless API Platform forces it. - OPERATIONS constant: avoid chaining
withGet/withPost/...repeatedly. - Readable guard clauses: prefer early returns over deep nesting.
- Functional style:
array_map,array_filter,array_keysover procedural mutation.
See: reference/processor-patterns.md
How to Add New Components
Adding a New Sanitizer/Cleaner/Augmenter
- Create a focused class under one of:
src/Shared/Application/OpenApi/Sanitizer/src/Shared/Application/OpenApi/Cleaner/src/Shared/Application/OpenApi/Augmenter/
- Implement a single public entry method, e.g.
sanitize(OpenApi $openApi): OpenApi. - Iterate paths using
array_keys($openApi->getPaths()->getPaths()). - Apply changes per
PathItemusing anOPERATIONSconstant + dynamicwith/getcalls.
Adding a New Endpoint Factory
- Implement
EndpointFactoryInterfaceundersrc/Shared/Application/OpenApi/Factory/Endpoint/. - It is auto-tagged by
_instanceofinconfig/services.yaml. - It will be invoked by
src/Shared/Application/OpenApi/Factory/OpenApiFactory.php.
Testing / Validation
Run locally (preferred order):
bash
make generate-openapi-spec
make validate-openapi-spec
make openapi-diff
make schemathesis-validate
Notes:
make validate-openapi-specruns./scripts/validate-openapi-spec.sh(Spectral).make schemathesis-validateruns Examples and Coverage phases.
Related Skills
complexity-managementfor refactoring when PHPInsights/PHPMD failsdocumentation-syncwhen spec changes require docs updates
Didn't find tool you were looking for?