Requête Http
Bas niveau
https://openclassrooms.com/courses/les-requetes-http
Aujourd'hui n'importe quel language va utiliser un framework pour faciliter les requêtes POST / GET / DELETE / PUT / UPDATE (vision API) ...
(OPTIONS / HEAD / CONNECT / TRACE existent également)
Mais qu'est qui est réellement produit pour assurer la communication Client - Server ?
Requête Client
Syntaxe Générale
Commande URL Version de protocole (Appelé la Ligne de commande)
En-tête de requête
<nouvelle ligne>
Corps de requête
- Commande : POST / GET / ...
- URL : Adresse de la page SUR LE SERVEUR (Repertoire/Page)
- Version : HTTP/1.1 par exemple.
- En-tête : Suite de valeurs sous la forme -> Nom : Valeur
- nouvelle ligne <==> \r\n supplémentaire.
- Corps de requête : Le body, par exemple : variable=valeur&variable2=valeur2
Exemple de requête POST
ici body au format SOAP (peut être JSON, ou autre !)
POST /Quotation HTTP/1.0
Host: www.xyz.org
Content-Type: text/xml; charset = utf-8
Content-Length: nnn
<?xml version = "1.0"?>
<SOAP-ENV:Envelope
xmlns:SOAP-ENV = "http://www.w3.org/2001/12/soap-envelope"
SOAP-ENV:encodingStyle = "http://www.w3.org/2001/12/soap-encoding">
<SOAP-ENV:Body xmlns:m = "http://www.xyz.org/quotations">
<m:GetQuotation>
<m:QuotationsName>MiscroSoft</m:QuotationsName>
</m:GetQuotation>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Remarque intéressante : Il est possible de passer des variables GET via l'URL même dans le cas d'une requête POST.
Réponde Serveur
Syntaxe générale
Version Code-réponse Texte-réponse (Appelé la ligne de statut)
En-tête de réponse
<nouvelle ligne>
Corps de réponse
- Version : Version HTTP du serveur
- Code-réponse : Code d'erreur retrourné (200, 403, 404, 500, ...)
- Texte-réponse : Texte associé à l'erreur (OK, FORBIDDEN, NOT FOUND, INTERNAL ERROR, ...)
- En-tête : Suite de valeur sous forme Nom : Valeur
- Nouvelle ligne : \r\n supplémentaire
- Corps de réponse : Le contenu du fichier réponse (L'ensemble du HTML d'une page par exemple, ou un objet SOAP dans le cas d'une API)
Exemple de réponse
Réponse pour naviguer sur la page d'un site :
HTTP/1.1 200 OK
Date: Thu, 11 Jan 2007 14:00:36 GMT
Server: Apache/2.0.54 (Debian GNU/Linux) DAV/2 SVN/1.1.4
Connection: close
Transfer-Encoding: chunked
Content-Type: text/html; charset=ISO-8859-1
178a1
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr">
<head>
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1" />
<meta http-equiv="pragma" content="no-cache" />
<title>Accueil - Le Site du Zéro</title>
...Tout l'html de la page demandée.
Réponse d'une API JSON : (Source : http://jsonapi.org/examples/ )
HTTP/1.1 200 OK
Content-Type: application/vnd.api+json
{
"data": [{
"type": "articles",
"id": "1",
"attributes": {
"title": "JSON API paints my bikeshed!",
"body": "The shortest article. Ever.",
"created": "2015-05-22T14:56:29.000Z",
"updated": "2015-05-22T14:56:28.000Z"
},
"relationships": {
"author": {
"data": {"id": "42", "type": "people"}
}
}
}],
"included": [
{
"type": "people",
"id": "42",
"attributes": {
"name": "John",
"age": 80,
"gender": "male"
}
}
]
}
Réponse d'une API SOAP (Source : https://www.tutorialspoint.com/soap/soap_examples.htm )
HTTP/1.0 200 OK
Content-Type: text/xml; charset = utf-8
Content-Length: nnn
<?xml version = "1.0"?>
<SOAP-ENV:Envelope
xmlns:SOAP-ENV = "http://www.w3.org/2001/12/soap-envelope"
SOAP-ENV:encodingStyle = "http://www.w3.org/2001/12/soap-encoding">
<SOAP-ENV:Body xmlns:m = "http://www.xyz.org/quotation">
<m:GetQuotationResponse>
<m:Quotation>Here is the quotation</m:Quotation>
</m:GetQuotationResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Outil PostMan
https://www.getpostman.com/apps
- Installer
- Entrer l'API EndPoint
- Tester, ajouter des scripts pour automatiser
Outre la possibilité d'automatiser, etc, cela permet de faire des requêtes avec la commande que l'on veut, le body est maîtrisé, l'url est choisie, ... et de voir le résultat.
Un excellent outil lors que l'on travaille sur des API.
WorkSpace
PostMan fonctionne par Workspaces. Mes workspaces personnels ainsi que ceux de ma team.
Au sein d'un workspace il y a 2 choses Views :
- Build ==> Pour travailler au sein du workspace
- Browse ==> Pour organiser son contenu et ses membres
Utilisation CRUD
- create - POST
- read - GET
- update - PUT
- delete - DELETE
Creuser le sujet des API : La solution réactive RX
https://msdn.microsoft.com/en-us/library/hh242974(v=vs.103).aspx
https://github.com/Reactive-Extensions/Rx.NET
// TODO : Explorer