Salta al contenuto principale
Tecnologia

API REST: Best Practices e Pattern Avanzati

Come progettare API REST professionali: versioning, autenticazione, rate limiting e documentazione.

Giovanni D'Ippolito
2 min di lettura
Autore
Giovanni D'Ippolito
Pubblicato
20 December 2025
Lettura
2 minuti
Tags
#API #REST #Laravel #Best Practices

Creare API REST di Qualità

Un'API ben progettata è fondamentale per il successo di qualsiasi applicazione moderna. Ecco le best practices da seguire.

Struttura URL e Naming

<?php
// ✅ CORRETTO - Nomi plurali, risorse nidificate logiche
GET    /api/users
GET    /api/users/{id}
GET    /api/users/{id}/posts
POST   /api/users
PUT    /api/users/{id}
DELETE /api/users/{id}

// ❌ ERRATO
GET    /api/getUser/{id}
GET    /api/user_posts/{userId}
POST   /api/createNewUser
?>

Versioning

<?php
// Opzione 1: URL versioning
Route::prefix('api/v1')->group(function () {
    Route::get('/users', [UserController::class, 'index']);
});

Route::prefix('api/v2')->group(function () {
    Route::get('/users', [UserV2Controller::class, 'index']);
});

// Opzione 2: Header versioning
Route::middleware('api.version')->group(function () {
    Route::get('/users', [UserController::class, 'index']);
});

// Middleware
class ApiVersionMiddleware
{
    public function handle($request, $next)
    {
        $version = $request->header('Accept-Version', 'v1');

        app()->instance('api.version', $version);

        return $next($request);
    }
}
?>

Autenticazione e Sicurezza

<?php
// Laravel Sanctum per API tokens
Route::post('/login', function (Request $request) {
    $credentials = $request->validate([
        'email' => 'required|email',
        'password' => 'required'
    ]);

    if (!Auth::attempt($credentials)) {
        return response()->json([
            'message' => 'Invalid credentials'
        ], 401);
    }

    $user = Auth::user();
    $token = $user->createToken('api-token', [
        'products:read',
        'products:write',
        'orders:read'
    ])->plainTextToken;

    return response()->json([
        'token' => $token,
        'user' => $user
    ]);
});

// Protezione route con abilities
Route::middleware(['auth:sanctum', 'ability:products:write'])
    ->post('/products', [ProductController::class, 'store']);
?>

Rate Limiting

<?php
// Rate limiter personalizzato
RateLimiter::for('api', function (Request $request) {
    return $request->user()
        ? Limit::perMinute(100)->by($request->user()->id)
        : Limit::perMinute(10)->by($request->ip());
});

// Applicazione
Route::middleware('throttle:api')->group(function () {
    // Routes...
});
?>
Un buon rate limiting protegge la tua API da abusi e garantisce equità tra gli utenti!

Articoli Correlati

Tecnologia

REST API vs GraphQL: Quale Scegliere nel 2024?

Un confronto approfondito tra REST e GraphQL per aiutarti a scegliere la soluzione giusta...

15 Nov 2025 Leggi
Tecnologia

Docker per Sviluppatori PHP: Setup Perfetto per Laravel

Configura un ambiente di sviluppo Docker ottimizzato per progetti Laravel.

23 Nov 2025 Leggi
Tecnologia

Modern JavaScript per Sviluppatori PHP

Le funzionalità JavaScript moderne che ogni sviluppatore PHP dovrebbe conoscere.

09 Dec 2025 Leggi

Rimani Aggiornato

Iscriviti alla nostra newsletter per ricevere gli ultimi articoli direttamente nella tua casella di posta.