269 lines
11 KiB
Markdown
269 lines
11 KiB
Markdown
<header><h1>
|
|
IOT Technologies
|
|
</h1></header>
|
|
|
|
# Serialisattion
|
|
Sérialiser est nécessaire pour deux principales raisons :
|
|
|
|
1. **Communication entre systèmes :** Lorsque des objets résident en mémoire vive (RAM) et doivent être échangés avec
|
|
d'autres systèmes via des canaux de communication, la sérialisation les convertit en séquences d'octets pouvant être
|
|
transmises efficacement.
|
|
|
|
2. **Stockage persistant :** Parfois, il est nécessaire de conserver des objets au-delà de l'exécution du programme,
|
|
les stockant dans une mémoire persistante (comme le stockage de masse). La sérialisation permet de traduire ces objets
|
|
en un format pouvant être stocké et récupéré ultérieurement.
|
|
|
|
***Basé texte ou binaire***
|
|
- **Encodage des données :**
|
|
- **Texte :** Les données sont encodées sous forme de flux de caractères imprimables (comme dans XML ou JSON).
|
|
- **Binaire :** Les données sont encodées sous forme de flux d'octets, sans nécessiter de représenter les caractères imprimables.
|
|
|
|
- **Lisibilité et Efficacité :**
|
|
- **Texte :** Lisible par les humains, facilite le débogage. Cependant, peut être moins compact, nécessitant plus de bande passante.
|
|
- **Binaire :** Plus compact, nécessite moins de bande passante. Cependant, illisible pour les humains, compliquant le débogage.
|
|
|
|
## Sérialisation basée texte
|
|
La sérialisation basée texte est généralement utilisée pour les données structurées, comme les documents XML ou JSON.
|
|
Ces formats sont lisibles par les humains, ce qui facilite le débogage. Cependant, ils sont moins compacts que les
|
|
formats binaires, nécessitant plus de bande passante.
|
|
|
|
### XML (eXtensible Markup Language)
|
|
XML est un langage de balisage qui définit un ensemble de règles pour l'encodage de documents dans un format qui est
|
|
à la fois humain et machine lisible. Il est largement utilisé pour représenter des données structurées et pour échanger
|
|
des informations sur Internet. XML est un format de données ouvert et indépendant du logiciel et du matériel.
|
|
|
|
1. **Structure :**
|
|
XML utilise des balises pour définir des éléments structurés. Chaque élément a une balise d'ouverture et une balise de fermeture. Les balises peuvent contenir des données ou d'autres balises.
|
|
|
|
2. **Attributs :**
|
|
Les éléments peuvent avoir des attributs qui fournissent des informations supplémentaires.
|
|
Les attributs sont définis à l'intérieur de la balise d'ouverture.
|
|
|
|
3. **Hiérarchie :**
|
|
Les éléments peuvent être imbriqués pour créer une structure hiérarchique, formant ainsi un arbre de données.
|
|
|
|
4. **Document XML :**
|
|
Un document XML commence souvent par une déclaration indiquant la version d'XML utilisée. Ensuite, il a un élément racine qui contient tous les autres éléments du document.
|
|
|
|
5. **Namespace :**
|
|
Les espaces de noms (namespace) permettent d'éviter les conflits de noms en associant un préfixe à un espace de noms unique.
|
|
|
|
6. **Caractères d'échappement :**
|
|
Certains caractères spéciaux (comme `<`, `>`, `"`, `'`, `&`) doivent être échappés pour éviter toute confusion avec la syntaxe XML.
|
|
|
|
7. **Validation :**
|
|
La validité d'un document XML peut être vérifiée en le comparant à un schéma XML (XSD) qui définit la structure attendue du document.
|
|
|
|
***Éléments :***
|
|
```xml
|
|
<tag>
|
|
data
|
|
</tag>
|
|
```
|
|
|
|
***Attributs :***
|
|
```xml
|
|
<tag attribute="metadata">
|
|
data
|
|
</tag>
|
|
```
|
|
|
|
***Namespace :***
|
|
```xml
|
|
<tag xmlns:f="https://namespace.com/example/">
|
|
<f:subtag>
|
|
data
|
|
</f:subtag>
|
|
</tag>
|
|
```
|
|
|
|
<details>
|
|
<summary><b><u>Exemple</u></b></summary>
|
|
|
|
```xml
|
|
<?xml version="1.0" encoding="ASCII"?>
|
|
<disco>
|
|
<cd style="Classic">
|
|
<title>For ever</title>
|
|
<artist>Pavarotti</artist>
|
|
<songs>
|
|
<song appreciation="preferred">
|
|
<title>No, la morte</title>
|
|
<length>3:50</length>
|
|
</song>
|
|
<song>
|
|
<title>Che voi m 'amate</title>
|
|
<length>2:55</length>
|
|
</song>
|
|
</songs>
|
|
<price>30</price>
|
|
</cd>
|
|
</disco>
|
|
```
|
|
|
|

|
|
|
|
</details>
|
|
|
|
|
|
|
|
En résumé, XML offre une syntaxe flexible pour décrire des données structurées de manière lisible par les humains et
|
|
interprétable par les machines, facilitant l'échange d'informations entre systèmes hétérogènes.
|
|
|
|
|
|
### JSON (JavaScript Object Notation)
|
|
JSON est un format de données léger et facile à lire et à écrire. Il est basé sur un sous-ensemble du langage de
|
|
programmation JavaScript. JSON est un format de données texte qui est complètement indépendant du langage mais utilise
|
|
des conventions familières aux programmeurs. Ces propriétés font de JSON un langage d'échange de données idéal.
|
|
|
|
1. **Objets et Tableaux :**
|
|
JSON utilise des objets (encadrés par `{}`) et des tableaux (encadrés par `[]`) pour organiser les données.
|
|
Les objets contiennent des paires clé-valeur, tandis que les tableaux sont des listes ordonnées de valeurs.
|
|
|
|
2. **Paires Clé-Valeur :**
|
|
Les données sont représentées par des paires clé-valeur à l'intérieur des objets. Les clés sont des chaînes de caractères,
|
|
et les valeurs peuvent être des nombres, des chaînes, des booléens, des objets, des tableaux ou null.
|
|
|
|
3. **Imbrication :**
|
|
Les objets et les tableaux peuvent être imbriqués pour créer une structure hiérarchique et représenter des données complexes.
|
|
|
|
4. **Caractères d'Échappement :**
|
|
Certains caractères spéciaux, comme les guillemets doubles (`"`) et les barres obliques inverses (`\`), peuvent
|
|
nécessiter un échappement dans les chaînes de caractères.
|
|
|
|
5. **Lecture et Écriture :**
|
|
Les langages de programmation fournissent des fonctions pour convertir des objets ou des chaînes JSON en structures de
|
|
données utilisables et vice versa.
|
|
|
|
6. **Interopérabilité :**
|
|
JSON est largement utilisé pour l'échange de données entre serveurs et clients, car il est facilement compréhensible
|
|
et traitable dans de nombreux langages de programmation.
|
|
|
|
|
|
<details>
|
|
<summary><b><u>Exemple</u></b></summary>
|
|
|
|
```json
|
|
{
|
|
"disco": [
|
|
{
|
|
"cd": {
|
|
"style": "Classic",
|
|
"title": "For ever",
|
|
"artist": "Pavarotti",
|
|
"songs": [
|
|
{
|
|
"song": {
|
|
"appreciation": "preferred",
|
|
"title": "No, la morte",
|
|
"length": "3:50"
|
|
}
|
|
},
|
|
{
|
|
"song": {
|
|
"title": "Che voi m'amate",
|
|
"length": "2:55"
|
|
}
|
|
}
|
|
],
|
|
"price": 30
|
|
}
|
|
}
|
|
]
|
|
}
|
|
```
|
|
|
|

|
|
|
|
</details>
|
|
|
|
***Syntaxe***
|
|
|
|

|
|
|
|
En résumé, JSON offre une syntaxe simple et lisible pour représenter des données structurées, favorisant
|
|
l'interopérabilité entre différentes plates-formes et langages.
|
|
|
|
## Sérialisation Binaire
|
|
Les Protocol Buffers, ou Protobuf, sont une méthode de sérialisation binaire développée par Google. Voici une explication simple :
|
|
|
|
1. **Sérialisation Binaire :**
|
|
Protobuf permet de convertir des données structurées, comme des objets, en une séquence binaire. Cela facilite la
|
|
transmission ou le stockage de ces données.
|
|
|
|
2. **Schéma :**
|
|
Les données sérialisées sont définies par un schéma, qui agit comme un contrat décrivant la structure des données.
|
|
Ce schéma est écrit dans un langage dédié.
|
|
|
|
3. **Compacité et Efficacité :**
|
|
Les données sérialisées avec Protobuf sont plus compactes que d'autres formats textuels comme JSON. Cela les rend plus
|
|
efficaces à transmettre sur un réseau ou à stocker.
|
|
|
|
4. **Interopérabilité :**
|
|
Protobuf prend en charge la génération automatique de code dans plusieurs langages de programmation, facilitant
|
|
l'interopérabilité entre différentes plates-formes.
|
|
|
|
5. **Évolution :**
|
|
Le schéma peut évoluer avec le temps sans casser la compatibilité en ajoutant de nouveaux champs.
|
|
Cela rend Protobuf flexible pour les applications en constante évolution.
|
|
|
|
En résumé, Protobuf est une façon efficace et flexible de sérialiser des données structurées en binaire, offrant
|
|
compacité, interopérabilité et facilité d'évolution.
|
|
|
|
|
|
# HTTP & REST web services
|
|
Les ressources web sont des éléments identifiés par des URL accessibles via le protocole HTTP.
|
|
Elles peuvent inclure des documents, des services, ou des programmes.
|
|
Initialement, ces ressources étaient souvent des fichiers statiques sur un serveur HTTP.
|
|
Les ressources web sont destinées à afficher des informations aux humains, généralement sous la forme de pages HTML,
|
|
et peuvent également permettre aux utilisateurs d'entrer des informations, par exemple via des formulaires HTML.
|
|
Une ressource web a un identifiant unique appelé URI (Uniform Resource Identifier), qui peut être dereferenceable,
|
|
permettant l'accès à la ressource
|
|
|
|
## IRIs, URIs and URLs
|
|
Les URL (Uniform Resource Locator) sont un sous-ensemble des URI (Uniform Resource Identifier).
|
|
Les URL sont des URI qui identifient une ressource par son emplacement sur un réseau.
|
|
Les URL sont les plus courantes, mais les URI peuvent également identifier des ressources par d'autres moyens,
|
|
comme le nom ou l'adresse de courrier électronique d'une personne.
|
|
|
|
- **IRI (Internationalized Resource Identifier):**
|
|
- Un IRI est une extension d'URI qui peut contenir des caractères non ASCII.
|
|
- Il représente de manière unique une ressource sur le web.
|
|
|
|
- **URI (Uniform Resource Identifier):**
|
|
- Un URI est une chaîne de caractères utilisée pour identifier de manière unique une ressource.
|
|
- Les URI comprennent les URL, les URN, et peuvent être étendus par les IRIs.
|
|
|
|
- **URL (Uniform Resource Locator):**
|
|
- Une URL est un type d'URI qui fournit l'adresse spécifique d'une ressource sur le web.
|
|
- Elle inclut le schéma (comme http), le nom du domaine et souvent le chemin d'accès à la ressource.
|
|
|
|
- **URN (Uniform Resource Name):**
|
|
- Un URN est un sous-type d'URI qui identifie de manière unique une ressource indépendamment de sa localisation.
|
|
- Contrairement aux URL, les URN ne fournissent pas d'adresse spécifique pour accéder à la ressource.
|
|
|
|
En résumé, les URIs englobent les URL et les URNs, les URNs identifient de manière unique une ressource sans spécifier
|
|
son emplacement, et les URLs fournissent une adresse spécifique pour accéder à une ressource sur le web.
|
|
|
|
## HTTP (Hypertext Transfer Protocol)
|
|
HTTP est un protocole client-serveur qui permet la communication sur le World Wide Web.
|
|
Il est sans état, basé sur des requêtes et des réponses, et utilise des codes de statut pour
|
|
indiquer le résultat d'une requête (par exemple, 200 OK pour succès, 404 Not Found pour ressource non trouvée).
|
|
|
|
- **Format des URL:**
|
|
Les Uniform Resource Locators (URLs) suivent un format générique : `http://<hôte>:<port>/<chemin>?<query>.`
|
|
Ils comprennent des éléments tels que le nom du serveur, le port, le chemin local sur le serveur, et éventuellement des
|
|
paramètres de requête.
|
|
|
|
- **Format des requêtes et réponses HTTP:**
|
|
Les requêtes et réponses HTTP sont textuelles et structurées.
|
|
Les en-têtes contiennent des paires clé-valeur, définissant divers aspects de la communication.
|
|
Les requêtes peuvent également avoir un corps de message, souvent utilisé pour envoyer des données au serveur.
|
|
|
|
- **Représentation des ressources & HTTP:**
|
|
Les ressources peuvent avoir différentes représentations, telles que HTML, JSON, ou images.
|
|
Les clients spécifient les formats acceptables via l'en-tête "Accept", tandis que les serveurs déclarent le format de
|
|
la réponse avec "Content-Type".
|
|
|
|
|