0% ont trouvé ce document utile (0 vote)
5 vues27 pages

Version Clean

Le document présente une comparaison entre XML et JSON, soulignant que XML est un langage de structuration des données tandis que JSON est un format léger pour l'échange de données. Il décrit également la structure d'un document XML, les règles de validité, et les différences clés entre XML et JSON, notamment en termes de simplicité, de sécurité et de types de données. Enfin, le document aborde les services Web et le protocole HTTP, en expliquant leur rôle dans l'accès et l'échange de ressources sur Internet.

Transféré par

mohamedali abid
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
5 vues27 pages

Version Clean

Le document présente une comparaison entre XML et JSON, soulignant que XML est un langage de structuration des données tandis que JSON est un format léger pour l'échange de données. Il décrit également la structure d'un document XML, les règles de validité, et les différences clés entre XML et JSON, notamment en termes de simplicité, de sécurité et de types de données. Enfin, le document aborde les services Web et le protocole HTTP, en expliquant leur rôle dans l'accès et l'échange de ressources sur Internet.

Transféré par

mohamedali abid
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

eXtensible Markup Language

1. XML vs HTML
• HTML : langage de présentation des données sur le Web
→ répond à comment présenter les données ?
→ s’intéresse à la forme
• XML : langage de structuration des données
→ répond à comment structurer les données ?
→ s’intéresse au fond
• Complémentarité :
o Le Web évolue vers une séparation contenu / présentation
o HTML (ou CSS) reste utilisé pour la mise en forme, XML pour les données

2. XML vs Bases de données


• Les bases de données relationnelles (SGBD) offrent de bonnes performances mais ne sont
pas toujours adaptées aux usages métiers complexes
• XML permet de :
o Regrouper les données selon leurs dépendances
o Structurer les données en fonction des usages principaux

3. Définition de XML
• XML est un méta-langage universel pour l’échange de données sur le Web
• Permet l’échange de contenu entre applications et navigateurs
• Développé par le W3C
• Supporté par les grands acteurs (IBM, Microsoft, Sun, etc.)
• Dispose de nombreux outils ouverts et génériques

4. Objectifs de XML
• Utilisable directement sur le Web
• Supporter une grande variété d’applications
• Être compatible avec SGML
• Être simple, formel et rapide à développer
• Faciliter la création des documents

1
5. Structure d’un document XML

Prologue

• Déclaration XML : <?xml version="1.0" encoding="UTF-8" standalone="yes"?>


• Attributs obligatoirement dans l’ordre : version → encoding → standalone
• Peut contenir une DTD ou un schéma XML

Élément racine

• Élément unique englobant tout le document


• Contient des éléments de données :
o Simples : valeur unique via attributs
o Complexes : éléments imbriqués (structure arborescente)

Modèle XML

• Structure arborescente
• Données organisées sous forme de nœuds (parents / enfants)

6. Validité des documents XML

Document bien formé

• Respecte la syntaxe XML


• Peut être analysé (parsable)
• Pas forcément conforme à une DTD

Document valide

• Bien formé
• Conforme à une DTD ou un schéma XML

7. Règles d’un document XML bien formé


• Une seule balise racine
• Balises correctement ouvertes et fermées
• Pas d’entrelacement de balises
• Sensible à la casse (majuscules/minuscules)
• Valeurs d’attributs entre guillemets
• Caractères spéciaux remplacés par des entités (&lt;, &amp;, etc.)
• Noms : Commencent par une lettre ou « _ » et ne commencent pas par xml
• Aucun espace dans les balises (<tag> et non < tag >)

8. Éditeurs XML
• EditML : découverte
• XMLmind : libre
• Oxygen XML : shareware
• Altova XML Spy : leader du marché

2
Exercice 1 :

<?xml version="1.0" encoding="UTF-8"?>


<article>

<auteur>Body Lapointe</auteur>
<copyright/>
<titre>Introduction à XML</titre>

<section>
<titre>Rappel HTML</titre>
<paragraphe>Balises HTML</paragraphe>
</section>

<section>
<titre>Présentation de XML</titre>
<paragraphe>Document bien formé</paragraphe>
<paragraphe>Document valide</paragraphe>
</section>

</article>

Exercice 2 :

<?xml version="1.0" encoding="UTF-8"?>


<eaux_minerales>
<bouteille marque="Cristaline">
<contenance unite="cl">150</contenance>
<source>
<lieu>St-Cyr la Source</lieu>
<departement>Loiret</departement>
</source>
<ions>
<calcium unite="mg/l">71</calcium>
<magnesium unite="mg/l">5.5</magnesium>
<chlorures unite="mg/l">20</chlorures>
<nitrates unite="mg/l">1</nitrates>
</ions>
<ph>7.45</ph>
<code_barre>3274080005003</code_barre>
<contaminants>
<fer>en suspension</fer>
</contaminants>

7
<etat>sale</etat>
</bouteille>

<bouteille marque="Garci">
<contenance unite="cl">50</contenance>
<source>
<lieu>Source d'Aurèle</lieu>
<departement>Alpes Maritimes</departement>
</source>
<ions>
<calcium unite="mg/l">98</calcium>
<magnesium unite="mg/l">4</magnesium>
<chlorures unite="mg/l">3.6</chlorures>
<nitrates unite="mg/l">2</nitrates>
</ions>
<ph>7.4</ph>
<code_barre>3268840001008</code_barre>
</bouteille>

<bouteille marque="Volvic">
<contenance unite="cl">150</contenance>
<source>
<lieu>Volvic</lieu>
<departement>Puy-de-Dôme</departement>
</source>
<ions>
<calcium unite="mg/l">11.5</calcium>
<magnesium unite="mg/l">8.0</magnesium>
<chlorures unite="mg/l">13.5</chlorures>
<nitrates unite="mg/l">6.3</nitrates>
</ions>
<ph>7</ph>
<code_barre>3057640117008</code_barre>
<particules>
<silice>présente</silice>
</particules>
<commentaire>pH neutre</commentaire>
</bouteille>
</eaux_minerales>

8
JavaScript Object Notation

1. Introduction
• JSON est un format créé à l’origine pour la sérialisation et l’échange d’objets JavaScript
• C’est un format texte léger (lightweight) :
o Plus léger que XML
o Plus rapide à lire et à parser
• Utilisé pour l’échange de données semi-structurées (et parfois structurées)
• Très utilisé dans le Web (exp : applications Ajax, API REST)
• Indépendant du langage, même s’il est basé sur un sous-ensemble de JavaScript

2. Comparaison XML vs JSON

Aspect JSON XML

Simplicité Simple à lire et à écrire Moins simple que JSON

Courbe Facile à apprendre Moins facile que JSON


d'apprentissage

Orientation Orienté données Orienté document

Affichage des données Ne permet pas d'afficher les Permet d'afficher les données (langage de
données balisage)

Support des tableaux Supporte nativement les tableaux Ne supporte pas directement les tableaux

Sécurité Moins sécurisé que XML Plus sécurisé

Lisibilité humaine Fichiers plus lisibles par l'homme Fichiers moins lisibles par l'homme

Types de données Supporte uniquement texte et Supporte nombreux types : texte,


nombres nombres, images, etc.

Métadonnées et Transmet uniquement les Transmet aussi le format et la structure


structure données des données

Taille des fichiers Généralement plus léger Généralement plus volumineux

Parsing Parsing plus rapide (en JavaScript) Parsing plus lent

Usage typique API web, échange de données, Documents structurés, échanges B2B,
configuration SOAP

11
3. Syntaxe JSON

JSON repose sur deux structures fondamentales :

• Paires clé / valeur (objet) : Comparable à un dictionnaire ou une structure


• Listes ordonnées (tableaux) : Listes de valeurs

Types de valeurs possibles

• Chaîne de caractères (" ")


• Nombre (pas de format hexadécimal ou octal)
• true, false, null
• Objet
• Tableau

4. XML and JSON

<employees> {
<employee> "employees": [
<firstName>John</firstName> {
<lastName>Doe</lastName> "firstName": "John",
</employee> "lastName": "Doe"
<employee> },
<firstName>Anna</firstName> {
<lastName>Smith</lastName> "firstName": "Anna",
</employee> "lastName": "Smith"
<employee> },
<firstName>Peter</firstName> {
<lastName>Jones</lastName> "firstName": "Peter",
</employee> "lastName": "Jones"
</employees> }
]
}

<menu id="file" value="File"> {


<popup> "menu": {
<menuitem value="New" onclick="CreateNewDoc()" />
<menuitem value="Open" onclick="OpenDoc()" /> "id": "file",
<menuitem value="Close" onclick="CloseDoc()" /> "value": "File",
</popup> "popup": {
</menu> "menuitem": [
{
"value": "New",
"onclick": "CreateNewDoc()"
},
{
"value": "Open",
"onclick": "OpenDoc()"
},
{
"value": "Close",
"onclick": "CloseDoc()"
}
]
}
}
}

12
5. Échange de JSON via HTTP
• JSON est très utilisé pour la communication entre applications sur Internet
• Utilisé principalement avec HTTP
• Les en-têtes HTTP précisent que le contenu est du JSON :
o Content-Type: application/json

6. JSON en Java : modèles de parsing

Modèle Objet

• Construction d’un arbre d’objets en mémoire


• ✅ Flexible, accès complet aux données
• ❌ Plus lent, consomme plus de mémoire

Modèle Streaming

• Traitement des données au fil de l’eau


• ✅ Rapide, faible empreinte mémoire
• ❌ Peu flexible, traitement local uniquement

7. APIs JSON en Java


• Gson (Google)
• Jackson
• JSON Processing (JSON-P)

Exemple :

[Link]

{
"firstName": "Duke",
"lastName": "Java",
"age": 18,
"streetAddress": "100 Internet Dr",
"city": "JavaTown",
"state": "JA",
"postalCode": "12345",
"phoneNumbers": [
{
"type": "mobile",
"number": "111-111-1111"
},
{
"type": "home",
"number": "222-222-2222"
}
]
}

13
1. Évolution du Web

Web des usagers : 4. Acteurs de la SOA

• Interaction utilisateur ↔ application Fournisseur de service


• Ex : achat d’un livre via un site Web • Fournit le service via une adresse
Web des applications : • Publie le contrat du service
• Traite les requêtes des clients
• Interaction application ↔ application
• Ex : achat automatisé de fournitures via Consommateur de service
un service Web
• Recherche le service dans un registre
• Se lie dynamiquement au service
• Invoque le service selon le contrat
2. Définition d’un Service Web
• Entité logicielle accessible via Internet ou Registre de services
Intranet
• Annuaire des services
• Publiable, localisable et invocable par les
• Contient les contrats
applications
• Permet la découverte et la réutilisation
• Basée sur des standards XML
• Utilise les protocoles standards du Web
• Indépendante du système d’exploitation
5. Technologies d’implémentation de la SOA
et du langage de programmation
• CORBA : multi-langage, multi-plateforme,
• Déployable sur toutes les plateformes
coûteux
• Implémentable dans n’importe quel
• DCOM : Microsoft, mono-plateforme
langage
• RMI : Java, problèmes de
• Ne nécessite aucune configuration réseau
performance/sécurité
spécifique
• Services Web : solution moderne et
standardisée

3. Architecture Orientée Services (SOA)


• Nouveau modèle de développement basé
6. Modèle des Services Web
sur les services
• Approche abstraite orientée résolution de Basé sur des standards :
problèmes
• Chaque service : • SOAP : protocole d’échange de messages
o Résout un problème précis • WSDL : description du service
o Peut être combiné avec d’autres • UDDI : annuaire de services
services • Spécifiés par W3C et OASIS
• Communication possible entre
Objectifs
partenaires hétérogènes (plateformes,
langages) • Modularité : réutilisation et composition
• Interopérabilité : systèmes hétérogènes
• Intégration : masquage de la complexité

23
Exemple : Agence de voyage

Une agence Web combine plusieurs services :

• Réservation de vols (Tunisair)


• Réservation de trains (SNCFT)
• Réservation d’hôtels
• Location de voitures (RentACar)

7. Acteurs impliqués (Web Services)


• Service Provider : expose le service en
XML
• Service Requester : client qui invoque le
service via SOAP
• Service Registry : annuaire UDDI

8. Scénario complet d’un Service Web


1. Description du service (WSDL)
2. Publication dans un annuaire UDDI
3. Recherche du service par le client
4. Invocation via SOAP selon le contrat

9. Bénéfices des Services Web


• Basés sur des standards
• Encapsulation de la complexité
• Réutilisation des services
• Facilitation des processus métiers
• Fiabilité et sécurité des échanges
• Interopérabilité (.NET, J2EE)

10. Types de Services Web

Services Web 1.0 : Basés sur SOAP / WSDL / UDDI

Services Web 2.0 – REST :

• Utilisent directement HTTP


• Ressources identifiées par des URI
• Méthodes HTTP :
o GET, POST, PUT, DELETE (CRUD)
• Plus simples et plus légers
• Ne couvrent pas tous les cas de SOAP
• Description via WADL (non standardisé)

24
HyperText Transfert Protocol

1. Définition de HTTP
• HTTP est un protocole permettant d’accéder aux ressources sur Internet
• Principalement utilisé par le World Wide Web
• Fonctionne au-dessus de TCP
• Basé sur le modèle requête / réponse :
o Le client envoie une requête
o Le serveur renvoie la ressource ou un message d’erreur
• Protocole :
o Synchrone
o Initialement sans connexion
o Chaque requête/réponse est indépendante

2. Adressage HTTP : URI (Uniform Resource Identifier)


• Identifie de manière unique une ressource
• Deux sous-ensembles :
o URN : identifie une ressource par son nom (même si elle n’est plus disponible)
o URL : localise une ressource (page, image, script…)

Format d’un URI → [Link]

Champ Rôle

host Nom de domaine ou adresse IP

port Port du serveur (80 par défaut pour HTTP)

path Chemin vers la ressource

query Paramètres transmis au serveur

fragment Ancre dans la page

3. Exemple de requête HTTP

GET /[Link] HTTP/1.1


Host: [Link]
Accept: */* → accepte tous les types de documents
Accept-Language: fr
User-Agent: Mozilla/4.0 → décrit le navigateur et l’OS
Connection: Keep-Alive → conserve la connexion TCP

25
4. Exemple de réponse HTTP

HTTP/1.1 200 OK → succès


Content-Type: text/html
Content-Length: 1456

<html>...</html> → En-têtes + corps (contenu)

5. Méthodes HTTP principales

GET - Récupération d’une ressource


- Pas de corps dans la requête
- Paramètres dans l’URL
POST - Création ou envoi de données
- Données transmises dans le corps
- Non sûre, non idempotente
PUT - Mise à jour ou création d’une ressource
- Idempotente
DELETE - Suppression d’une ressource
- Idempotente

6. Méthodes HTTP (HTTP/1.0 vs HTTP/1.1)

Méthode HTTP/1.0 HTTP/1.1 Description


GET ✓ ✓ Demander une ressource au serveur.
POST ✓ ✓ Envoyer des données
HEAD ✓ ✓ Identique à GET, mais le serveur ne renvoie que les
en-têtes, pas le corps de la réponse.
OPTIONS ✗ ✓ Méthodes supportées
PUT ✗ ✓ Mise à jour
DELETE ✗ ✓ Suppression
TRACE ✗ ✓ Demande au serveur de renvoyer la requête reçue,
utile pour le débogage.
CONNECT ✗ ✓ Utilisé pour établir une connexion tunnel avec un
proxy (généralement pour HTTPS).

7. Sûreté et idempotence
• Méthode sûre : ne modifie pas l’état du serveur
→ GET, HEAD
• Méthode idempotente : répétable sans effet supplémentaire
→ GET, PUT, DELETE
• POST :
o Ni sûre, ni idempotente
o Utilisée pour des traitements variés

26
8. En-têtes des requêtes HTTP

Champ Description
Accept Types MIME que le client accepte en réponse.
Accept-Encoding Méthodes de compression supportées par le client (ex. gzip, deflate).
Accept-Language Langues préférées par le client, avec pondération éventuelle.
Cookie Données de cookie envoyées par le client au serveur.
Host Nom de l’hôte virtuel demandé (obligatoire en HTTP/1.1).
If-Modified-Since Demande conditionnelle : ne retourne le document que s’il a été modifié
après la date indiquée.
If-None-Match Demande conditionnelle : ne retourne le document que si l’ETag a changé.
Referer URL de la page à partir de laquelle la requête a été effectuée.
User-Agent Identifie le logiciel client (navigateur, version, système d’exploitation).

9. En-têtes des réponses HTTP

Champ Description

Allow Méthodes HTTP autorisées pour cette ressource (ex. GET, POST).

Content- Méthode de compression utilisée pour le corps de la réponse (ex. gzip).


Encoding
Content- Langue dans laquelle le document est écrit.
Language
Date Date et heure UTC de la réponse.

Expires Date après laquelle la ressource est considérée comme périmée (pour le
cache).
Last-Modified Date de dernière modification du document.

Location URL de redirection (utilisée avec les codes 3xx).

ETag Identifiant unique de version de la ressource, pour la gestion du cache.


Pragma Instructions de contrôle du cache (historique, souvent remplacé par Cache-
Control).
Server Nom et version du logiciel serveur.

Set-Cookie Permet au serveur d’envoyer un cookie au client à enregistrer.

27
10. Codes des réponses HTTP (par catégorie)

Code Catégorie Exemples courants et description

1xx Informatif 100 Continue, 101 Switching Protocols – Indique une étape
intermédiaire.
2xx Succès 200 OK, 201 Created, 204 No Content – La requête a réussi.
3xx Redirection 301 Moved Permanently, 302 Found, 304 Not Modified – Action
supplémentaire nécessaire.
4xx Erreur client 400 Bad Request, 403 Forbidden, 404 Not Found – La requête
contient une erreur.
5xx Erreur 500 Internal Server Error, 502 Bad Gateway, 503 Service
serveur Unavailable – Échec côté serveur.

28
URL de base : [Link]

1. Requêtes GET

Liste des utilisateurs

• Méthode : GET
• URL : [Link]
• Réponse attendue : Liste de 10 utilisateurs au format JSON.

Ressources associées

Ressource URL

Posts [Link]

Commentaires [Link]

Albums [Link]

Dernier utilisateur (id=10)

• Méthode : GET
• URL : [Link]
• Réponse :

{
"id": 10,
"name": "Clementina DuBuque",
"username": "[Link]",
"email": "[Link]@[Link]",
...
}

Posts du premier utilisateur

• Méthode : GET
• URL : [Link]
• Réponse : Liste des posts de l’utilisateur avec userId: 1.

Commentaires du 20ème post

• Méthode : GET
• URL : [Link]
• Réponse : Liste des commentaires liés au postId: 20

29
2. Requête POST

Ajout d’un utilisateur

• Méthode : POST
• URL : [Link]
• Body (JSON) :

{
"id": 11,
"name": "Nouvel Utilisateur",
"username": "[Link]",
"email": "nouveau@[Link]",
"address": {
"street": "Rue Exemple",
"city": "Paris",
"zipcode": "75000",
},
"phone": "01 23 45 67 89",
"website": "[Link]",
"company": {
"name": "Nouvelle Société",
"catchPhrase": "Une nouvelle vision",
}
}

• Réponse :

{
"id": 11,
"name": "Nouvel Utilisateur",
...
}

• Status : 201 Created

3. Requête PUT

Modification d’un post

• Méthode : PUT
• URL : [Link]
• Body (JSON) :

{
"userId": 1,
"id": 1,
"title": "Titre modifié",
"body": "Contenu mis à jour avec succès."
}

• Réponse : Retourne le post mis à jour avec les nouvelles valeurs.


• Status : 200 OK

30
REpresentational State Transfer

1. Services Web REST


• Les services Web REST servent à développer des architectures orientées ressources.
• Différentes appellations :
o DOA : Data-Oriented Architecture
o ROA : Resource-Oriented Architecture
• Les applications respectant ces principes sont dites RESTful.
• REST est utilisé dans les Architectures Orientées Données (DOA).
• C’est une manière de concevoir des applications distribuées, notamment pour le World
Wide Web.
• REST n’est pas un standard (pas de recommandation W3C).
• REST s’appuie sur des standards du Web :
o Protocole HTTP
o URI
o Formats de données (XML, JSON, texte, binaire…)
o Sécurisation via TLS
▪ Successeur de SSL
▪ Plus récent et plus sécurisé
• REST est un style d’architecture, inspiré de l’architecture du Web.
• Il permet l’échange de messages sans enveloppe SOAP

2. Les trois concepts fondamentaux de REST

Ressource

• Toute entité identifiable


• Identifiée de manière unique par une URI
• Exemple : [Link]

Méthode

• Permet d’agir sur une ressource


• Basé sur les méthodes HTTP : GET (Create), POST (Retrieve), PUT (Update) et DELETE (Delete)

Représentation

• Vue de l’état d’une ressource


• Données échangées entre client et serveur : Côté client (GET) / Côté serveur (POST, PUT)
• Formats courants : JSON, XML, HTML, CSV…

31
3. JAX-RS (Java API for RESTful Web Services)
• JAX-RS est une API Java pour développer des services Web RESTful.
• Elle repose sur des annotations pour exposer les ressources.

Annotations principales
@Path
@GET, @POST, @PUT, @DELETE
@Produces, @Consumes
@PathParam

Annotation @Path

• Placée sur une classe (définit la racine des ressources) ou une méthode (complète l’URI de la
classe)
• Définit l’URI de la ressource
• Exemple : @Path("nom_de_la_ressource")

Annotations @Produces

• Définit le format des données retournées


• Correspond à l’en-tête HTTP Content-Type

Annotations @Consumes

• Définit le format des données reçues


• Correspond à l’en-tête HTTP Accept

Exemples de MIME types

• text/plain
• application/json
• application/xml
• application/x-www-form-urlencoded
• application/csv

URIs dynamiques et paramètres

Paramètres dynamiques dans @Path

• Délimités par { }
• Possibilité d’utiliser des expressions régulières

Types de paramètres

• @PathParam → URL (path)


• @QueryParam → paramètres de requête
• @FormParam → formulaire
• @HeaderParam → en-têtes HTTP
• @CookieParam → cookies

32
Exemple 1 — @PathParam (Dire bonjour à la personne passée en paramètre)

@Path("/hello")
public class HelloWorld {

@GET
@Produces(MediaType.TEXT_PLAIN)
@Path("/salut/{nom}")
public String saluer(@PathParam("nom") String nom) {
return "Hello " + nom;
}
}

Explication :

• @Path("/hello") : Chemin de base de la ressource.


• @GET : Méthode HTTP utilisée.
• @Produces(MediaType.TEXT_PLAIN) : Format de la réponse : texte brut.
• @Path("/salut/{nom}") : Sous-chemin avec un paramètre variable nom.
• @PathParam("nom") : Injecte la valeur du paramètre nom depuis l'URL.
• La méthode saluer : Retourne "Hello " + nom.

Exemple d’appel : GET [Link]

Réponse attendue : Hello Saba

Exemple 2 — @PathParam (Calcul de la somme de deux nombres)

@Path("/hello")
public class HelloWorld {

@GET
@Produces(MediaType.TEXT_PLAIN)
@Path("/calcul/{nb1}/{nb2}")
public double calcul(@PathParam("nb1") int nb1,
@PathParam("nb2") int nb2) {
return nb1 + nb2;
}
}

Explication :

• @Path("/hello") : Définit le chemin de base de la ressource.


• @GET : Indique que la méthode répond aux requêtes HTTP GET.
• @Produces(MediaType.TEXT_PLAIN) : Spécifie que la réponse sera au format texte brut.
• @Path("/calcul/{nb1}/{nb2}") : Définit le sous-chemin avec deux paramètres
variables nb1 et nb2.
• @PathParam("nb1") et @PathParam("nb2") : Injectent les valeurs des paramètres d'URL
dans les variables nb1 et nb2.
• La méthode calcul : Retourne la somme des deux nombres.

Exemple d’appel : GET [Link]

Réponse attendue : 30.0

33
Exemple 3 — @QueryParam (Calcul de la somme de deux nombres)

@Path("/hello")
public class HelloWorld {

@GET
@Produces(MediaType.TEXT_PLAIN)
@Path("/calcul")
public double calcul(@QueryParam("nb1") int nb1,
@QueryParam("nb2") int nb2) {
return nb1 + nb2;
}
}

Explication :

• @Produces(MediaType.TEXT_PLAIN) : Format de la réponse (texte brut).


• @Path("/calcul") : Chemin de la méthode.
• @QueryParam("nb1") et @QueryParam("nb2") : Injectent les paramètres de la requête URL
dans les variables nb1 et nb2.

Exemple d’appel : GET [Link]

Réponse attendue : 30.0

4. Détail des annotations HTTP

@GET

• Lecture uniquement
• Données passées dans l’URL
• @Consumes inutile
• @Produces obligatoire

@POST

• Création
• Données dans le corps de la requête
• @Consumes recommandé
• @Produces optionnel

@PUT

• Mise à jour
• Données dans le corps
• @Consumes recommandé
• @Produces optionnel

@DELETE

• Suppression
• Paramètres possibles dans l’URL
• @Consumes inutile
• @Produces optionnel

34
[Link]

package [Link];

public class Train {

private String num;


private String departure;
private String arrival;
private int h; // heure de départ

// Constructeur vide (obligatoire pour JSON)


public Train() {}

// Constructeur complet
public Train(String num, String departure, String arrival, int h) {
[Link] = num;
[Link] = departure;
[Link] = arrival;
this.h = h;
}

// Getters et Setters
public String getNum() {return num;}

public void setNum(String num) {[Link] = num;}

public String getDeparture() {return departure;}

public void setDeparture(String departure) {[Link] = departure;}

public String getArrival() {return arrival;}

public void setArrival(String arrival) {[Link] = arrival;}

public int getH() {return h;}

public void setH(int h) {this.h = h;}


}

35
[Link]

package [Link];
import [Link];
import [Link];

public class BookTrainBD {


private static List<Train> trains = new ArrayList<>();
// Initialisation avec quelques données
static {
[Link](new Train("100", "Tunis", "Sfax", 8));
[Link](new Train("101", "Tunis", "Sousse", 10));
[Link](new Train("102", "Sfax", "Gabes", 12));}

// Récupérer un train par numéro


public Train getTrain(String num) {
for (Train t : trains) {
if ([Link]().equals(num)) {
return t;
}
}
return null;
}

// Rechercher trains par critères


public List<Train> searchTrains(String departure, String arrival) {
List<Train> result = new ArrayList<>();
for (Train t : trains) {
if ([Link]().equalsIgnoreCase(departure)
&& [Link]().equalsIgnoreCase(arrival)) {
[Link](t);
}
}
return result;
}

// Créer un train (via paramètres)


public void createTrain(String num, String departure, String arrival, int h) {
[Link](new Train(num, departure, arrival, h));
}

// Créer un train (via objet)


public void addTrain(Train t) {[Link](t);}

// Modifier l'heure d'un train


public void modifyTrain(String num, int h) {
Train t = getTrain(num);
if (t != null) {
[Link](h);
}
}
// Supprimer un train
public void removeTrain(String num) {
[Link](t -> [Link]().equals(num));
}
}

36
[Link]

import [Link].*;
import [Link];
import [Link];

@Path("/trains")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public class TrainResource {
private BookTrainBD bd = new BookTrainBD();
// a. GET train by number
@GET
@Path("/{num}")
public Train getTrain(@PathParam("num") String numTrain) {
return [Link](numTrain);
}
// b. Search trains by criteria
@GET
@Path("/search")
public List<Train> searchTrainsByCriteria(
@QueryParam("departure") String departure,
@QueryParam("arrival") String arrival) {
return [Link](departure, arrival);
}
// c. Create train (via parameters)
@POST
@Path("/create")
public void createTrain(@QueryParam("num") String num,
@QueryParam("departure") String departure,
@QueryParam("arrival") String arrival,
@QueryParam("h") int h) {
[Link](num, departure, arrival, h);
}
// d. Create train (via object)
@POST
@Path("/createObject")
public void createTrainObject(Train t) {
[Link](t);
}
// e. Modify train hour
@PUT
@Path("/{num}")
public void modify(@PathParam("num") String num,
@QueryParam("h") int h) {
[Link](num, h);
}
// f. Remove train
@DELETE
@Path("/{num}")
public void remove(@PathParam("num") String num) {
[Link](num);
}
}

37
Exemples de tests avec Postman

1. Récupérer un train

GET [Link]

2. Rechercher des trains

GET [Link]

3. Créer un train (paramètres)

POST
[Link]
se&h=10

4. Créer un train (objet JSON)

POST [Link]

{
"num": "202",
"departure": "Tunis",
"arrival": "Bizerte",
"h": 14
}

5. Modifier l’heure

PUT [Link]

6. Supprimer un train

DELETE [Link]

38
[Link]

public class Product {

private int id;


private String name;
private float price;

// Constructeur vide (obligatoire pour Jersey / JSON)


public Product() {}

// Constructeur complet
public Product(int id, String name, float price) {
[Link] = id;
[Link] = name;
[Link] = price;
}

// Getters et setters
public int getId() {return id;}

public void setId(int id) {[Link] = id;}

public String getName() {return name;}

public void setName(String name) {[Link] = name;}

public float getPrice() {return price;}

public void setPrice(float price) {[Link] = price;}


}

[Link]

public class ProductDAO {


private static final String URL = "jdbc:mysql://localhost:3306/ProductBase";
private static final String USER = "root";
private static final String PASSWORD = "";

private Connection getConnection() throws SQLException {


return [Link](URL, USER, PASSWORD);
}

// Récupérer un produit par id


public Product getProduct(int id) {
Product p = null;
Connection con = getConnection();
PreparedStatement ps = [Link]("SELECT * FROM product WHERE id=?");
[Link](1, id);

39
ResultSet rs = [Link]();
if ([Link]()) {
p = new Product(
[Link]("id"),
[Link]("name"),
[Link]("price")
);
}
return p;
}

// Recherche par nom


public List<Product> searchByName(String name) {
List<Product> list = new ArrayList<>();
Connection con = getConnection();
PreparedStatement ps = [Link]("SELECT * FROM product WHERE name LIKE ?");
[Link](1, "%" + name + "%");
ResultSet rs = [Link]();
while ([Link]()) {
[Link](new Product(
[Link]("id"),
[Link]("name"),
[Link]("price")
));
}
return list;
}

// Ajouter produit
public void createProduct(Product p) {
Connection con = getConnection();
PreparedStatement ps = [Link]("INSERT INTO product VALUES (?,?,?)");
[Link](1, [Link]());
[Link](2, [Link]());
[Link](3, [Link]());
[Link]();
}

// Modifier produit
public void updateProduct(int id, String name, float price) {
Connection con = getConnection();
PreparedStatement ps =
[Link]("UPDATE product SET name=?, price=? WHERE id=?");
[Link](1, name);
[Link](2, price);
[Link](3, id);
[Link]();
}
// Supprimer produit
public void deleteProduct(int id) {
Connection con = getConnection();
PreparedStatement ps = [Link]("DELETE FROM product WHERE id=?");
[Link](1, id);
[Link]();
}
}

40
[Link]

package [Link];

import [Link].*;
import [Link];
import [Link];

@Path("/products")
public class ProductResource {

ProductDAO dao = new ProductDAO();

// GET product by id
@GET
@Path("/{id}")
@Produces(MediaType.APPLICATION_JSON)
public Product getProduct(@PathParam("id") int id) {
return [Link](id);
}

// Search products by name


@GET
@Path("/search")
@Produces(MediaType.APPLICATION_JSON)
public List<Product> searchProducts(@QueryParam("name") String name) {
return [Link](name);
}

// Create product
@POST
@Consumes(MediaType.APPLICATION_JSON)
public void createProduct(Product p) {
[Link](p);
}

// Update product
@PUT
@Path("/{id}")
@Consumes(MediaType.APPLICATION_JSON)
public void updateProduct(@PathParam("id") int id,Product p) {
[Link](id, [Link](), [Link]());
}

// Delete product
@DELETE
@Path("/{id}")
public void deleteProduct(@PathParam("id") int id) {
[Link](id);
}
}

41
Requêtes HTTP de test (Postman)

Get product

GET [Link]

Search

GET [Link]

Create

POST [Link]

Content-Type: application/json

{
"id": 5,
"name": "Laptop",
"price": 2500
}

Update

PUT [Link]

Content-Type: application/json

{
"name": "Laptop Pro",
"price": 3000
}

Delete

DELETE [Link]

42

Vous aimerez peut-être aussi