Créez votre API REST avec PHP et Yii 2 sur Ubuntu
Article par Anthony Lavallée
Diplômé de la Technique informatique du Cégep de Sainte-Foy.
Qu’est-ce que REST?
REST est un style d’architecture adapté au World Wide Web, sans en être toutefois dépendant. C’est une approche de communication, parfois utilisée pour les services Web, qui a pour avantage de rendre une application simple à entretenir.
Serveur REST
Avant d’en arriver à la création d’un Serveur REST, on doit d’abord s’assurer que tout est en place, de manière à ce que son fonctionnement soit optimal. Il y a plusieurs choses à configurer, en vue d’avoir la meilleure base possible, pour que notre application soit ensuite facilement maintenable.
Configuration d’une base de données MySQL
Tout d’abord, nous devons créer une base de données, dans laquelle nous stockerons les données voulues, afin de pouvoir les faire afficher par le serveur REST et vérifier que tout fonctionne. On peut se servir de MySQL afin de gérer notre base de données.
On crée une base de données, par exemple:
CREATE DATABASE yii2basic
On crée la table « country », dans laquelle on entrera les données
CREATE TABLE `country` ( `code` CHAR(2) NOT NULL PRIMARY KEY, `name` CHAR(52) NOT NULL, `population` INT(11) NOT NULL DEFAULT '0' ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
On insère les données dans la table
INSERT INTO `country` VALUES ('AU','Australia',18886000); INSERT INTO `country` VALUES ('BR','Brazil',170115000); INSERT INTO `country` VALUES ('CA','Canada',1147000); INSERT INTO `country` VALUES ('CN','China',1277558000); INSERT INTO `country` VALUES ('DE','Germany',82164700); INSERT INTO `country` VALUES ('FR','France',59225700); INSERT INTO `country` VALUES ('GB','United Kingdom',59623400); INSERT INTO `country` VALUES ('IN','India',1013662000); INSERT INTO `country` VALUES ('RU','Russia',146934000); INSERT INTO `country` VALUES ('US','United States',278357000);
Il faut ensuite configurer la base de données, afin de pouvoir l’utiliser. On va donc modifier le fichier config/db.php
<?php return [ 'class' => 'yii\db\Connection', 'dsn' => 'mysql:host=localhost;dbname=yii2basic', 'username' => 'root', 'password' => 'votreMotDePasse', 'charset' => 'utf8', ];
[sharethis]
Création d’un modèle et d’un contrôleur
Ensuite, créons un modèle et un contrôleur pour cette table. Le modèle devra hériter de la classe ActiveRecord, afin de pouvoir manipuler et interagir avec la base de données. De plus, le contrôleur devra hériter de la classe ActiveController, ce qui permettra de supporter l’accès REST à la classe ActiveRecord.
models/Country.php
<?php namespace app\models; use yii\db\ActiveRecord; class Country extends ActiveRecord { public static function tableName() { return 'country'; } }
controllers/CountryController.php
<php namespace app\controllers; use Yii; use app\models\Country; use yii\web\Controller; use yii\rest\ActiveCountroller; class CountryController extends ActiveController { public $modelClass = 'app\models\Country'; }
Pour plus d’informations à propos de la coordination entre une application Yii2 et une base de données: http://www.yiiframework.com/doc-2.0/guide-start-databases.html
VirtualHost pour Apache
À l’aide d’ un virtualhost, on peut réduire le lien d’accès à notre site au plus simple possible. Par exemple, on peut réduire le chemin complet http://localhost/basic/web à http://monapp.com. Cela a aussi pour avantage de simuler un URL qui serait en production sur le net.
On effectue une copie du fichier 000-default.conf et on le modifie en y entrant certaines informations, afin de permettre la validité de notre VirtualHost
$ sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/monapp.com.conf
$ sudo nano /etc/apache2/sites-available/monapp.com.conf
<VirtualHost *:80> ServerAdmin admin@monapp.com ServerName monapp.com ServerAlias www.monapp.com DocumentRoot /var/www/web ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost>
On relance le service apache2 et on définit 127.0.0.1 monapp.com dans le fichier/etc/hosts
$ sudo a2ensite monapp.com.conf $ sudo service apache2 restart $ sudo nano /etc/hosts # On y ajoute: 127.0.0.1 monapp.com
Avec ces changements, vous pourrez désormais accéder à votre site internet directement sous le nom de http://monapp.com.
[sharethis]
Pretty URLs : comment retirer index.php? de l’URL
Les pretty URLs sont une façon de réduire la longueur d’un URL normal, afin de le rendre plus beau, facile à lire et à retenir. Par exemple, grâce aux pretty URLs, on peut modifier le lien suivant
http://www.monapp.com/index.php?page=articles
Vers le format suivant :
http://www.monapp.com/articles/
On se rend d’abord dans le fichier /etc/apache2/sites-available/monapp.conf. À la fin du fichier, après la balise </VirtualHost>, que l’on a placée lors de la section du VirtualHost, on y insère le code suivant, ce qui permettra d’alléger le lien du site:
/etc/apache2/sites-available/monapp.conf
# Set document root to be "basic/web" DocumentRoot "/var/www/basic/web/"
<Directory "/var/www/basic/web/"> # use mod_rewrite for pretty URL support RewriteEngine on # If a directory or a file exists, use the request directly RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d # Otherwise forward the request to index.php RewriteRule . index.php # ...other settings... </Directory>
Ensuite, on se rend dans /var/www/basic/config/web.php afin de modifier le fichier web.php. On change le code suivant, afin de permettre les pretty URLs et d’enlever le superflu.
/var/www/basic/config/web.php
'urlManager' => [ 'enablePrettyUrl' => true, 'showScriptName' = false, ]
http://www.yiiframework.com/doc-2.0/guide-start-installation.html
Création du service REST avec Yii 2 sur Ubuntu
Finalement, il ne reste qu’à configurer quelques éléments restants afin de permettre le fonctionnement du serveur REST.
Encore dans le fichier web.php, il faut aller définir le contrôleur utilisé par serveur REST.
'urlManager' => [ 'enablePrettyUrl' => true, 'enableStrictParsing' => true, 'showScriptName' => false, 'rules' => [ [ 'class' => 'yii\rest\UrlRule', 'controller' => 'country'], ], ]
Puis, afin que l’API puisse accepter le format JSON, nous devons aller modifier le contenu du fichier config\web.php avec ce qui se trouve dans le fichier yii\web\JsonParser
'request' => [ 'parsers' => [ 'application/json' => 'yii\web\JsonParser', ] ]
On effectue la commande suivante:
$ curl -i -H "Accept:application/json" "http://monapp.com/country"
Cela permettra de vérifier le fonctionnement du serveur REST.
On obtient donc le résultat suivant, qui définit que la requête a bien fonctionné:
HTTP/1.1 200 OK Date: Fri, 27 Mar 2015 13:48:23 GMT Server: Apache/2.4.6 (Ubuntu) X-Powered-By: PHP/5.5.3-1ubuntu2.6 X-Pagination-Total-Count: 10 X-Pagination-Page-Count: 1 X-Pagination-Current-Page: 1 X-Pagination-Per-Page: 20 Link: ; rel=self Content-Length: 540 Content-Type: application/json; charset=UTF-8 [{"code":"AU","name":"Australia","population":1000}, {"code":"BR","name":"Brazil","population":170115000}, {"code":"CA","name":"Canada","population":1147000}, {"code":"CN","name":"China","population":1277558000}, {"code":"US","name":"United States","population":278357000}]
Grâce à votre application, vous êtes désormais en mesure de comprendre le fonctionnement d’un serveur REST et ainsi éventuellement pouvoir les utiliser pour concevoir des sites web ou des applications mobiles qui consomment ces services.
Prochaine étape: sécuriser l’API !
[sharethis]
Poussez vos connaissances REST encore plus loin …
Créer un API REST – les outils et les techniques pour le développeur Web
Références
- http://fr.wikipedia.org/wiki/Representational_State_Transfer
- http://searchsoa.techtarget.com/definition/REST
- http://www.yiiframework.com/doc-2.0/guide-start-installation.html
- http://www.yiiframework.com/doc-2.0/guide-rest-quick-start.html
- http://www.yiiframework.com/doc-2.0/guide-start-databases.html
Voilà donc un bon article, bien passionnant. J’ai beaucoup aimé et n’hésiterai pas à le recommander, c’est pas mal du tout ! Elsa Mondriet