les entreprises ont dut fournir à leur client et partenaire de plus en plus de services « à la demande » depuis les années 2000.
Ainsi le protocole HTTP s’est imposé comme fondement « réseau » de la plupart des échanges entre application.
L'HyperText Transfer Protocol, plus connu sous l'abréviation HTTP — littéralement « protocole de transfert hypertexte » — est un protocole de communication client-serveur développé pour le World Wide Web.
HTTPS (avec S pour secured, soit « sécurisé ») est la variante du HTTP sécurisée par l'usage des protocoles SSL ou TLS.
HTTP est un protocole de la couche application. Il peut fonctionner sur n'importe quelle connexion fiable, dans les faits on utilise le protocole TCP comme couche de transport.
La version actuelle de http est la version 1.1. Elle a été publié par IETF en Février 2014 dans les RFC 7230 à 7237.
HTTP est un protocole client-serveur à commande : c’est-à-dire qu’il demande à un serveur de faire quelques choses et de renvoyer quelques choses à l’appelant.
La commande est encapsulée dans une requête les éventuels retour dans une réponse.
Le protocole HTTP/2 diffère de HTTP/1.1 sur plusieurs aspects:
HTTP/2 compresse les en-têtes, étant donné que des en-têtes similaires sont échangés lors d'une suite de requêtes, on supprime ainsi la duplication et l'échange inutiles des données similaires.
Il permet au serveur de remplir le cache du client avant qu'il ne soit demandé par ce dernier, on parle alors d'évènements générés par le serveur.
La requête est composée d’une zone d’entête et d’un corps.
Les entêtes sont codifiées mais extensibles
Le corps référence une URI et une méthode à exécuter.
La réponse est composée d’une zone d’entête et d’un corps.
Les entêtes sont codifiées mais extensibles
Le corps comporte ou pas du contenu et peut être facultatif selon la méthode utilisée.
GET est la méthode la plus courante pour demander une ressource. Une requête GET est sans effet sur la ressource, il doit être possible de répéter la requête sans effet.
HEAD ne fait que demander des informations sur la ressource, sans demander la ressource elle-même.
POST transmet des données en vue d'un traitement à une ressource. L'URI fourni est l'URI d'une ressource à laquelle s'appliqueront les données envoyées.
OPTIONS obtient les options de communication d'une ressource ou du serveur en général.
CONNECT pour utiliser un proxy comme un tunnel de communication.
TRACE demande au serveur de retourner ce qu'il a reçu, dans le but de tester et effectuer un diagnostic sur la connexion.
PUT remplace ou ajoute une ressource sur le serveur. L'URI fourni est celui de la ressource en question.
PATCH fait une modifie partiellement une ressource, contrairement à PUT.
DELETE supprime une ressource du serveur.
Informations et documents dans l’entreprise
Constat :
Pour structurer cette « masse » d’information, il faut la transformer en donnée.
Une donnée est une information structurée.
Cela peut se faire soit en travaillant directement sur les informations ou en en ajoutant d’autres afin de pouvoir plus facilement retrouver ce que l’on recherche.
Le WORLD WIDE WEB Consortium crée des standards pour le Web.
Le W3C en 7 points…
Pour plus d’informations : www.w3c.org
| 1986 : SGML | 1991 : HTML | 1998 : XML | |
|---|---|---|---|
| Objectifs | adaptabilité | simple | puissance de SGML |
| intelligence | portable | Simplicité de SGML | |
| gestion des liens | gestion de liens | ||
| Inconvénients | complexee | non adaptable | |
| difficilement portable | non intelligent |
eXtensible Markup Language
2 concepts fondamentaux
Conséquences :
Richesse sémantique de SGML
Facilité de mise en œuvre de HTML
<song> <title> Ma chanson </ title > <composer> par l’auteur</ composer > < producer > Dupond</producer> <editor> Maison edition</ editor > <duration > 6:20</duration> <date> 1978</ date > < artist > Toto</artist> </song>
entete
<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?> <?xml-stylesheet type="text/xsl" href="presentation1.xsl"?> <exposition>
Contenu
<tableau> <titre>Déjeuner sur l'herbe</titre> <artiste>Edouard Manet</artiste> </tableau> <tableau> <titre>Déjeuner des Canotiers</titre> <artiste>Auguste Renoir</artiste> </tableau> <tableau> <titre>Waterloo Bridge, le soleil dans le brouillard</titre> <artiste>Claude Monet</artiste> </tableau> <tableau> <titre>Mardi Gras, soleil couchant, bd Montmartre</titre> <artiste>Camille Pissaro</artiste> </tableau> <tableau> <titre>Les Joueurs de cartes</titre> <artiste>Paul Cézanne</artiste> </tableau> </exposition> </xml>
Résumé des spécifications :
Un document respectant ces critères est dit “bien formé“
Exemple de fichiers XML :
<adresses> <!--Carnet d'adresses--> <personne id= "personnel"> <type classe= "famille"/> <nom>Durand</nom> <prenom>Martine</prenom> <adr:adresse>6, rue des Magnolias</adr:adresse> </personne> </adresses>
JSON (Javascript Object Notation) est un format de donnée textuelle. Il est permet de représenter de l’information structurée et en particuliers des Objets Javascript.
Il est décrit dans la RFC 7159 de l’IETF.
En ce sens c’est un « concurrent » d’XML.
JSON n’utilise que deux types d’éléments structurels :
Ces éléments structurels peuvent représenter trois types de données :
JSON contrairement à XML ne se veut pas universel et ne peut être étendu.
Toutefois, il est moins verbeux qu’XML et aussi « lisible » que lui.
JSON ne peut être validé et il est donc à la charge du développeur de vérifier si les éléments récupérés sont bien ceux attendus.
Un document JSON représente un Objet Javascript.
Le type MIME application/json est utilisé pour transporter un document JSON sur HTTP.
Historiquement, l’opérateur eval était utilisé pour « transformer » une chaine de caractère en Object javascript.
Pour des raisons de sécurité, les navigateurs « modernes » intègrent nativement JSON et fournissent l’objet Natif JSON pour évaluer les documents JSON
var data = JSON.parse(json_data);
La structuration de l’information est importante mais il est aussi nécessaire de pouvoir « comprendre » la structure d’un document.
Pour cela il est nécessaire de définir la grammaire de notre document.
Il existe deux modes de définition de celle-ci :
DTD = Document Type Definition
La DTD fournit :
Résumé des spécifications :
Un document XML est dit “valide” s’il possède une DTD et si sa syntaxe est conforme aux règles de la DTD
Un document “valide” est obligatoirement « bien formé »
La DTD est déclarée dans le document XML par la balise !DOCTYPE
Elle peut être :
<!DOCTYPE élément-racine [déclaration des éléments]>
<!DOCTYPE élément-racine SYSTEM "nom_fichier.dtd">
<?xml version="1.0" standalone="yes"?> <!--Comme vous définissez une DTD interne, votre fichier est indépendant (standalone).--> <!DOCTYPE parent [ <!--Début de la DTD interne avec parent comme élément de racine.--> <!ELEMENT parent (garcon,fille)> <!--L’élément racine parent contiendra les sous-éléments garcon et fille.--> <!ELEMENT garcon (#PCDATA)> <!ELEMENT fille (#PCDATA)> <!--#PCDATA indique au Parser XML que l'élément garcon contient des données exprimées en chiffres ou en lettres. Idem pour l'élément fille.--> ]> <!--Fin de la DTD--> <parent> <!--Racine du document XML.--> <garcon>François</garcon> <fille>Elisabeth</fille> </parent> <!--Fin du document XML.-->
fichier XML
<?xml version="1.0" standalone="no"?> <!--Comme vous définissez une DTD externe, votre fichier n’est plus indépendant (standalone).--> <!DOCTYPE parent SYSTEM "parent.dtd"> <!--Déclaration de la DTD externe dans le Fichier parent.dtd.--> <parent> <!--Racine du document XML.--> <garcon>François</garcon> <fille>Elisabeth</fille> </parent> <!--Fin du document XML-->
Fichier parent.dtd
<!ELEMENT parent (garcon,fille)> <!--L’élément racine parent contiendra les sous-éléments garcon et fille.--> <!ELEMENT garcon (#PCDATA)> <!ELEMENT fille (#PCDATA)> <!-- #PCDATA indique au Parser XML que l'élément garcon contient des données exprimées en chiffres ou en lettres. Idem pour l'élément fille. -->
La DTD contient :
Une ou plusieurs définitions d’éléments introduites par la balise !ELEMENT :
<!ELEMENT nom-élément valeur>
Une ou plusieurs listes d’attributs introduites par la balise !ATTLIST :
<!ATTLIST nom-élément attribut type défaut>
Une ou plusieurs définitions d’entité introduites par la balise !ENTITY :
<!ENTITY nom-entité "valeur">
ou
<!ENTITY nom-entité SYSTEM "nom_fichier">
Espaces de nom
Inconvénients des DTD :
En réponse aux lacunes des DTD, une alternative a été proposée comme recommandation : il s’agit de XML-Data dont XML-Schema est un sous-ensemble.
Cette nouvelle norme achève de faire d’XML un format pivot…
La version 1.1 de XML Schema (datée de mai 2001) se compose de 3 normes :
Les documents XML-Schema sont des documents qui :
XML-Schema permet en effet de :
Document XML
<entree> <nom>Harry Potter</nom> <telephone>0102030405</telephone> </entree>
Document XML-schema correspondant
<wsd:schema xmlns:xsd="http://www.w3org/2000/10/XMLSchema"> <!--entete--> <xsd:element name="entree"> <!--Définition de la balise complexe "entree"--> <xsd:complexType> <xsd:sequence> <xsd:element name="nom" type="xsd:string" minoccurs="1" maxoccurs="1"/> <!-- Définition de la balise string "nom"--> <xsd/emement name="telephone" type="xsd:decimal"/> <!--Définition de la balise de type Décimal telephone--> </xsd:complexType> </xsd:element> </xsd:schema>
Référence à un XML-Schema dans un document XML
<entree xmlns="http://www.annuaire.org" xmlns:xsi="http://www.w3.org/2000/10/XMLSchema-instance" xsi:schemaLocation="http://www.annuaire.org/entree.xsd"> <nom>Harry Potter</nom> <telephone>012030405</telephone> </entree>
L’espace de nommage xsi correspond aux instances de documents XML respectant les contraintes définies dans un document XML-Schema. Le W3C a défini une librairie de balises et attributs pouvant être utilisés par ces documents.
La DTD permet de définir facilement et rapidement des grammaires simples.
XML-Schema permet de définir de manière plus formelle et complète une grammaire mais c’est au prix d’une complexité accrue.
Un document XML-Schema respecte la syntaxe XML.
Un document XML-Schema est généralement plus volumineux et plus difficile à lire qu’une DTD (pour un opérateur humain).
<?xml version="1.0" encoding="ISO-8859-1" standalone="no" ?> <cave xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation='td2.xsd'> <appellation id="01" nom="Saint Estèphe"> <chateau id="0101"> <nom> Chateau Bellevue</nom> <adresse> 12 Rue du Pont</adresse> <téléphone> 0556124321</téléphone> </chateau> <chateau id="0102"> <nom> Chateau Le Bernadot</nom> <adresse> 21 Avenue du Cygne</adresse> <téléphone> 0556324231</téléphone> </chateau> </appellation> </cave> <?xml version="1.0" encoding="ISO-8859-1"?> <xsd:schema xmlns:xsd='http://www.w3.org/2001/XMLSchema'> <xsd:element name="cave"> <xsd:complexType> <xsd:sequence> <xsd:element ref="appellation" minOccurs='1' maxOccurs='unbounded'/> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:element name="appellation"> <xsd:complexType> <xsd:sequence> <xsd:element ref="chateau" minOccurs='0' maxOccurs='unbounded'/> </xsd:sequence> <xsd:attribute name="id" type="xsd:integer" use='required'/> <xsd:attribute name="nom" type="xsd:string"/> </xsd:complexType> </xsd:element> <xsd:element name="chateau"> <xsd:complexType> <xsd:sequence> <xsd:element ref="nom" minOccurs='1' maxOccurs='1'/> <xsd:element ref="adresse"/> <xsd:element ref="téléphone"/> </xsd:sequence> <xsd:attribute name="id" type="xsd:integer" use='required'/> </xsd:complexType> </xsd:element> <xsd:element name="nom" type="xsd:string"/> <xsd:element name="adresse" type="xsd:string"/> <xsd:element name="téléphone" type="xsd:decimal"/> </xsd:schema>
Les outils destinés à transformer les documents XML représentent ceux-ci comme un arbre de nœuds XML.
XSL est le langage qui permet d’écrire des feuilles de style. Une feuille de style est constituée d’un ensemble de règles de transformations, s’appliquant chacune à un ou plusieurs nœuds de l’arbre et permettant de transformer ce nœud en un nouveau nœud de l’arbre résultat.
XPath est le langage qui permet d’adresser une partie ou plusieurs parties d’un document, c’est à dire un ou plusieurs nœuds du document XML.
Transformation effectuée par un processeur XSL Selon http://www.w3.org/Style/XSL/
XSL : eXtensible Stylesheet Language.
Objectifs : Ce langage déclaratif permet de transformer un document XML en :
Le langage XSLT décrit des règles pour transformer un document XML.
Ces règles de transformations s’appliquent chacune à un ou plusieurs nœuds de l’arbre et spécifient la transformation à effectuer sur un nœud pour le transformer en un nouveau nœud de l’arbre résultat.
Un processeur XSLT applique à un document XML les transformations décrites dans un document XSLT et génère un nouveau document (XML, HTML, texte)
Fonctions de base (transformations) offertes par une feuille de style XSLT :
Site de référence :
Exemple Processeur côté serveur : un processeur installé sur le serveur envoie, après traitement le document résultant au client déploiement des servlets de transformation sous tomcat).
Dans l’exemple qui suit, on souhaite transformer un document XML en document HTML :
XML source
<personne id="0001"> <nom>Durand</nom> <prenom>Martine</prenom> </personne>
HTML cible
<html> <body> <p><b>Durand</b> Martine</p> </body> </html>
XSLT correspondant
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="html" indent="yes" encoding="ISO-8859-1"/> <xsl:template match="personne"> <html> <body> <p> <b><xsl:value-of-select="nom"/></b> <xsl:value-of select="prenom"/> </p> </body> </html> </xsl:template> </xsl:stylesheet>
XSL est un langage XML permettant de définir des feuilles de style
Les composants d’un document XSL sont :
Avantages d’XSLT :
Inconvénients d’XSLT :
XSLT versus CSS :