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

Création d'un API RESTful avec PHP et Yii 2 sur Ubuntu

1 réponse

Répondre

Want to join the discussion?
Feel free to contribute!

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *