[AlternC-dev] Formalisme export data en json ?

Retour à l'archive de la liste
Le site d'AlternC
Google Custom Search

Remi remi+tech at b6.be
Lun 24 Mar 09:56:45 CET 2014


Salut,

Je réponds un peu tard...

|Parmi les postulats pris en compte :
|-* les objets/entités sont en anglais,
|-* les mots de passe sont toujours en clair et encodé ,
|-* les objets mutliples sont au pluriel ,
|-* si on peut avoir liste d'information de même nature c'est un tableau d'objet.
|
|On pourra constater des bizarreries avec  les objets/services. FTPs,
|... . Du coup je pencherai pour englober domains dans un objet de type
|"zone" par exemple.
|J'ai pris le service Mysql car c'est spécifique à cet outil, et non
|proftp car cela pourrait fonctionner pour tout autre service du même
|genre.
|
|Je n'ai pas encore formalisé la notion de droits mysql, ....
|
|
|L'idée serait d'avoir un formalisme qu'on puisse généraliser à toute
|version et l'étendre selon les spécificité de version et de module
|installé.

Il faut effectivement concevoir l'export sur un principe de modularité.

Chaque module transmet son propre export, et ton fichier résultant ne fait 
qu'agréger. Dans ton exemple, tu as 3 modules : "domain", "ftp", "mysql". 
S'ajoutent à ces modules, les informations de bases du compte (login, 
password).

Tu pourrais ainsi imaginer au niveau de chaque classe AlternC une fonction 
"export" et une fonction "import". ( = AlternC n'a pas besoin de savoir 
décoder l'ensemble de l'export mais sous-traite celui-ci à ses différents 
modules)

<export version="0.8">
	<account>
		<login>raplapla</login>
		<password enctype="clear">lepneu</password>
	</account>
	<modules>
		<module name="domain">
			<config version="1.0">
				<domain_list>
					<domain>
						<name>raplapla.org</name>
						<sub_list>

						</sub_list>
					</domain>
					<domain>
						<name>raplapla.org</name>
						<sub_list>
							<sub>[...]</sub>
						</sub_list>
					</domain>
				</domain_list>
			</config>
		</module>
	</modules>
</export>

"export" : {
	"version": "0.8",
	"account": {
		"login": "raplapla",
		"password": {
			"enctype": "clear",
			"value": "lepneu",
		}
	},
	"modules": [
		"module" : {
			"name": "domain",
			"config" : [
				"version": "1.0",
				"domain_list": [

				],
			]
		}
	]
}

Pour chaque module, tu as 3 choses à exporter :
- les données de la BDD (ex: listes de listes mailman appartenant à un 
utilisateur),
- les données physiques (ex: archives de discussion),
- les données résultant de l'exécution d'une commande (ex: la liste des 
membres d'une liste ou sa configuration).

Tout ne peut pas être mis dans l'export texte et donc l'export sera 
accompagné d'un ensemble de répertoires correspondant à chaque module.

Même si on a envie de garantir une compatibilité ascendante, il faudrait 
faire figurer la version dans l'export pour se garantir une marge de 
manoeuvre et une possibilité de refonte du format (tant au niveau Alternc 
qu'au niveau du module)

Pour l'Autre Net, j'avais mis en place un processus d'export de comptes. 
Le principe était 7 classes (aws, db, dom, ftpusers, mailman,mail, 
membres) exportant chacune au besoin un ou plusieurs dump xml de leur 
config, exécutant les commandes voulues et stockant les données 
spécifiques dans un répertoire à leur nom.
Je n'avais pas resenti le besoin de fusionner toutes les données dans le 
même XML. J'imaginais plus transmettre un "zip" si export complet.

Pour le mot de passe, j'imagine plutôt : soit il est en clair, soit il est 
encrypté:
<password enctype="md5">ab121ab31ab23b1b2a31ba13b</password>

ou

"password" : {
	"enctype":"md5",
	"value" : "ab121ab31ab23b1b2a31ba13b",
}

Je ne suis pas fan du "s" à "domains" et "ftps" puisqu'il s'agit ici 
normalement du nom du module.

Il te faut trouver une structure de donnée qui soit exportable aussi bien 
en Json, qu'en XML (format plus standard). Dans ton exemple, je ne vois 
pas comment traduire la partie domaine en XML.
Pour les API, il faudrait pouvoir exporter dans le format voulu donc la 
question se reposera à ce moment-là.

Remi



Plus d'informations sur la liste de diffusion Dev