Skip to content

Votre première API en 10 minutes ​

Ce tutoriel vous guide de zéro à une API JSON fonctionnelle avec NENE2.

À la fin vous aurez :

  • une API locale qui répond aux requêtes HTTP
  • un endpoint /hello qui retourne du JSON
  • une compréhension du flux des requêtes à travers le framework

Pour qui : Les développeurs qui connaissent JavaScript ou Python mais n'ont jamais utilisé PHP. Si vous avez utilisé Express ou FastAPI, les concepts s'y mappent directement.

Durée : environ 10 minutes.


Ce dont vous avez besoin ​

OutilPourquoiVérification
PHP 8.4exécute l'applicationphp --version
Composergestionnaire de paquets PHP (comme npm)composer --version
Un terminaltoutes les commandes s'y exécutent—

Alternative Docker : si vous préférez ne pas installer PHP localement, Docker fonctionne aussi. Voir Configuration avec Docker en bas de cette page.


Étape 1 — Créer un répertoire de projet ​

bash
mkdir my-api && cd my-api

C'est comme mkdir my-app && cd my-app dans un projet Node.js.


Étape 2 — Installer NENE2 ​

bash
composer init --name="yourname/my-api" --no-interaction
composer require hideyukimori/nene2:^0.4

composer require est l'équivalent PHP de npm install. Il télécharge NENE2 et ses dépendances dans vendor/.

Après cela, votre répertoire ressemble à :

my-api/
  vendor/        ← paquets installés (comme node_modules/)
  composer.json  ← métadonnées du paquet (comme package.json)
  composer.lock  ← versions verrouillées (comme package-lock.json)

Étape 3 — Créer un fichier .env ​

bash
cat > .env << 'EOF'
APP_ENV=local
APP_DEBUG=true
APP_NAME="My API"
DB_ADAPTER=sqlite
EOF

.env fonctionne comme dans Node.js. Le framework le lit automatiquement au démarrage.


Étape 4 — Créer le contrôleur frontal ​

Créez public/index.php :

php
<?php
declare(strict_types=1);

use Nene2\Http\JsonResponseFactory;
use Nene2\Http\RuntimeApplicationFactory;
use Nene2\Routing\Router;
use Nyholm\Psr7\Factory\Psr17Factory;
use Nyholm\Psr7Server\ServerRequestCreator;
use Psr\Http\Message\ServerRequestInterface;
use Psr\Http\Server\RequestHandlerInterface;

require dirname(__DIR__) . '/vendor/autoload.php';

$psr17 = new Psr17Factory();
$json  = new JsonResponseFactory($psr17, $psr17);

$app = (new RuntimeApplicationFactory(
    $psr17,
    $psr17,
    routeRegistrars: [
        static function (Router $router) use ($json): void {
            $router->get('/hello', static function (ServerRequestInterface $req) use ($json) {
                return $json->create(['message' => 'Hello, world!', 'status' => 'ok']);
            });
        },
    ],
))->create();

$request  = (new ServerRequestCreator($psr17, $psr17, $psr17, $psr17))->fromGlobals();
$response = $app->handle($request);

foreach ($response->getHeaders() as $name => $values) {
    foreach ($values as $value) {
        header(sprintf('%s: %s', $name, $value), false);
    }
}
http_response_code($response->getStatusCode());
echo $response->getBody();

Ce que ça fait (ligne par ligne) :

  • require .../vendor/autoload.php — charge tous les paquets installés, comme import en JS
  • $psr17 = new Psr17Factory() — crée des factories d'objets HTTP (pensez : constructeurs de requêtes/réponses)
  • RuntimeApplicationFactory — assemble le pipeline middleware complet
  • routeRegistrars — là où vous ajoutez vos propres routes (voir les docs HOWTO)
  • $router->get('/hello', ...) — enregistre une route GET, comme app.get('/hello', ...) dans Express
  • $json->create([...]) — construit une réponse JSON depuis un tableau PHP

Étape 5 — Démarrer le serveur ​

bash
php -S localhost:8080 -t public

C'est le serveur de développement intégré de PHP. C'est l'équivalent de npm run dev — pas pour la production, mais parfait pour le développement local.

Vous devriez voir :

PHP 8.4.x Development Server (http://localhost:8080) started

Étape 6 — Appeler l'API ​

Ouvrez un nouveau terminal et exécutez :

bash
curl http://localhost:8080/hello

Vous devriez voir :

json
{
    "message": "Hello, world!",
    "status": "ok"
}

Essayez aussi l'endpoint de santé intégré :

bash
curl http://localhost:8080/health
json
{
    "status": "ok",
    "service": "My API"
}

C'est votre première API en fonctionnement. Voyons ce qui est inclus d'autre.


Étape 7 — Voir la gestion des erreurs en action ​

NENE2 retourne RFC 9457 Problem Details pour toutes les erreurs. Appelez une route qui n'existe pas :

bash
curl http://localhost:8080/missing
json
{
    "type": "https://nene2.dev/problems/not-found",
    "title": "Not Found",
    "status": 404,
    "instance": "/missing"
}

Chaque réponse d'erreur a un URI type, un title et un status HTTP. C'est le format standard utilisé dans toutes les réponses d'erreur NENE2.


Ce qui vient de se passer ​

Voici le flux de requête pour GET /hello :

Requête HTTP
  → RequestIdMiddleware      ajoute l'en-tête X-Request-Id
  → SecurityHeadersMiddleware ajoute X-Content-Type-Options etc.
  → CorsMiddleware           gère le preflight CORS
  → ErrorHandlerMiddleware   capture les exceptions non gérées
  → RequestSizeLimitMiddleware rejette les charges trop importantes
  → Router                   correspond /hello → votre handler
  → votre handler            retourne {"message": "Hello, world!"}
Réponse HTTP

Tout cela se passe automatiquement. Votre handler a seulement besoin de retourner une réponse — le framework gère les en-têtes, le formatage des erreurs et la corrélation des requêtes.


Étapes suivantes ​


Configuration avec Docker ​

Si vous préférez Docker à une installation PHP locale :

bash
mkdir my-api && cd my-api

Créez un compose.yaml minimal :

yaml
services:
  app:
    image: php:8.4-apache
    ports:
      - "8080:80"
    volumes:
      - .:/var/www/html
    working_dir: /var/www/html

Puis installez Composer à l'intérieur du conteneur :

bash
docker compose run --rm app bash -c "curl -sS https://getcomposer.org/installer | php && php composer.phar require hideyukimori/nene2:^0.4"

Suivez les étapes 3 à 4 ci-dessus pour créer .env et public/index.php, puis :

bash
docker compose up -d
curl http://localhost:8080/hello

Pour une configuration Docker plus complète avec support MySQL, consultez le guide de configuration du dépôt NENE2.

Publié sous licence MIT.