VT2020-Jsonnet-Fiche

From air
Revision as of 18:53, 15 November 2020 by Alexandra.Chaton (talk | contribs)
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

Jsonnet, mot valise de JSON et sonnet, est un langage de création de modèle de données (data templating language en anglais) spécialisé pour le format de données JSON.

Abstract

Jsonnet is a data templating language designed primarily for configuring complex systems. The standard use case is integrating multiple services which do not know about each other. Writing the configuration for each independently would result in massive duplication and most likely would be difficult to maintain. Jsonnet allows you to specify the configuration on your terms and programmatically set up all individual services. - Jsonnet Official Website

Synthèse

Origines

Histoire

Jsonnet, prononcé “jay sonnet” en anglais est un projet ayant vu le jour début 2014 et dont la première version fut lancée le 6 août de la même année.

La conception de Jsonnet est influencée par plusieurs langages de configuration internes à Google. Jsonnet est sous-licence Apache 2.0.

Objectifs Initiaux

JSON est devenu la norme de facto pour la communication de données structurées, tant entre les machines qu'à la frontière entre l'homme et la machine. Toutefois, en grande quantité JSON peut être difficile à gérer pour les humains, en particulier lorsque la duplication doit être maintenue en synchronisation entre les différentes parties de la structure des données. Ces problèmes étaient donc manuellement réglés en écrivant des scripts qui génèrent le JSON. Généralement, ces scripts sont écrits dans des langages de programmation généraux comme Python. Cependant, la maintenance de ces scripts peut être non triviale, en particulier pour les personnes qui ne sont pas familières avec le code de génération.

L'objectif de Jsonnet est donc de régler ses problèmes en créant un langage spécialisé guidé des critères tels que : la familiarité d’écriture, celle-ci devait être proche du JSON la modularité du code le fait d’être puissant mais simple : que les problèmes triviaux le reste mais que l’on puisse gérer des problèmes complexes la rigueur formelle : avoir une spécification faisant autorité

En 2020

Le 22 mai 2020 Jsonnet lance la version v0.16.0. Pour plus d’informations sur les différentes versions voir le GitHub du projet.

Caractéristiques de Jsonnet

JSON comparé à Jsonnet

Jsonnet est un data templating language, autrement dit un langage qui permet aux développeurs de prendre des données et de les insérer dans un format structuré, dédié au format JSON. Jsonnet est une extension de JSON, à partir d’un fichier .jsonnet l’utilisateur va pouvoir générer des fichiers au format JSON. En conséquence, tout fichier JSON valide est un fichier Jsonnet valide.


Rappels JSON

Pour rappel JSON est un format de données souvent utilisé pour effectuer des requêtes AJAX et qui va permettre de stocker des informations. Ces informations sont stockées dans un document qui comprend deux types d’éléments :

  • des ensembles de paires « nom » (alias « clé ») / « valeur »
  • des listes ordonnées de valeurs

Exemple de fichier .json :

{
    "employees": [
        {
            "firstName": "John",
            "lastName": "Doe"
        },
        {
            "firstName": "Anna",
            "lastName": "Smith"
        },
        {
            "firstName": "Peter",
            "lastName": "Jones"
        }
    ]
}

La syntaxe de JSON est donc très limitée et rigoureuse: les simples quotes ne sont pas autorisées, toutes les clés doivent être entre doubles quotes…

Fonctionnalités Jsonnet

Tandis que le format JSON va décrire les données littéralement, Jsonnet va ajouter des constructions pour générer, traduire et affiner les données ce qui va se traduire par :

  • une syntaxe plus libre : on peut ajouter des commentaires au code, double quote et simple quote peuvent être utilisées mais les clés n’ont plus à être entre double quote
  • des variables : on peut déclarer des variables ce qui évite une grande partie des duplications de code présentes en JSON
  • des fonctions : comme en Python, les fonctions ont des paramètres positionnels, des paramètres nommés et des arguments par défauts.
  • des opérations : on peut réaliser des calculs arithmétiques et booléens
  • des conditions : sous la forme if then else
  • des références : self référence l’objet courant tandis que $ désigne l’objet les plus extérieur
  • des imports

Pour voir toutes les fonctionnalités disponibles voir le site officiel de Jsonnet.

Exemple de fichier .jsonnet :

// Edit me!
{
  person1: {
    name: "Alice",
    welcome: "Hello " + self.name + "!",
  },
  person2: self.person1 { name: "Bob" },
}

Le fichier .json obtenu à partir du fichier .jsonnet :

{
  "person1": {
    "name": "Alice",
    "welcome": "Hello Alice!"
  },
  "person2": {
    "name": "Bob",
    "welcome": "Hello Bob!"
  }
}

- Site Officiel de Jsonnet

Jsonnet est donc également un langage de sérialisation. Il va coder les informations d’un fichier JSON de manière plus succincte, cette particularité va donc être très utile en termes de relecture du code.

Interpréteur et API

A l’heure actuelle, Jsonnet dispose de deux interpréteurs officiels : un en C++ disponible ici et un en Go disponible ici. Il dispose également d’API pour Python et C++. Des API non-officielles existent également pour Go, LuaJIT, Node.js, PHP, Ruby et Rust.


Veille Technologique