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

Autore

Giovanni D'Ippolito

Pubblicato

20 December 2025

Tempo di 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!

Condividi questo articolo

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 per il tuo...

15 Nov 2025 3 min
Leggi di più →
Tecnologia

Docker per Sviluppatori PHP: Setup Perfetto per Laravel

Configura un ambiente di sviluppo Docker ottimizzato per progetti Laravel.

23 Nov 2025 2 min
Leggi di più →
Tecnologia

Modern JavaScript per Sviluppatori PHP

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

09 Dec 2025 1 min
Leggi di più →

Rimani Aggiornato

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