Tutoriel Vidéo Laravel Module de commentaires : Création de l'API

Télécharger la vidéo Télécharger les sources

La suite de ce tutoriel est disponible ici

Dans cette vidéo je vous propose de pratiquer un peu à travers la création d'un module de commentaires dynamique. Le but ici est de séparer notre code en utilisant les bonnes pratiques :

  • Création d'une API côté serveur pour la gestion des commentaires (en utilisant le TDD)
  • Création de l'interface avec la librairie VueJS et VueX (on testera ici la partie store de notre application)

Nous allons donc commencer ici par la création de l'API en utilisant Laravel.

Test Driven Development

Lorsque l'on crée une API il est important de la tester correctement afin de s'assurer que le fonctionnement corresponde bien à nos besoins. En effet, si notre API fonctionne de manière anormale le problème affectera notre frontend et on perdra beaucoup de temps à trouver la cause réelle du problème.

Le problème lorsque l'on veut tester une application est toujours le même : La base de données. Heureusement pour nous il est possible d'utiliser une base de donnée SQLite dans la mémoire. L'avantage de ce type de base de données est qu'elle n'est persistée que le temps de la connexion. Il faudra donc commencer par créer une nouvelle configuration :

'testing' => [
   'driver' => 'sqlite',
   'database' => ':memory:',
   'prefix' => ''
],

et ensuite la définir dans notre phpuni.xml

<env name="DB_CONNECTION" value="testing"/>

Enfin on demandera aux tests d'effectuer les migration au démarrage afin d'avoir une base de données vierge pour nos tests

    public function setUp()
    {
        parent::setUp();
        \Illuminate\Support\Facades\Artisan::call('migrate');
    }

Il est aussi possible d'utiliser le trait Illuminate\Foundation\Testing\DatabaseMigrations

Pour créer des enregistrements dans les tests il est possible d'utiliser les factories.

$factory->define(\App\Comment::class, function (Faker\Generator $faker) {
    return [
        'content' => $faker->sentence,
        'email'   => $faker->email,
        'username'=> $faker->userName
    ];
});

Ces factories sont très utiles pour créer de faux enregistrements pour tester les choses.

$post = factory(App\Post::class)->create();
$comment = factory(App\Comment::class)->create(['commentable_type' => 'Post', 'commentable_id' => $post->id]);

Structure de notre API

Pour notre module de commentaire on va vouloir :

  • lister les commentaires - GET /comments?type=<model>&id=<id>, renvoie un tableau de commentaires
  • poster un commentaire - POST /comments, crée un nouveau commentaire ou renvoie les erreurs de validation
  • supprimer un commentaire - DELETE /comments/<id>Permet de supprimer un commentaire (en vérifiant l'IP de l'utilisateur.