Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente Prochaine révisionLes deux révisions suivantes |
reseaux:generalites:cbor [2021/11/20 18:08] – [1.7 Le type flottant et valeurs particulières] phil | reseaux:generalites:cbor [2021/12/12 08:29] – [La sérialisation (suite)] phil |
---|
| |
===== La sérialisation (suite)===== | ===== La sérialisation (suite)===== |
[Mise à jour le 20/11/2021] | [Mise à jour le 12/12/2021] |
| |
==== 1. CBOR ==== | ==== 1. CBOR ==== |
{{ :reseaux:generalites:cbor.png?nolink&80|}} | {{ :reseaux:generalites:cbor.png?nolink&80|}} |
* **Vidéo** sur YouTube <html><a href="https://www.youtube.com/watch?v=thSWuJ-1ld0&t=546s" target="_blank">CBOR2</a></html> | * **Vidéo** sur YouTube : <html><a href="https://www.youtube.com/watch?v=thSWuJ-1ld0&t" target="_blank"><strong>CBOR2</strong></a></html> |
| |
JSON et CBOR sont tous les deux des modes de codage de la donnée. | JSON et CBOR sont tous les deux des modes de codage de la donnée. |
JSON introduit une notation très flexible permettant de représenter toutes les structures de données. Le choix de l'ASCII rend ce format universel et n'importe quel ordinateur pourra le comprendre. Mais l'utilisation de l'ASCII ne permet pas de transmettre de manière optimale l'information sur un réseau. Quand les réseaux ont un débit raisonnable, cela ne pose pas de problème. Quand on en vient à l'internet des objets, il faut prendre en compte la capacité de traitement limité des équipements et la faible taille des messages échangés. | JSON introduit une notation très flexible permettant de représenter toutes les structures de données. Le choix de l'ASCII rend ce format universel et n'importe quel ordinateur pourra le comprendre. Mais l'utilisation de l'ASCII ne permet pas de transmettre de manière optimale l'information sur un réseau. Quand les réseaux ont un débit raisonnable, cela ne pose pas de problème. Quand on en vient à l'internet des objets, il faut prendre en compte la capacité de traitement limité des équipements et la faible taille des messages échangés. |
| |
Ainsi, en <html><a href="https://fr.wikipedia.org/wiki/American_Standard_Code_for_Information_Interchange" target="_blank">ASCII</a></html>, la valeur 123 est codée sur 3 octets (un octet par caractère) tandis qu'en binaire elle n'occuperait qu'un seul octet : 0111 1011. | Ainsi, en <html><a href="https://fr.wikipedia.org/wiki/American_Standard_Code_for_Information_Interchange" target="_blank"><strong>ASCII</strong></a></html>, la valeur 123 est codée sur 3 octets (un octet par caractère) tandis qu'en binaire elle n'occuperait qu'un seul octet : 0111 1011. |
| |
<html><a href="https://www.bortzmeyer.org/7049.html" target="_blank">CBOR</a></html> (**Concise Binaire Object Representation**), défini dans le <html><a href="https://www.bortzmeyer.org/7049.html" target="_blank">RFC 7049</a></html>, permet de représenter les structures de JSON mais suivant une représentation binaire.Si CBOR est complètement compatible avec JSON, il est possible de représenter d'autres types d'information très utiles dans l'internet des objets. | <html><a href="https://www.bortzmeyer.org/7049.html" target="_blank">CBOR</a></html> (**Concise Binaire Object Representation**), défini dans le <html><a href="https://www.bortzmeyer.org/7049.html" target="_blank"><strong>RFC 7049</strong></a></html>, permet de représenter les structures de JSON mais suivant une représentation binaire.Si CBOR est complètement compatible avec JSON, il est possible de représenter d'autres types d'information très utiles dans l'internet des objets. |
| |
La taille de l'information est réduite et le traitement simplifié. Il faut savoir un peu jongler avec la représentation binaire mais cela reste basique. | La taille de l'information est réduite et le traitement simplifié. Il faut savoir un peu jongler avec la représentation binaire mais cela reste basique. |
| |
CBOR définit 8 types majeurs qui sont représentés par les 3 premiers bits d'une structure CBOR. Ces types majeurs ont donc des valeurs comprises entre 0 et 7 (000 à 111 en binaire). \\ {{ :reseaux:generalites:cbor1.png?nolink& |}} | CBOR définit **8 types** majeurs qui sont représentés par les **3 premiers bits d'une structure CBOR**. Ces types majeurs ont donc des valeurs comprises entre **0** et **7** (000 à 111 en binaire). \\ {{ :reseaux:generalites:cbor1.png?nolink& |}} |
| |
Les cinq bits suivants contiennent soit une valeur soit une longueur indiquant combien d'octets sont nécessaires pour coder la valeur. CBOR offre ainsi des optimisations qui permettent de réduire la longueur totale de la structure des données | Les **cinq bits suivants** contiennent soit une **valeur** soit une **longueur** indiquant combien d'octets sont nécessaires pour coder la valeur. CBOR offre ainsi des optimisations qui permettent de réduire la longueur totale de la structure des données |
| |
=== 1.1 Type Entier Positif === | === 1.1 Type Entier Positif === |
</code> | </code> |
| |
Le module cbor utilise comme pour JSON la méthode dumps pour sérialiser une structure interne de Python dans la représentation demandée. À l'inverse, la méthode loads sera utilisée pour importer une structure CBOR dans une représentation interne. | Le module cbor utilise comme pour JSON la méthode **dumps** pour sérialiser une structure interne de Python dans la représentation demandée. À l'inverse, la méthode **loads** sera utilisée pour **importer** une structure CBOR dans une représentation interne. |
| |
La boucle permet d'avoir les multiples de 10 (variable v). Le print en ligne 7 permet d'aligner les données pour que l'affichage soit plus clair ; entre les accolades, le premier chiffre indique la position dans les arguments de format ; le second, après le :, le nombre de caractères. Par exemple, {1:30} indique l'argument v de format affiché sur 30 caractères. | La boucle permet d'avoir les multiples de 10 (variable v). Le print en ligne 7 permet d'aligner les données pour que l'affichage soit plus clair ; entre les accolades, le premier chiffre indique la position dans les arguments de format ; le second, après le :, le nombre de caractères. |
| |
| Par exemple, {1:30} indique l'argument v de format affiché sur 30 caractères. |
| |
Le programme donne le résultat suivant : | Le programme donne le résultat suivant : |
</code> | </code> |
| |
<note tip>Le site web <html><a href="https://cbor.me/" target="_blank">cbor.me</a></html> permet de faire automatiquement le codage dans un sens ou dans l'autre.</note> | <note tip>Le site web <html><a href="https://cbor.me/" target="_blank"><strong>cbor.me</strong></a></html> permet de faire automatiquement le codage dans un sens ou dans l'autre.</note> |
| |
La colonne de gauche représente la donnée en JSON et celle de droite en CBOR (dite "représentation canonique" qui facilite la lecture). | La colonne de gauche représente la donnée en JSON et celle de droite en CBOR (dite "représentation canonique" qui facilite la lecture). |
CBOR enrichit le typage des données ; ce qui permet de manipuler plus facilement des données. Par exemple, une chaîne de caractères peut représenter une date, une URI, voire une URI codée en base 64. | CBOR enrichit le typage des données ; ce qui permet de manipuler plus facilement des données. Par exemple, une chaîne de caractères peut représenter une date, une URI, voire une URI codée en base 64. |
| |
<note tip>Le type **110** peut être suivi d'une valeur dont une liste exhaustive est donnée <html><a href="https://www.iana.org/assignments/cbor-tags/cbor-tags.xhtml" target="_blank">ici</a></html>.</note> | <note tip>Le type **110** peut être suivi d'une valeur dont une liste exhaustive est donnée <html><a href="https://www.iana.org/assignments/cbor-tags/cbor-tags.xhtml" target="_blank"><strong>ici</strong></a></html>.</note> |
| |
Par exemple, le programme //cbor-tag.py// affiche la date du jour, la convertit en notation CBOR et la reconvertit en variable Python grâce à la méthode loads. | Par exemple, le programme //cbor-tag.py// affiche la date du jour, la convertit en notation CBOR et la reconvertit en variable Python grâce à la méthode loads. |
<note tip>Finalement, ce type peut indiquer la fin d'un tableau ou d'une liste de paires quand la taille n'est pas connue au début du codage.</note> | <note tip>Finalement, ce type peut indiquer la fin d'un tableau ou d'une liste de paires quand la taille n'est pas connue au début du codage.</note> |
| |
=== 1.8 CBOR === | === 1.8 CBOR sur des exemples === |
* Vidéo Youtube https://www.youtube.com/watch?v=h1XnaFy_FoI | * **Vidéo** Youtube : site <html><a href="https://www.youtube.com/watch?v=h1XnaFy_FoI" target="_blank"><strong>cbor.me</strong></a></html> |