Hello, notre socle est maintenant posé. Si on regarde nos devs jusqu’a présent on se rend compte que notre dashboard va nous permettre de gérer toute notre donnée. Nous avons parlé d’api tout au long de cet ensemble d’article, mais en réalité, il reste encore pas mal de boulot pour être complètement opérationnel. En effet, nous devons penser à exposer nos données pour que nos futur FRONT puisse venir récupérer la donnée. Pour ce faire une api avec passport laravel nous sera utile.

Une partie du travail est déjà faite puisque nos articles sont en ce moment même stockés dans une base ElasticSearch. Celle-ci, comme vu précédemment, dispose de sa propre API. Pour exposer nos données. Notre api se voudra publique, elle ne permettra évidemment que de lire la donnée et non pas de la modifier ou autre chose. En temps normal, j’utilise beaucoup le Package Passport me permettant de gérer facilement une authentification ou encore les expirations de token. Si cela vous intéresse j vous laisse le découvrir sur le lien un peu plus haut. Dans notre cas, de lecteur et de non confidentialité de la donnée, nous allons simplement utiliser la partie API que propose laravel nativement.

Découverte de l’api laravel

Commençons, juste pour vous présenté cet partie je vais créer une route « test ». Cette route ne sera pas dans notre fichier habituel web.php mais dans api.php

#/routes/api.php

Route::get('test',function(){
     echo json_encode(['Hello' => 'World']);
});

Si vous essayez d’accéder a domain.test/test vous allez vous rendre compte que Laravel vous retourne une 404. En effet, les routes dans api dispo d’un prefix renseigné dans la config. Par défaut, se sera api. Donc si maintenant vous accéder à domain.test/api/test , vous obtiendrez un résultat.

Exposition de nos catégories

Première petite étape plutôt facile. Il s’agira de mettre a disposition une url retournant toute nos catégories.

Info : Pour tester proprement ces api, j’utilise Postman. Pour le moment le navigateur est utilisable car nous ne faisons que des requêtes en GET.

Dans l’ordre de développement nous allons avoir :

  • Création d’un controller spécial API catégorie.
  • Mise en place de sont url et de la méthode.
php artisan make:controller API/CategorieController
#/app/Http/Controller/API/CategorieController

public function index(){
     $categories = Categorie::all();
     return response()->json($categories);
}


#/routes/api.php ( n'oubliez pas le namespace Api\\)
Route::get('categories','Api\\CategorieController@index');

En accédant a votre domaine.test/api/categories vous obtiendrez vos catégories lister.

Il est possible de masquer certaines informations. Vous avez 2 solutions, la première, dans votre méthode, refaire un traitement sur la donnée avant son exposition. La seconde, bien plus rapide, facile et agréable et de mettre dans le Model de catégorie, la variable hidden et de lui assigner la ou les colonnes a ne pas afficher.

#/app/Categorie.php
protected $hidden = ['updated_at'];

Dans mon cas, je masque l’updated_at et dans mon retour celui-ci disparaitra.

Voila en 5 minutes vous avez mis en place votre première exposition de donnée. Allons un peu plus loin et décidons de concevoir une URL pour récupérer une seule catégorie par son id.

#/app/Http/Controller/API/CategorieController
public function show($id){
        $category = Categorie::findOrFail($id);
        return response()->json($category);
}

#/routes/api.php
Route::get('categories/{id}','Api\\CategorieController@show');

Encore en toute simplicité , en accédant à domain.test/api/categories/1 vous obtiendrez la catégorie possédant l’id 1.

Dans la prochaine étape nous parlerons de clé/valeur stocker dans la table Options.

On ne vas pas non plus ce compliquer la tache, pour récupérer une valeur , il faudra en paramètre passer notre key. Route, méthode et le tour est joué.

php artisan make:controller API/OptionController
#/route/api.php
Route::get('option/{key}','Api\\OptionController@show');

#/app/Http/Controller/API/OptionController
public function show($key){
  $opt = Option::where('key',$key)->first();
  if(!empty($opt)){
    return response()->json($opt);
  }
  return response()->json(['error' => 'no data found']);
}

Et voilà, notre api est prête. Nous avons exposé option et catégorie, les articles sont déjà exposé. l’étape suivante est l’exploitation de la donnée par un FRONT. Si un point vous semble flou, n’hésitez pas a poser des questions, il n’y a pas de mauvaise question. N’hésitez pas non plus à faire un retour après exploitation de ce petit tuto.

A bientôt.

Show CommentsClose Comments

Leave a comment