Veritabanının tek belgelenme aracı olduğu projelerin zorluğunu en iyi ben bilirim. Yirmi tablo, yabancı anahtarlar, yıllarca biriktirilmiş üretim verileri ve ya hiç API katmanı yok ya da kimsenin dokunmak istemediği bir yığın kopyala-yapıştır controller ile karşı karşıya kalmak zorunda kalıyor.
Mevcut yirmi tablo için modeller, controller’lar, doğrulamalar ve testler yazmak günler alıyor. İşte bu problem, --from-database parametresini laravel-api-generator üzerine eklememe neden oldu:
composer require --dev nameless/laravel-api-generator
php artisan make:fullapi --from-database
Bu generator, canlı şemanızı okuyarak her tablo için normal modda üretilen aynı yığınları oluşturur: tam PHPDoc ile model, ince controller, servis, DTO, gerçek doğrulama kuralları içeren form istekleri, kaynak, fabrika, veri besleyici, politika ve yazılı testler (PHPUnit ya da --pest ile Pest).
İntrusif Okuma Neden Önemli?
Bu işlemin sadece bir sütun dökümü olmaması için çok zaman harcadım.
Bir VARCHAR(255) NOT NULL UNIQUE kolonu sadece string alanına dönüşmez. Form isteğinde required|string|max:255|unique:users,email şeklinde ortaya çıkar ve fabrika için fake()->unique()->safeEmail() haline gelir.
Yabancı anahtarlar, her iki tarafta ilişkiler haline gelir: posts.user_id size Post::user(): BelongsTo ve User::posts(): HasMany verir. Laravel 11+ üzerinde, generator gerçek kısıtlamaları okur; eski şemalar için
_id adlandırma kuralına geri döner.Pivot tablolara tespit edilir (iki yabancı anahtar ve başka bir şey yok) ve her iki modelde belongsToMany haline gelir. commentable_type + commentable_id gibi sütun çiftleri düzgün bir morphTo oluşturur. Enum kolonları, dönüşümler ve Rule::enum doğrulaması ile birlikte yerel PHP destekli enumerasyonlar haline gelir. deleted_at kolonu ise tüm varlıkları soft deletes’e (yumuşak silme) dönüştürür, geri alma endpoint’i ile birlikte.
Genelde Tüm Tabloları İstemezsiniz
php artisan make:fullapi --from-database --tables=posts,categories,comments
Size yanlış yapmamanız için iki varsayılan ayar sunulmuştur: migrations tekrar üretilmez (tablolar zaten mevcut; kod kayıtları için --with-migrations geçin) ve users tablosu atlanır, böylece özelleştirilmiş User.php hayatta kalır. --tables=users bunu açıkça zorla atlar.
Elde Ettiğiniz Faydalar
Oluşturulan controller’lar Scramble ile uyumludur, böylece eğer Scramble yüklüyse, /docs/api hemen tarayıcıda gezilebilir OpenAPI belgeleri sunar. --postman eklediğinizde, aynı gün içinde frontend ekibine bir koleksiyon teslim edebilirsiniz.
Takım VS Code kullanıyorsa, uzantı, bir tablo seçici ile aynı içe aktarma işlemini gerçekleştirir ve bunun yanında Open API Docs butonu döngüyü kapatır: Scramble’ı kontrol eder, eğer sunucu çalışmıyorsa başlatır, portu tespit eder ve belgeleri tarayıcıda açar. Hatta yeni bir checkout’ta .env‘yi .env.example ile oluşturma teklifinde bulunur.
Miras bir veritabanası saat 09:00’da, belgelenmiş ve test edilmiş bir API ise saat 09:15’te. İş mantığı hala bir insan gerektiriyor. Altyapı gerektirmiyor.
Notlar
Bu paket, bir --dev bağımlılığıdır ve üretilen kod ona bağlı değildir, bu nedenle sadece ihtiyaç duyduğunuzda bir kerelik bir migration aracı olarak kullanabilirsiniz.
Bir şemanız varsa ve bunun bozulacağını düşünüyorsanız, bunu görmek isterim. Garip veritabanları bu özelliğin daha iyi hale gelmesine neden oldu.
Kaynak: Orijinal Makale