reseaux:generalites:cbor

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

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:11] – [1.8 CBOR] philreseaux:generalites:cbor [2021/12/19 08:17] – [1.1 Type Entier Positif] phil
Ligne 2: Ligne 2:
  
 ===== 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.
Ligne 12: Ligne 12:
 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 JSONmais 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 utile 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 binairemais 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 ===
Ligne 49: Ligne 49:
 </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 :
Ligne 80: Ligne 82:
 La taille de la représentation s'adapte à la valeur. Ainsi, il n'est pas nécessaire de définir une taille fixe pour coder une donnée. La taille de la représentation s'adapte à la valeur. Ainsi, il n'est pas nécessaire de définir une taille fixe pour coder une donnée.
  
-On peut aussi noter que comme le type majeur est sur 3 bits, ce type peut être reconnu car il commence par la valeur "0" ou "1+On peut aussi noter que comme le type majeur est sur 3 bits, ce type peut être reconnucar il commence par la valeur "0" ou "1
  
 === 1.2 Type entier négatif === === 1.2 Type entier négatif ===
Ligne 183: Ligne 185:
 </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).
Ligne 191: Ligne 193:
 {{ :reseaux:generalites:capture_d_e_cran_2018-05-21_a_20.34.05.png?nolink&900 |}} {{ :reseaux:generalites:capture_d_e_cran_2018-05-21_a_20.34.05.png?nolink&900 |}}
  
-<note tip>On peut calculer le degré de compression de CBOR. Ainsi, dans le premier exemple, le tableau JSON [1,2,3,4] faisait 9 caractères tandis que la représentation CBOR n'en faisait que 5. Pour le dernier exemple (illustration ci dessus), les 13 octets de la représentation CBOR sont transformés en 34 caractères (donc 34 octets) en JSON.</note>+<note tip>On peut calculer le degré de compression de CBOR. Ainsi, le tableau JSON [1,2,3,4] est codé sur 9 caractères tandis que la représentation CBOR 8401020304 n'en fait que 5. Pour l'illustration ci dessus, les 13 octets de la représentation CBOR sont transformés en 34 caractères (donc 34 octets) en JSON.</note>
  
  
Ligne 241: Ligne 243:
 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.
Ligne 277: Ligne 279:
  
 === 1.8 CBOR sur des exemples === === 1.8 CBOR sur des exemples ===
-  * **Vidéo** Youtube : site <html><a href="https://www.youtube.com/watch?v=h1XnaFy_FoI" target="_blank">cbor.me</a></html>+  * **Vidéo** Youtube : site <html><a href="https://www.youtube.com/watch?v=h1XnaFy_FoI" target="_blank"><strong>cbor.me</strong></a></html>
  • reseaux/generalites/cbor.txt
  • Dernière modification : 2021/12/19 08:19
  • de phil