Extension:JsonConfig/fr

L'extension JsonConfig permet aux autres extensions de stocker leurs données de configuration en tant que blob JSON à l'intérieur d'une page wiki.

Fonctionnalités disponibles et cas d'utilisation

 * You may use JsonConfig to store data in a number of ways:
 * in a single configuration page, e.g. a number of settings for your extension in "Config:MyExtSettings ( is the default namespace associated with the JsonConfig extension);
 * in a set of pages with similar structure residing in their own namespace, e.g. IP addresses of known proxies or event log schemas named "Proxy:Opera", or schemas named Schema:AccountCreation
 * using it only for pages whose titles match a regex pattern, e.g. Config:Proxy:Opera or Config:Opera.proxy. This avoids filling a wiki with lots of namespaces, one for each content model.
 * You may provide a content class to do data validation (beyond valid JSON) and normalization.
 * You may provide a view class to customize HTML display.
 * You can store data:
 * "one-per-wiki", "one-per-cluster", or even one per some "family" (different structure of the caching key for shared memcached);
 * in a public or private wiki and accessed with credentials;
 * in a separate cluster, and do remote notification when changed.

Current

 * Commons tabular data sets
 * Commons map data sets
 * Dashiki dashboard configurations
 * Others?

Past

 * Wikipedia Zero operator configurations (see Extension:ZeroBanner)

Cette variable définit les profils pour chaque type de page de configuration. est un tableau associatif de sous-tableaux dont chacun contient zéro ou plusieurs des paramètres suivants. Par défaut, JsonConfig utilise la clé en chaîne de caractères comme ID du modèle représenté par ce profil, mais si vous voulez réutiliser le même ID de modèle dans plusieurs profils, vous pouvez la réécraser à l'aide du praramètre.

Cette variable déclare l'ID du modèle géré par chacune des classes de contenu personnalisées. La même classe de contenu peut gèrer plusieurs ID de modèles. Toutes les classes de contenu doivent dériver de la classe  ;  si le modelID correspond à , alors la classe par défaut   prend en charge l'ID du modèle.

Exemple :

Si vous implémentez une classe séparée pour la génération du HTML, vous pouvez spécifier votre modèle de configuration comme un tableau avec une classe supplémentaire  :

Hello World
The simplest case is a single configuration page without any validation, stored locally on each wiki. Just add these settings to LocalSettings.php

The above enables namespace "Config" on the local wiki, but only allows the "Config:MySettings" page to be created, not any other page in that namespace. You can store well-formed JSON data in the page.

To read the MySettings data in PHP, use a  object to access the page, then request its content:

Congurations multiples partagées au sein d'une grappe
Lets say we decide to store the trusted proxies' IPs as "Config:Proxy:SomeName" pages on Meta-Wiki and share this data with the cluster.

If instead you want to dedicate a separate namespace to proxies, the parameters would change to:

Validation
Souvent on souhaite aussi avoir une classe de contenu personnalisée avec sa propre validation. Les pages JSON sont gérées par les classes de contenu qui dérivent de. La classe de contenu est responsable de l'analyse syntaxique et de la validation du texte brut. ne fait aucune validation au-delà de l'analyse JSON, mais vous pouvez choisir d'en dériver et de redéfinir. Encore mieux, vous pouvez dériver la classe  qui fournit un nombre de primitives de validation, et redéfinir seulement.

Grâce à cette documentation, supposons que la page de configuration du proxy qui décrit les serveurs Opera Mini possède ces formats :

Voici la classe de contenu pour valider ces données.

Personnaliser le comportement sur le wiki de stockage
Vous pouvez aussi personnaliser l'affichage et la création de page sur le wiki de stockage (Meta-Wiki dans l'exemple ci-dessus). Deux moyens pour faire cela : soit dans votre classe dérivée de , soit par une classe « view » séparée qui dérive de. La seconde approche est préférable car elle sépare clairement l'architecture, et la classe de visualisation n'a besoin d'exister uniquement que sur le wiki de stockage (c'est à dire Meta-Wiki) et non pas sur tous les wikis qui utilisent les données.

Pour redéfinir la valeur par défaut dans la classe dérivée de, redéfinissez le constructeur et initialisez la valeur   avec la nouvelle valeur par défaut si la valeur d'entrée est NULL, avant de la passer au constructeur du parent. Pour substituer la génération du HTML, réécrasez.

En suivant la méthode recommandée, créez une classe de visualisation qui dérive de  ou d'une classe avec plus de fonctionnalités. Pour, vous devrez implémenter   et. Par défaut, la vue est implémentée par la classe, qui peut aussi être utilisée comme base personnalisable si vous avez besoin simplement d'ajustements mineurs concernant l'apparence.

Meilleures pratiques

 * Les extensions qui utilisent JsonConfig doivent ajouter leurs configurations à  et à   dans le fichier principal de l'extension.
 * Si vous partagez des données de configuration à travers plusieurs wikis, renseignez le nom de clé utilisé dans, et initialisez la section 'store' / 'remote' de  . C'est mieux que d'introduire un nombre de variables globales qui double la fonction des paramètres. Voir par exemple les paramètres Wikimedia de l'extension Graph pour plusieurs wikis (bien qu'elle utilise une configuration complexe multi-wiki plutôt que de simples variables de configuration).

Fonctionnalités implémentées

 * L' analyse syntaxique JSON convertit le texte JSON soit en tableau soit en objet.
 * La visualisation affiche le JSON sous forme de table facile à visualiser plutôt que le code, avec quelques mises en valeur supplémentaires. Par exemple si la valeur n'est pas fournie et qu'une valeur par défaut est utilisée, l'affichage est en gris, et lorsque la valeur est la même que celle par défaut, alors l'affichage est en violet. Pour les exemples, voir ici et ici.
 * L' éditeur de code simplifie l'édition JSON
 * la validation utilisateur réalise des contrôles complexes tels que vérifier que la valeur est au bon format ou bien que l'ID d'un utilisatuer existe bien.
 * la mise en cache mémoire enregistre les blobs JSON dans le cache mémoire sous des clés personnalisées et des règles d'expiration, et les réinitialise à l'enregistrement.
 * la prise en charge du marquage des révisions autorise de marquer les configurations « a été revu » (reviewed) avant de passer en production
 * la traduction de la plupart des éléments d'interface de base a été faite en plusieurs langues, et cela réduirait le travail de traduction si la plupart des messages communs étaient traduits et centralisés en un même endroit.

Fonctionnalités non implémentées mais bienvenues
Ces fonctionnalités sont souhaitables pour plus d'un type de configurations :
 * le valideur de schéma - valide le schéma JSON, étant donné que la plupart des extensions ne nécessitent pas de règles de validation complexes, ou si elles auraient besoin de combiner la validation du schéma et des règles supplémentaires.
 * l' éditeur personnalisé - l'équipe zéro pense à implémenter un éditeur plus complexe, événtuellement basé sur le schéma JSON.
 * la prise en charge de l' API de requête - elle permet de recevoir les pages de configuration en tant que résultats réguliers d'API dans tous les formats - json/xml/... au lieu de blobs textuels :
 * la localisation - il serait utile de pouvoir afficher les descriptions traduites pour chaque clé de configuration.
 * la localisation - il serait utile de pouvoir afficher les descriptions traduites pour chaque clé de configuration.

Liens externes
Les données de configuration enregistrées peuvent souvent être nécessaires à un agent externe quelconque tel que du JavaScript, un robot ou d'autres programmes. Le JavaScript peut utiliser soit JSONP pour accéder aux données nécessaires en appelant l'API standard, ou nous pouvons développer un service de retransmission si CORS n'est pas disponible. Les auteurs d'extensions peuvent choisir d'ajouter leur propres modules d'API pour fournir les informations spécifiques au domaine. Enfin, le paramètre de requête  doit renvoyer les données JSON dans les résultats de l'API, et non pas en tant que blob textuel renvoyé par.