PHP
API REST CodeIgniter
Laurent d’Orazio
2022/2023
1. Résumé
Le but de ce document est d’aider à la mise en place d’une API REST avec le Framework PHP
CodeIgniter.
2. Configuration
Ouvrir le fichier application/config/database.php avec un éditeur de texte pour y saisir les
paramètres concernant la base de données. Les variables suivantes doivent être modifiées :
'DSN' => '',
'hostname' => 'servbdd.iutlan.etu.univ-rennes1.fr',
'username' => '<votre login>',
'password' => '<votre mot de passe>',
'database' => 'pg_<votre login>',
'DBDriver' => 'postgre',
Renseigner le préfixe peut être utile si les tables sont placées dans un schéma particulier (ici
taches), par exemple. Il faut alors modifier la variable suivante :
'DBPrefix' => '',
3. Cas de la base de données
Cette section introduit la gestion de la base de données.
3.1. Création sur le SGBD
L’extrait du script SQL ci-dessous permet de créer une base de données et de la peupler.
--
-- Structure de la table `employee`
--
CREATE TABLE `employee` (
`id` int(11) NOT NULL COMMENT 'Primary Key',
`name` varchar(100) NOT NULL COMMENT 'Name',
`email` varchar(255) NOT NULL COMMENT 'Email Address'
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COMMENT='datatable demo table';
--
-- Déchargement des données de la table `employee`
--
INSERT INTO `employee` (`id`, `name`, `email`) VALUES
(1, 'Alice', '
[email protected]'),
(2, 'Bob', '
[email protected]');
Figure 1. Table employee
Laurent d’Orazio, 2022/2023
1
3.2. Définition du modèle
Au lieu d’écrire les opérations sur la base de données directement dans le contrôleur, les
requêtes doivent être placées dans un modèle, de telle façon qu’elles puissent être facilement
réutilisées plus tard. Les modèles sont l’endroit où il est possible de rechercher, insérer et
mettre à jour des informations dans la base de données ou dans d’autres supports de
stockage. Ils représentent les données.
Ouvrir le répertoire app/models et créer un nouveau fichier appelé EmployeeModel.php et
ajouter le code suivant. Il convient de bien avoir configuré votre base de données dans
CodeIgniter.
<?php
namespace App\Models;
use CodeIgniter\Model;
class EmployeeModel extends Model
{
protected $table = 'employee';
protected $primaryKey = 'id';
protected $allowedFields = ['name', 'email'];
}
Figure 2. Ébauche de modèle (app/models/EmployeeModel.php)
4. Contrôleur REST
Une fois la base de données et le modèle définis, il sera nécessaire de proposer un contrôleur
REST pour intégrer les fonctions permettant les opérations de création, de lecture, de
modification et de suppression des données (CRUD pour Create, Read, Update et Delete).
4.1. Base du contrôleur
Dans un premier temps, il convient de créer les bases du contrôleur. Créer le contrôleur dans
un fichier app/controllers/Employee.php. Celui-ci étant la classe ResourceController.
CodeIgniter fournit ensuite ResponseTrait, pour simplifier les types courants de réponse,
sans avoir besoin de gérer notamment les codes d'état http.
<?php namespace App\Controllers;
use CodeIgniter\RESTful\ResourceController;
use CodeIgniter\API\ResponseTrait;
use App\Models\EmployeeModel;
class Employee extends ResourceController
{
use ResponseTrait;
public function index(){
}
Figure 3. Nouveau contrôleur ListeDeTaches (app/controlers/ListeDeTaches.php)
4.1. Lecture
L’opération de lecture de l’intégralité des données sera considérée comme opération par
défaut du contrôleur et sera par conséquent intégrée au sein de la fonction index. Compléter
le fichier app/controllers/Employee.php. avec le code suivant :
Laurent d’Orazio, 2022/2023
2
public function index()
{
$model = new EmployeeModel();
$data['employees'] = $model->orderBy('id', 'DESC')->findAll();
return $this->respond($data);
}
Figure 4. Méthode index du contrôleur Employee (app/controlers/Employee..php)
Le code ci-dessus récupère toutes les données au travers du modèle et les trie par ordre
décroissant d’identifiant. La réponse est ensuite fournie pour alimenter l’API.
Vérifier le bon fonctionnement de l’opération de lecture :
http://localhost:8888/ci4.1.8_api_rest/public/index.php/employee
Il convient de permettre à l’utilisateur de demander un enregistrement particulier, donné par
son identifiant. Pour ce faire, il est proposé d’ajouter une méthode show au contrôleur.
public function show($id = null){
$model = new EmployeeModel();
$data = $model->where('id', $id)->first();
if($data){
return $this->respond($data);
}else{
return $this->failNotFound('No employee found');
}
}
Figure 5. Méthode show du contrôleur Employee (app/controlers/Employee..php)
4.2. Création
L’opération de création a pour objectif d’ajouter un nouvel enregistrement dans la base de
données. Les valeurs de l’enregistrement sont transmises. L’identifiant sera dans ce cas-là
générer au niveau du SGBD. Compléter le fichier app/controllers/Employee.php. avec le
code suivant :
public function create() {
$model = new EmployeeModel();
$data = [
'name' => $this->request->getVar('name'),
'email' => $this->request->getVar('email'),
];
$model->insert($data);
$response = [
'status' => 201,
'error' => null,
'messages' => [
'success' => 'Employee created successfully'
]
];
return $this->respondCreated($response);
}
Figure 6. Méthode create du contrôleur Employee (app/controlers/Employee..php)
Vérifier le bon fonctionnement de l’opération de la création avec :
http://localhost:8888/ci4.1.8_api_rest/public/index.php/employee/create?name=carole&e
[email protected]Laurent d’Orazio, 2022/2023
3
4.3. Modification
L’opération de modification permet de modifier un enregistrement et d’attribuer des
nouvelles valeurs aux attributs, à l’aide d’un passage de paramètre CGI. Compléter le fichier
app/controllers/Employee.php. avec le code suivant :
public function update($id = null){
$model = new EmployeeModel();
$id = $this->request->getVar('id');
$data = [
'name' => $this->request->getVar('name'),
'email' => $this->request->getVar('email'),
];
$model->update($id, $data);
$response = [
'status' => 200,
'error' => null,
'messages' => [
'success' => 'Employee updated successfully'
]
];
return $this->respond($response);
}
Figure 7. Méthode update du contrôleur Employee (app/controlers/Employee..php)
Vérifier le bon fonctionnement de l’opération de modification :
http://localhost:8888/ci4.1.8_api_rest/public/index.php/employee/update?id=1&name=Da
ve&
[email protected] 4.1. Suppression
L’opération de suppression permet d’effacer de la base de données un enregistrement donné
par son identifiant. Compléter le fichier app/controllers/Employee.php. avec le code
suivant :
public function delete($id = null){
$model = new EmployeeModel();
$data = $model->where('id', $id)->delete($id);
if($data){
$model->delete($id);
$response = [
'status' => 200,
'error' => null,
'messages' => [
'success' => 'Employee successfully deleted'
]
];
return $this->respondDeleted($response);
}else{
return $this->failNotFound('No employee found');
}
}
Figure 8. Méthode delete du contrôleur Employee (app/controlers/Employee..php)
Vérifier le bon fonctionnement de l’opération de lecture :
http://localhost:8888/ci4.1.8_api_rest/public/index.php/employee/delete/11
Il conviendra de changer la valeur de l’identifiant, selon les valeurs des enregistrements
disponibles.
Laurent d’Orazio, 2022/2023
4
5. Routage
Il est ensuite possible de définir les règles de routage pour simplifier l’accès à l’API. Pour cela
il convient de modifier le fichier app/Config/Routes.php.
Rechercher la ligne :
$Route->get('/', 'home::index');
Remplacer la par :
$routes->resource('employee');
Il convient maintenant de tester les différentes opérations. Il sera possible pour cela d’utiliser
un outil tel que Postman.
Récupérer l’ensemble des enregistrements (GET) :
http://localhost:8080/employee
Récupérer un enregistrement via son identifiant (GET) :
http://localhost:8080/employee/4
Modifier un enregistrement (PUT) :
http://localhost:8080/employee/4
Ajouter un enregistrement (POST) :
http://localhost:8080/employee
Supprimer un enregistrement (DELETE) :
http://localhost:8080/employee/5
Laurent d’Orazio, 2022/2023
5