Laravel API Inspector: Route ve FormRequest'ten Otomatik Dokümantasyon
API yazdınız, Postman'de test ettiniz, çalışıyor. Sonra ekip arkadaşınız soruyor: "Bu endpoint ne alıyor, ne dönüyor?" ve siz Slack'te JSON örnekleri yapıştırmaya başlıyorsunuz.
Ya da daha kötüsü: Swagger/OpenAPI dosyasını elle yazıyorsunuz. Route ekliyorsunuz ama Swagger'ı güncellemeyi unutuyorsunuz. Bir ay sonra dokümantasyon ile gerçek API arasında dağlar kadar fark oluşuyor.
Laravel API Inspector tam bu sorunu çözüyor. Route'larınızdan, FormRequest kurallarınızdan ve API Resource'larınızdan otomatik dokümantasyon üretiyor. Postman collection'ı, OpenAPI spec'i, HTML dokümantasyonu — hepsi tek komutla.
Ne İş Yapıyor?
API Inspector Laravel uygulamanızı analiz ediyor ve şunları otomatik çıkarıyor:
- Route'lardan endpoint listesi, HTTP method'ları, middleware bilgileri
- FormRequest'lerden request body şeması (validation rule'larını okuyarak)
- API Resource'lardan response yapısı
- Runtime'da gerçek response örnekleri (middleware ile yakalayarak)
Sonuç olarak elinizde:
- Tarayıcıda açılabilen HTML dokümantasyon sayfası
- Postman'e import edilebilen collection dosyası
- OpenAPI 3.0 spec dosyası (Swagger UI, Redoc ile kullanılabilir)
- Response time, memory usage gibi analitik verileri
Kurulum
composer require irabbi360/laravel-api-inspector
php artisan api-inspector:install
Bu kadar. Tarayıcıda http://localhost:8000/api-docs açın, API dokümantasyonunuz hazır.
FormRequest'ten Otomatik Şema Üretimi
API Inspector'ın en güçlü özelliği FormRequest kurallarını otomatik parse etmesi. Zaten yazdığınız validation kuralları dokümantasyona dönüşüyor.
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class StoreUserRequest extends FormRequest
{
public function rules(): array
{
return [
'name' => 'required|string|max:255',
'email' => 'required|email|unique:users',
'password' => 'required|min:8|confirmed',
'age' => 'integer|min:18|max:100',
'role' => 'required|in:admin,editor,viewer',
'avatar' => 'nullable|image|max:2048',
];
}
}
Bu kurallardan API Inspector şu bilgileri çıkarıyor:
| Alan | Tip | Zorunlu | Detay |
|---|---|---|---|
| name | string | Evet | max: 255 |
| string (email) | Evet | unique | |
| password | string | Evet | min: 8, confirmed |
| password_confirmation | string | Evet | same: password |
| age | integer | Hayır | min: 18, max: 100 |
| role | enum | Evet | admin, editor, viewer |
| avatar | file (image) | Hayır | max: 2048KB |
confirmed kuralını görünce otomatik password_confirmation alanı ekliyor. in: kuralını enum'a çeviriyor. email kuralını format olarak işaretliyor. Elle yazsanız 10 dakika, otomatik 0 saniye.
Controller'da Kullanım
Controller'ınız zaten FormRequest kullanıyorsa ekstra bir şey yapmanıza gerek yok:
namespace App\Http\Controllers;
use App\Http\Requests\StoreUserRequest;
use App\Http\Resources\UserResource;
use App\Models\User;
class UserController extends Controller
{
public function store(StoreUserRequest $request)
{
$user = User::create($request->validated());
return new UserResource($user);
}
/**
* @LAPIresponsesSchema UserResource
*/
public function show(User $user)
{
return new UserResource($user);
}
/**
* @LAPIpagination
*/
public function index()
{
return UserResource::collection(
User::latest()->paginate()
);
}
}
Birkaç annotation var:
@LAPIresponsesSchema UserResource— Response yapısını belirtir@LAPIpagination— Sayfalama bilgisini ekler- Return type olarak
UserResourceyazarsanız annotation'a gerek kalmaz
Query Parameter Dokümantasyonu
GET endpoint'lerinin query parametrelerini de belgeleyebilirsiniz. Üç farklı format destekliyor:
JSON format (detaylı):
/**
* @LAPIQueryParams {
* "name": {"type": "string", "required": true, "description": "İsme göre filtrele"},
* "page": {"type": "integer", "required": false, "example": 1},
* "per_page": {"type": "integer", "required": false}
* }
*/
public function index() { ... }
Kısa format:
/**
* @LAPIQueryParams name:string required, page:integer optional, per_page:integer optional
*/
Basit format:
/**
* @LAPIQueryParams name, page, per_page, status
*/
Hangisini kullanacağınız size kalmış. Basit format hızlı, JSON format detaylı.
Runtime Response Yakalama
API Inspector bir middleware ile gerçek API response'larını yakalayıp kaydedebilir. Böylece dokümantasyondaki örnekler gerçek veriyle oluşur — elle JSON yazmak yok.
config/api-inspector.php'de:
return [
'enabled' => true,
'save_responses' => true,
'save_responses_driver' => 'json',
'middleware_capture' => true,
'response_ttl' => 3600,
'auth' => [
'type' => 'bearer',
'header' => 'Authorization',
],
'response_path' => storage_path('api-docs'),
];
middleware_capture açıkken başarılı (2xx) JSON response'lar otomatik storage/api-docs/ klasörüne kaydedilir. Bir kez endpoint'i çağırırsanız gerçek response örneği dokümantasyonda görünür.
Cache yönetimi için:
use Irabbi360\LaravelApiInspector\Support\ResponseCache;
// Manuel kaydet
$responseCache->store('api/users/index', 200, ['data' => [...]]);
// Cache'i temizle
$responseCache->clearForRoute('api/users');
$responseCache->clearAll();
Analitik Dashboard
API Inspector sadece dokümantasyon değil, analitik de sunuyor. Config'de açın:
'analytics' => [
'enabled' => true,
'track_response_time' => true,
'track_memory_usage' => true,
'track_errors' => true,
'retention_days' => 30,
'track_only_uri_start_with' => 'api/',
],
API route'larınıza middleware ekleyin:
Route::middleware([
'api',
\Irabbi360\LaravelApiInspector\Middleware\ApiInspectorAnalyticsMiddleware::class,
])->group(function () {
// API route'larınız
});
http://localhost:8000/api-docs/stats adresinde göreceğiniz dashboard:
- Request metrikleri (toplam istek, ortalama response time)
- Response time dağılım grafikleri
- Error rate izleme
- HTTP status code istatistikleri
- En yavaş route'lar
- Son hatalar
- Route bazlı performans analizi
Bu, production'da API'nizin sağlığını izlemek için çok değerli. Laravel Telescope veya Pulse ile birlikte kullanabilirsiniz ama API Inspector'ın avantajı sadece API endpoint'lerine odaklanması.
Postman ve OpenAPI Export
http://localhost:8000/api-docs sayfasında indirme butonları var:
- Postman Collection — Doğrudan Postman'e import edin, tüm endpoint'ler hazır
- OpenAPI 3.0 Spec — Swagger UI, Redoc veya başka bir araçla kullanın
Dosyalar storage/api-docs/ klasörüne kaydedilir.
Postman collection'ında her endpoint için:
- URL ve HTTP method
- Request body örnekleri (FormRequest'ten)
- Auth header'ları (korumalı route'lar için)
- Response örnekleri (runtime'dan yakalanmışsa)
Validation Kuralları Eşleştirme
API Inspector Laravel validation kurallarını şöyle dönüştürüyor:
| Laravel Kuralı | API Tipi | Format |
|---|---|---|
email |
string | |
date |
string | date |
url |
string | uri |
numeric, integer |
integer | - |
boolean |
boolean | - |
array |
array | - |
file, image |
string | binary |
uuid |
string | uuid |
in:a,b,c |
enum | a, b, c |
confirmed |
- | +confirmation alanı |
min:N, max:N |
- | minLength/maxLength |
Bu eşleştirme sayesinde validation kurallarınız yazıldığı anda dokümantasyon da hazır oluyor. DRY prensibinin güzel bir örneği — aynı bilgiyi iki kez yazmıyorsunuz.
Ne Zaman Kullanmalı?
Kullanın:
- Takımda birden fazla geliştirici varsa ve API dokümantasyonu paylaşmanız gerekiyorsa
- Frontend ekibiyle çalışıyorsanız (React, Vue, Flutter) ve endpoint detaylarını paylaşmanız gerekiyorsa
- Müşteriye veya üçüncü parti entegrasyona API dokümantasyonu vermeniz gerekiyorsa
- API performansını izlemek istiyorsanız
Gerekmeyebilir:
- Tek başınıza küçük bir proje geliştiriyorsanız
- Sadece admin panel API'si varsa ve frontend'i kendiniz yazıyorsanız
- Zaten Scribe veya L5-Swagger kullanıyorsanız ve memnunsanız
Scribe ve Swagger Alternatifleriyle Karşılaştırma
| Özellik | API Inspector | Scribe | L5-Swagger |
|---|---|---|---|
| FormRequest otomatik parse | Evet | Evet | Annotation gerekli |
| Runtime response yakalama | Evet | Kısmi | Hayır |
| Postman export | Evet | Evet | Hayır |
| OpenAPI export | Evet | Evet | Evet |
| Analitik dashboard | Evet | Hayır | Hayır |
| Kurulum kolaylığı | Çok kolay | Kolay | Orta |
API Inspector'ın farkı analitik dashboard ve runtime response yakalama. Scribe daha olgun ve topluluk desteği daha geniş. İhtiyacınıza göre seçin.
Sonuç
API dokümantasyonu yazmak sıkıcı ama gerekli bir iş. API Inspector bu yükü neredeyse sıfıra indiriyor. FormRequest kurallarınız zaten var, route'larınız zaten var — Inspector bunları birleştirip profesyonel bir dokümantasyon çıkarıyor.
Kurulumu 2 dakika. Deneyip beğenmezseniz composer remove ile kaldırın, hiçbir iz bırakmaz.