0 XP
?
Intermédiaire60 min40 XP

Objectifs de cette leçon

  • Développer un backend avec l'assistance IA
  • Structurer une API REST avec des prompts clairs
  • Tester et documenter l'API générée

Développer un backend API REST 🖥️

Qu'est-ce qu'une API REST ?

Une API REST (Representational State Transfer) est un interface qui permet au frontend (web/mobile) de communiquer avec le backend (serveur) via des requêtes HTTP.


Le flux d'une requête

Client (navigateur/mobile)
       │
       │  GET /api/users/1
       ↓
Route / Controller
       │
       │  $user = User::find(1);
       ↓
Base de données
       │
       │  SELECT * FROM users WHERE id = 1
       ↓
Réponse JSON
       │
       │  {"id": 1, "name": "Alice", "email": "alice@ex.com"}
       ↓
Client reçoit les données

Les opérations CRUD

MéthodeURLDescriptionSQL
GET/api/usersLister tous les utilisateursSELECT * FROM users
GET/api/users/1Détail d'un utilisateurSELECT * FROM users WHERE id=1
POST/api/usersCréer un utilisateurINSERT INTO users...
PUT/api/users/1Modifier un utilisateurUPDATE users SET... WHERE id=1
DELETE/api/users/1Supprimer un utilisateurDELETE FROM users WHERE id=1

Exemple avec Laravel

Modèle

<?php
// app/Models/User.php

class User extends Model
{
    protected $fillable = ['name', 'email', 'password'];
    protected $hidden = ['password', 'remember_token'];
}

Controller

<?php
// app/Http/Controllers/Api/UserController.php

class UserController extends Controller
{
    public function index()
    {
        $users = User::paginate(10);
        return response()->json($users);
    }

    public function store(Request $request)
    {
        $validated = $request->validate([
            'name' => 'required|string|max:255',
            'email' => 'required|email|unique:users',
            'password' => 'required|min:8|confirmed',
        ]);

        $validated['password'] = Hash::make($validated['password']);
        $user = User::create($validated);

        return response()->json($user, 201);
    }

    public function show($id)
    {
        $user = User::findOrFail($id);
        return response()->json($user);
    }

    public function update(Request $request, $id)
    {
        $user = User::findOrFail($id);
        $validated = $request->validate([
            'name' => 'sometimes|string|max:255',
            'email' => 'sometimes|email|unique:users,email,' . $id,
        ]);

        $user->update($validated);
        return response()->json($user);
    }

    public function destroy($id)
    {
        User::findOrFail($id)->delete();
        return response()->json(['message' => 'Utilisateur supprimé']);
    }
}

Routes

<?php
// routes/api.php

Route::post('/auth/register', [AuthController::class, 'register']);
Route::post('/auth/login', [AuthController::class, 'login']);

Route::middleware('auth:sanctum')->group(function () {
    Route::get('/users', [UserController::class, 'index']);
    Route::get('/users/{id}', [UserController::class, 'show']);
    Route::put('/users/{id}', [UserController::class, 'update']);
    Route::delete('/users/{id}', [UserController::class, 'destroy']);
});

Exemple avec Node.js/Express

// routes/users.js
const express = require('express');
const router = express.Router();
const { Pool } = require('pg');

const pool = new Pool({
  host: process.env.DB_HOST,
  database: process.env.DB_NAME,
  user: process.env.DB_USER,
  password: process.env.DB_PASSWORD,
});

router.get('/users', async (req, res) => {
  const { rows } = await pool.query('SELECT * FROM users ORDER BY id');
  res.json(rows);
});

router.post('/users', async (req, res) => {
  const { name, email, password } = req.body;
  const { rows } = await pool.query(
    'INSERT INTO users (name, email, password) VALUES ($1, $2, $3) RETURNING *',
    [name, email, password]
  );
  res.status(201).json(rows[0]);
});

module.exports = router;

Utiliser l'IA pour créer l'API

Bon prompt :

Crée une API REST Laravel pour une application de gestion de livres.

Modèle Book : title, author, isbn, category, available (boolean)

Routes :
- GET /api/books (liste paginée)
- POST /api/books (création avec validation)
- GET /api/books/{id} (détail)
- PUT /api/books/{id} (modification)
- DELETE /api/books/{id} (suppression)

Utilise Eloquent, retourne du JSON, gère les erreurs.
Les routes GET sont publiques, les autres nécessitent auth:sanctum.

Exercices 🎯

  1. API : Créez une API CRUD pour une ressource "Post" (title, content, published).
  2. Validation : Ajoutez la validation des données sur chaque route.
  3. Auth : Protégez les routes de modification avec l'authentification.
  4. Tests : Écrivez 3 tests pour votre API.

Prochaine leçon : Développer une application web.

Flux d'une requête API REST
Interactif
Étape 1/6
Simulateur de requêtes API
GET /api/users
Réponse :
{
  "users": [
    {"id": 1, "name": "Alice"},
    {"id": 2, "name": "Bob"}
  ]
}