5.2 KiB
5.2 KiB
OpenAPI Auto-Generate
Sistem auto-generate OpenAPI spec dari routes yang terdaftar di Slim Framework.
🎯 Fitur
- Auto-generate dari routes - Scan semua routes yang terdaftar dan generate OpenAPI spec
- CLI command - Generate via command line
- On-demand generation - Auto-generate saat request
/docs/openapi.json(optional) - No manual update - Tidak perlu update manual
openapi.jsonsetiap kali tambah endpoint
📋 Cara Menggunakan
Opsi 1: CLI Command (Recommended)
Generate OpenAPI spec via command line:
php bin/generate-openapi.php
Output default: public/docs/openapi.json
Custom output file:
php bin/generate-openapi.php --output custom/path/openapi.json
Note: CLI command memerlukan database connection karena routes perlu di-register.
Opsi 2: Auto-Generate on Request
Enable auto-generate saat request /docs/openapi.json:
- Tambahkan di
.env:
OPENAPI_AUTO_GENERATE=true
- Setiap request ke
/docs/openapi.jsonakan:- Generate OpenAPI spec dari routes yang terdaftar
- Save ke file
public/docs/openapi.json - Return JSON response
Keuntungan:
- ✅ Selalu up-to-date dengan routes terbaru
- ✅ Tidak perlu manual update
- ✅ Swagger UI otomatis menampilkan endpoint baru
Kekurangan:
- ⚠️ Perlu database connection (routes butuh DB untuk register)
- ⚠️ Sedikit overhead saat request (generate setiap kali)
Opsi 3: Manual Update (Default)
Default behavior: load dari file public/docs/openapi.json.
Jika OPENAPI_AUTO_GENERATE=false atau tidak di-set, akan load dari file.
🔧 Konfigurasi
Environment Variables
# Enable auto-generate on request
OPENAPI_AUTO_GENERATE=true
# Default: false (load from file)
File Locations
- Generator class:
src/Support/OpenAPIGenerator.php - CLI script:
bin/generate-openapi.php - Output file:
public/docs/openapi.json - Swagger UI:
/docs
📝 Cara Kerja
- Scan Routes - Generator scan semua routes yang terdaftar di Slim App
- Extract Metadata - Extract method, path, parameters, security dari routes
- Generate Schema - Generate request/response schema berdasarkan path patterns
- Build OpenAPI Spec - Build complete OpenAPI 3.0 spec
- Save/Return - Save ke file atau return sebagai JSON
🎨 Customization
Custom Request Body Schema
Edit method getRequestBodySchema() di src/Support/OpenAPIGenerator.php:
private function getRequestBodySchema(string $pattern, $callable): ?array
{
// Add custom schema based on path pattern
if (strpos($pattern, '/custom-endpoint') !== false) {
return [
'required' => true,
'content' => [
'application/json' => [
'schema' => [
'type' => 'object',
'properties' => [
'field1' => ['type' => 'string'],
'field2' => ['type' => 'integer']
]
]
]
]
];
}
// ...
}
Custom Tags
Edit method getTagFromPath() untuk custom tag assignment:
private function getTagFromPath(string $path): string
{
if (strpos($path, '/custom') !== false) {
return 'Custom';
}
// ...
}
Custom Parameters
Edit method extractParameters() untuk custom query parameters:
private function extractParameters(string $pattern): array
{
$parameters = [];
// Add custom query params
if (strpos($pattern, '/custom') !== false) {
$parameters[] = [
'name' => 'custom_param',
'in' => 'query',
'schema' => ['type' => 'string']
];
}
return $parameters;
}
🚀 Workflow
Development
- Tambah endpoint baru di routes
- Run
php bin/generate-openapi.php - Commit
openapi.jsonyang ter-update - Swagger UI otomatis menampilkan endpoint baru
Production (with auto-generate)
- Set
OPENAPI_AUTO_GENERATE=truedi.env - Tambah endpoint baru di routes
- Deploy
- Swagger UI otomatis menampilkan endpoint baru (no commit needed)
Production (without auto-generate)
- Tambah endpoint baru di routes
- Run
php bin/generate-openapi.phpdi local/staging - Commit
openapi.jsonyang ter-update - Deploy (include updated
openapi.json)
⚠️ Limitations
- Database Required - Routes perlu database connection untuk register
- Schema Inference - Request body schema di-infer dari path pattern (bisa kurang akurat)
- No Reflection - Tidak scan controller methods untuk extract detailed schema
- Manual Customization - Complex schemas perlu manual edit di generator
🔮 Future Improvements
- Support PHP annotations untuk detailed schema
- Reflection-based schema extraction dari controller methods
- Support untuk custom OpenAPI extensions
- Cache generated spec untuk performance
- Support untuk multiple OpenAPI versions
📚 Related Files
src/Support/OpenAPIGenerator.php- Generator classbin/generate-openapi.php- CLI scriptpublic/index.php- Auto-generate on request handlerpublic/docs/openapi.json- Generated OpenAPI specpublic/docs/index.html- Swagger UI