11 KiB
IOT Technologies
Serialisattion
Sérialiser est nécessaire pour deux principales raisons :
-
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.
-
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.
-
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.
-
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.
-
Hiérarchie : Les éléments peuvent être imbriqués pour créer une structure hiérarchique, formant ainsi un arbre de données.
-
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.
-
Namespace : Les espaces de noms (namespace) permettent d'éviter les conflits de noms en associant un préfixe à un espace de noms unique.
-
Caractères d'échappement : Certains caractères spéciaux (comme
<,>,",',&) doivent être échappés pour éviter toute confusion avec la syntaxe XML. -
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 :
<tag>
data
</tag>
Attributs :
<tag attribute="metadata">
data
</tag>
Namespace :
<tag xmlns:f="https://namespace.com/example/">
<f:subtag>
data
</f:subtag>
</tag>
Exemple
<?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>
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.
-
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. -
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.
-
Imbrication : Les objets et les tableaux peuvent être imbriqués pour créer une structure hiérarchique et représenter des données complexes.
-
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. -
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.
-
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.
Exemple
{
"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
}
}
]
}
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 :
-
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.
-
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é.
-
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.
-
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.
-
É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".

