Services Web
Services Web

John Samuel
CPE Lyon

Année: 2018-2019
Courriel: john(dot)samuel(at)cpe(dot)fr

Creative Commons License

Services Web

URL

https://www.example.com/index.html

ou

https://www.example.com/index.php

ou

https://www.example.com/

Services Web

URL

https://www.example.com/index.php?lang=fr
https://www.example.com/index.php?lang=en
https://www.example.com/index.php?lang=es

ou

https://www.example.com/fr/index.php
https://www.example.com/en/index.php
https://www.example.com/es/index.php

Services Web

URL

https://www.example.com/fr/index.php
https://www.example.com/en/index.php
https://www.example.com/es/index.php

ou

https://www.example.com/fr/
https://www.example.com/en/
https://www.example.com/es/

Services Web

URL

https://www.example.com/index.php?operation=listStudents

ou

https://www.example.com/students/

Services Web

URL

https://www.example.com/index.php?operation=showStudent
https://www.example.com/index.php?operation=AddStudent
https://www.example.com/index.php?operation=deleteStudent
https://www.example.com/index.php?operation=updateStudent

ou

https://www.example.com/students/1/

Services Web

Objectifs

Services Web

Réécriture d'URL (URL rewriting)

Installation d'apache

$ sudo apt install apache2 php7.0 libapache2-mod-php7.0

Activation de réécriture

$ sudo a2enmod rewrite
$ sudo service apache2 restart

Réécriture d'URL

Vérification

<?php
 phpinfo()
?>

screenshot of php mod_rewrite enabled

Réécriture d'URL

Configuration (Activation des fichiers .htaccess)

Vérifier le fichier /etc/apache2/sites-available/000-default.conf

DocumentRoot /var/www/html
..
<Directory "/var/www/html">
 AllowOverride All
</Directory>

Redémarrer apache2

$ sudo service apache2 restart

Réécriture d'URL

Redirection transparente vers index.php

.htaccess

DirectoryIndex index.php

Réécriture d'URL

Redirection transparente vers index.php

.htaccess

DirectoryIndex accueil.php

Réécriture d'URL

Redirection transparente vers index.php

.htaccess

DirectoryIndex accueil.php index.php

Réécriture d'URL

.htaccess

RewriteEngine on
RewriteRule ^test.html$ /index.php

Réécriture d'URL

.htaccess

RewriteEngine on
RewriteRule "^.+.html$" /index.php

Réécriture d'URL

.htaccess

RewriteEngine on
ErrorDocument 404 /404.php
RewriteRule "^(.+)/index.php$" /index.php?lang=$1

Réécriture d'URL

.htaccess

RewriteEngine on
RewriteRule "^(.+)/index.html$" /index.php?lang=$1

Réécriture d'URL

.htaccess

RewriteEngine on
RewriteRule ^students/(.+)/$ /students/index.php?id=$1
RewriteRule ^students/(.+)/(.+)$ /students/index.php?id=$1&param=$2

Réécriture d'URL

Erreur ressource non trouvée

.htaccess

RewriteEngine on
ErrorDocument 404 /404.php

Services Web

Récupération de paramètres GET: PHP

<?php
$language = "fr";
if($_GET["lang"]) {
$language = $_GET["lang"];
}

if($language == "en") {
echo "Hello!";
}
else if($language == "fr") {
echo "Bonjour!";
}
?>

REST

Services Web

Contraintes

Une architecture REST doit respecter les six contraintes suivantes

  1. un architecture client-serveur
  2. Un serveur sans état
  3. Avec cache
  4. À interface uniforme
  5. En couches
  6. Code à la demande (facultatif)

Services Web

Contraintes

À interface uniforme

  1. identification des ressources
  2. manipulation des ressources par des représentations (XML, JSON etc.)
  3. messages auto-descriptifs
  4. hypermédia comme moteur d'état de l'application

Services Web

Hypermédia en tant que moteur de l'état d'application

Un client REST n'a besoin d'aucune connaissance préalable sur la façon d'interagir avec une application ou un serveur particulier au-delà d'une compréhension générique de l'hypermédia.

Services Web

API Github (REST)

REST API of Github

Services Web

RESTful Services Web

Différents niveaux [2]

  1. Niveau 0: HTTP
  2. Niveau 1: Ressources
  3. Niveau 2: Verbs HTTP (GET, POST, PUT, DELETE)
  4. Niveau 3: Hypermedia
https://www.example.com/students/
https://www.example.com/students/1/
https://www.example.com/students/1/module1/

Services Web

Liste des codes HTTP

  1. 1xx - Information
  2. 2xx - Succès
  3. 3xx - Redirection
  4. 4xx - Erreur du client web
  5. 5xx - Erreur du serveur / du serveur d'application

Services Web

Liste des codes HTTP

Les codes les plus courants sont :

  1. 200 : succès de la requête ;
  2. 301 et 302 : redirection, respectivement permanente et temporaire ;
  3. 401 : utilisateur non authentifié ;
  4. 403 : accès refusé ;
  5. 404 : page non trouvée ;
  6. 500 et 503 : erreur serveur ;
  7. 504 : le serveur n'a pas répondu.

Conception et création d'API Restful

cURL

  1. client URL request library : « bibliothèque de requêtes aux URL pour les clients »
$ curl example.com

Conception et création d'API Restful

cURL: en-tête (header)

$ curl -I http://localhost/index.php

Sortie

HTTP/1.1 200 OK
Date: Thu, 26 Apr 2018 18:54:18 GMT
Server: Apache/2.4.18 (Ubuntu)
Content-Length: 14
Content-Type: text/html; charset=UTF-8

Conception et création d'API Restful

cURL: GET

$ curl http://localhost/index.php
$ curl -X GET http://localhost/index.php

Conception et création d'API Restful

cURL: POST

$ curl -X POST http://localhost/index.php
$ curl -X POST --data 'user:abc' http://localhost/index.php
$ curl -X POST -d @file.json http://localhost/index.php

Conception et création d'API Restful

cURL: PUT

$ curl -X PUT http://localhost/index.php
$ curl -X PUT --data '' http://localhost/index.php
$ curl -X PUT -d @file.json http://localhost/index.php

Conception et création d'API Restful

cURL: DELETE

$ curl -X DELETE http://localhost/index.php

Conception et création d'API Restful

methode HTTP

$_SERVER['REQUEST_METHOD']

Conception et création d'API Restful

PHP: récupération de paramétres

$data = json_decode(file_get_contents('php://input'), true);

Conception et création d'API Restful

PHP:

echo http_response_code(521);

Conception et création d'API Restful

.htaccess

RewriteEngine on
ErrorDocument 404 /404.php
RewriteRule ^(.+)/$ /index.php?resource=$1
RewriteRule ^(.+)/(.+)$ /index.php?resource=$1&id=$2

Services Web

Références

  1. Rodríguez, Carlos, et al. REST APIs: a large-scale analysis of compliance with principles and best practices. International Conference on Web Engineering. Springer, Cham, 2016.
  2. Pautasso, Cesare. RESTful web services: principles, patterns, emerging technologies. Web Services Foundations. Springer, New York, NY, 2014. 31-51.
  3. Samuel, John, and Christophe Rey. Integration of Multiple Heterogeneous and Autonomous Web Services using Mediation Approach: Open Challenges. Journal on Advances in Theoretical and Applied Informatics 2.2 (2016): 38-46.

Services Web

Références