CompilationException:
| import fr.univtln.bruno.samples.jaxrs.model.Library;
package fr.univtln.bruno.samples.jaxrs.model does not exist
2026-10-03
zsh:4: command not found: gitpull.sh
Ce document présente les service Web REST en général et par la pratique en Java.
Il s’appuie sur un exemple simple d’application : https://github.com/ebpro/sample-jaxrs qui servira à illustrer les notions et sera étudiée en détail dans la partie pratique.
Important
RESTfull est une approche d’API client/serveur suivant la logique de navigation dans un hypermedia. On parle d’HATEOS (Hypermedia As The Engine Of Application State).
Pour définir un protocole de communication, il faut généralement définir :
La logique RESTfull est d’utiliser tout ce que propose HTTP pour écrire une API en HTTP.
Important
Les ressources (ou ensembles de ressources) de l’application sont identifiées par des URI. Les URL sont une sorte particulière d’URI qui indique un moyen d’accès en plus de les identifier de façon unique.
Il n’y a pas de standard pour les API REST. Il vaut généralement mieux rester simple et cohérent. Quelques pratiques sont utilisées classiquement :
On utilise des noms (pas des verbes) au pluriel pour les ressources :
http://MyServer/MyApp/Persons/1/Dogs
http://MyServer/MyApp/Dogs?master_id=1http://MyServer/MyApp/Persons?page=2&page_size=10http://MyServer/MyApp/Persons;page=2;page_size=10 (avec des Matrix Params)http://MyServer/MyApp/Persons?page=&page_size=10&sort=name,firstname,-created,titlehttp://MyServer/MyApp/Persons/1?fields=email,firstname,lastname/api/v1, /api/v2, … | Verbe HTTP | Utilisation | Contraintes |
|---|---|---|
| GET | Accès à une ressource identifiée dans l’URL (il peut s’agir d’une collection). | Safe, Idempotent |
| HEAD | comme GET mais sans le corps de la requête (seul le header http est retourné). Utile pour savoir si une ressource a changé. | Safe, Idempotent |
| POST | création d’une ressource sans donner l’identifiant. | |
| PUT | mise à jour complète d’une ressource identifiée (voire création en donnant l’identifiant). | Idempotent |
| DELETE | suppression d’une ressource. | Idempotent |
| OPTIONS | liste les actions possibles sur une ressource. | Safe, Idempotent |
| PATCH | RFC 5789, mises à jour partielle d’une ressource. |
Un endpoint REST est défini par un verbe HTTP et une URL.
GET http://MyServer/MyApp/PersonsGET http://MyServer/MyApp/Persons/1GET http://MyServer/MyApp/Persons?ageMin=7&ageMax=16DELETE http://MyServer/MyApp/PersonsDELETE http://MyServer/MyApp/Persons/1Important
Les resources sont généralement représentées et échangées à l’aide de langages autodescriptifs comme XML ou JSON.
Par exemple, une personne peut être présentée :
Content-Type: et Accept:L’exemple ci-dessous sérialise des objets Java qui représente un auteur et un livre en JSON et en XML. (Le détail est expliqué plus loin).
CompilationException:
| import fr.univtln.bruno.samples.jaxrs.model.Library;
package fr.univtln.bruno.samples.jaxrs.model does not exist
Important
Le code de retour des méthode est un code HTTP. Il est indiqué de façon standard dans l’entête de la réponse et peut être répété dans le contenu si une enveloppe est proposée.
| Code | Signification | Usage |
|---|---|---|
| 200 | Ok | Requête traitée avec succès. |
| 201 | Created | Nouvelle ressource créée. |
| 204 | No Content | Pas de contenu, pas exmple lors d’une requête DELETE réussie. |
| 206 | Partial Content | Seulement une partie de résultat est retourné par exemple en cas de pagination (non explicite). |
| 304 | Not Modified | Utilisation du cache possible. |
| Code | Signification | Usage |
|---|---|---|
| 400 | Bad Request | La requête est invalide et ne peut pas être traitée par le serveur. |
| 401 | Unauthorized | La requête nécessite que le client soit authentifié. |
| 403 | Forbidden | Le client est authentifié mais l’utilisateur n’est pas autorisé à accéder à cette ressource. |
| 404 | Not Found | La ressource demandée n’existe pas. |
| 500 | Internal Server Error | C’est une erreur générique de fonctionnement, elle devrait toujours être accompagnée d’une description |
Important
Un échange d’une API REST correspond donc exactement à un échange http.
Requête de création d’une personne :
Requête de modification d’une personne (id dans l’URL):
Une requête REST peut être envoyée par programmation ou en utilisant un programme dédié comme curl en ligne de commande, postman pour chrome ou RestClient pour firefox.
Regardez les options de la commande curl pour réaliser des requêtes HTTP.
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
100 551 100 551 0 0 3143 0 --:--:-- --:--:-- --:--:-- 3148
[{"place_id":82816515,"licence":"Data © OpenStreetMap contributors, ODbL 1.0. http://osm.org/copyright","osm_type":"way","osm_id":288649901,"lat":"43.1354075","lon":"6.0161592","class":"amenity","type":"university","place_rank":30,"importance":0.44999143904345706,"addresstype":"amenity","name":"Université de Toulon","display_name":"Université de Toulon, Allée Auguste Renoir, Le Thouar, La Garde, Toulon, Var, Provence-Alpes-Côte d'Azur, France métropolitaine, 83130, France","boundingbox":["43.1328214","43.1379869","6.0092534","6.0254597"]}]
E. Bruno - Architecture et Services Web RESTful