PHP

Créer une API REST en PHP : guide complet avec et sans framework (2026)

Publié le 27 February 2026 · Mis à jour le 30 March 2026 — 3 min de lecture
En bref

Créer une API REST en PHP est plus accessible qu'il n'y paraît. Ce guide vous montre comment construire une API REST en PHP pur et avec Symfony API Platform, avec authentification JWT et bonnes pratiques 2026.

Les APIs REST sont au cœur du développement web moderne : elles alimentent les applications mobiles, les SPA React/Vue, les architectures microservices. PHP est un excellent langage pour créer des APIs — voici comment le faire correctement.

Les bases d’une API REST

Une API REST respecte des conventions : les ressources sont des URLs (ex : /api/articles), les méthodes HTTP définissent l’action (GET = lire, POST = créer, PUT/PATCH = modifier, DELETE = supprimer), les réponses sont en JSON avec les codes HTTP appropriés (200 OK, 201 Created, 404 Not Found, 422 Unprocessable Entity).

API REST en PHP pur (sans framework)

Pour comprendre les fondations, voici une API minimale en PHP natif :

header('Content-Type: application/json');
header('Access-Control-Allow-Origin: *');

$method = $_SERVER['REQUEST_METHOD'];
$uri    = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);
$parts  = array_filter(explode('/', $uri));

// Route: GET /api/articles
if ($method === 'GET' && in_array('articles', $parts)) {
    $articles = fetchArticles(); // votre logique DB
    echo json_encode(['data' => $articles, 'total' => count($articles)]);
    exit;
}

// Route: POST /api/articles
if ($method === 'POST' && in_array('articles', $parts)) {
    $body = json_decode(file_get_contents('php://input'), true);
    // Validation...
    $id = createArticle($body);
    http_response_code(201);
    echo json_encode(['id' => $id]);
    exit;
}

http_response_code(404);
echo json_encode(['error' => 'Route not found']);

API REST avec Symfony et API Platform

API Platform est le standard de facto pour les APIs PHP sérieuses. Installez-le : composer require api-platform/core. Annotez votre entité Doctrine :

use ApiPlatformMetadataApiResource;
use ApiPlatformMetadataGet;
use ApiPlatformMetadataGetCollection;
use ApiPlatformMetadataPost;

#[ApiResource(
    operations: [
        new GetCollection(),
        new Get(),
        new Post(security: "is_granted('ROLE_ADMIN')")
    ]
)]
#[ORMEntity]
class Article {
    #[ORMId, ORMGeneratedValue, ORMColumn]
    private int $id;

    #[ORMColumn]
    public string $title = '';
}

API Platform génère automatiquement tous les endpoints CRUD, la documentation OpenAPI (Swagger UI), la pagination, les filtres et la sérialisation. En 30 minutes vous avez une API complète, documentée et testable.

Authentification JWT

Pour sécuriser votre API, JWT (JSON Web Token) est la solution standard. Avec LexikJWTAuthenticationBundle pour Symfony :

composer require lexik/jwt-authentication-bundle

Générez une paire de clés RSA, configurez le bundle, et vos clients s’authentifient en deux étapes : POST /api/login avec username/password → reçoivent un JWT → l’envoient dans l’header Authorization: Bearer {token} sur toutes les requêtes suivantes.

Validation des données

Ne faites jamais confiance aux données reçues. Validez systématiquement :

// PHP natif
function validateArticle(array $data): array {
    $errors = [];
    if (empty($data['title'])) $errors['title'] = 'Le titre est requis';
    if (mb_strlen($data['title'] ?? '') > 200) $errors['title'] = 'Max 200 caractères';
    if (empty($data['content'])) $errors['content'] = 'Le contenu est requis';
    return $errors;
}
$errors = validateArticle($body);
if (!empty($errors)) {
    http_response_code(422);
    echo json_encode(['errors' => $errors]);
    exit;
}

Avec Symfony, utilisez les contraintes de validation Symfony (#[AssertNotBlank], #[AssertLength(max: 200)]) directement sur vos entités — la validation est automatique.

Rate limiting

Protégez votre API des abus. Avec le composant Symfony RateLimiter, limitez à 60 requêtes par minute par IP. Sans framework, implémentez un compteur Redis simple. Sans Redis, une table MySQL avec timestamp suffit pour les petits volumes.

Documentation automatique

Générez la documentation OpenAPI pour vos clients : avec API Platform, elle est disponible sur /api/docs. Pour une API PHP natif, utilisez swagger-php (composer require zircote/swagger-php) pour annoter vos routes et générer le JSON de spec OpenAPI. Un client dispose ainsi d’une documentation interactive à jour automatiquement.

Besoin d’un expert ? Développeur API REST PHP Paris →

Questions fréquentes

Vaut-il mieux créer une API REST PHP from scratch ou utiliser Symfony/API Platform ?

API Platform (basé sur Symfony) pour les projets qui ont besoin de CRUD complet, documentation OpenAPI automatique, validation Symfony, et intégration avec Doctrine ORM. From scratch (avec Slim ou Lumen) pour des APIs très légères avec peu d’endpoints et sans besoin de scaffolding. API Platform économise des semaines de développement pour les APIs complexes.

Comment gérer l’authentification dans une API REST PHP ?

JWT (JSON Web Tokens) est le standard pour les APIs : le client reçoit un token signé à la connexion et l’envoie dans le header Authorization de chaque requête. Le token expire (généralement 15-60 minutes) et est renouvelé via un refresh token. En Symfony, LexikJWTAuthenticationBundle implémente JWT en quelques minutes. OAuth 2.0 est préférable pour les APIs publiques avec des scopes.

W
Rédigé par
WebEngine
Développeur web freelance à Paris spécialisé WordPress, WooCommerce et SEO technique depuis 2010. 13 avis vérifiés · Note 5/5. Chaque site livré atteint un score PageSpeed mobile supérieur à 90.

Un projet en tête ?

Devis gratuit sous 48h, sans engagement.

Demander un devis gratuit