Documentation en ligne

Stockage de données JSON (obsolète)

Attention : l'utilisation d'un « JSON Datastore » est dĂ©prĂ©ciĂ© dans Publik, au profit de l'utilisation des fiches. Aussi, si vous devez crĂ©er maintenant une source de donnĂ©es, prĂ©voyez directement une gestion de votre source de donnĂ©es Ă  base de fiches.

Une gestion de la relation usagers n'est pas focalisée sur le stockage durable de données, CNIL et RGPD obligent.

Cependant, il peut arriver, pour les assocations par exemple, que l'on ait besoin de stocker des informations ailleurs que dans la demande. Nous utilisons pour cela ce que nous appelons un « JSON Datastore ». Nous expliquons ici comment enregistrer et réutiliser des données au format JSON, dans ce store.

Création du store

La première chose à faire, pour utiliser cet espace de stockage, et d'aller dans la brique « Services web » (Passerelle) pour créer un nouveau connecteur en cliquant sur « Ajouter un connecteur ».

Dans « Sources des donnĂ©es », vous choisirez « Stockage de donnĂ©es JSON ». En plus du titre et de la description,  vous devrez indiquer une valeur qui sera utilisĂ©e comme identifiant unique de chaque enregistrement dans la base. Il faut choisir une des variables qui sera systĂ©matiquement envoyĂ©e lors de la crĂ©ation d'un enregistrement et lui appliquer le filtre |safe ou |slugify pour ĂŞtre sĂ»r que son nom sera informatiquement correct.

Par exemple : {{nom|safe}}

Enregistrement d'informations dans le store

Pour stocker des informations dans le store vous allez utiliser l'action de workflow webservice et la configurer comme suit :

  • URL : {{passerelle_url}}jsondatastore/IDENTIFIANT-DU-CONNECTEUR/data/create
  • MĂ©thode : POST
  • DonnĂ©es Ă  envoyer dans le corps de la requĂŞte : sur chaque ligne, un couple attribut / valeur (par exemple nom_association / {{form_var_nom_association}}.

Attention, lorsque vous souhaitez dĂ©poser un fichier sur le store, il faut procĂ©der un peu diffĂ©remment des autres champs. Si votre champ a pour identifiant « fichier » nous n'allez pas juste indiquer {{ form_var_fichier }} comme valeur mais {{ form_var_fichier_url }} : c'est l'URL de ce fichier que vous devez stocker dans le store et non le fichier lui-mĂŞme (ce qui est impossible).

Pour lier l'enregistrement Ă  l'utilisateur (connectĂ©) qui a fait la demande, vous pouvez transmettre dans « DonnĂ©es Ă  envoyer en paramètres de l'URL » un paramètre name_id et lui donner pour valeur {{form_user_name_identifier_0}}

Récupération d'informations depuis le store

Dans un formulaire

Pour afficher dans un champ liste, tous les enregistrements correspondant Ă  un utilisateur (lorsque l'on a fait le choix d'associer l'identifiant des utilisateurs aux enregistrement), on pourra configurer la source de donnĂ©es de ce champ liste en indiquant pour « URL du JSON » :

{{passerelle_url}}jsondatastore/IDENTIFIANT-DU-STORE/data/?name_id={% firstof session_user_name_identifier_0 "nc" %}

Après sĂ©lection par le demandeur d'un enregistrement dans la liste et après qu'il ait changĂ© de page, tous les attributs de l'enregistrement peuvent ĂŞtre rĂ©cupĂ©rĂ©s en utilisant :

form_var_IDENTIFIANT-DE-LA-LISTE_content_NOM-DE-L-ATTRIBUT

Si par exemple mon champ liste a pour identifiant association et que les enregistrements dans le store ont un attribut creation, je peux récupérer ce dernier dans la variable.

form_var_association_content_creation

Via le workflow

On pourra configurer une action de webservice pour récupérer les enregistrements en fonction de leur identifiant

  • URL : {{passerelle_url}}jsondatastore/IDENTIFIANT-DU-CONNECTEUR/data/IDENTIFIANT-ENREGISTREMENT/
  • MĂ©thode : GET

Utiliser un attribut

Dans le formulaire ou le workflow, on peut rĂ©cupĂ©rer un enregistrement en interrogeant le store concernant la valeur d'un attribut particulier. Pour un store dont l'identifiant est « test » je peux rĂ©cupĂ©rer les enregistrements dont la valeur pour l'attribut nom est « Strummer », en utilisant  l'URL :

{{ passerelle_url }}/jsondatastore/test/data/by/nom/?value=Strummer

Modifier les informations dans le store

Avec l'action webservice on aura le choix entre remplacer, mettre Ă  jour ou supprimer les informations existantes.

Remplacer (enregistrement original effacé)

  • URL : {{passerelle_url}}jsondatastore/IDENTIFIANT-DU-CONNECTEUR/data/IDENTIFIANT-ENREGISTREMENT/
  • MĂ©thode : POST

Mettre à jour (enregistrement original modifié)

  • URL : {{passerelle_url}}jsondatastore/IDENTIFIANT-DU-CONNECTEUR/data/IDENTIFIANT-ENREGISTREMENT/
  • MĂ©thode : PATCH

Supprimer

  • URL : {{passerelle_url}}jsondatastore/IDENTIFIANT-DU-CONNECTEUR/data/IDENTIFIANT-ENREGISTREMENT/delete
  • MĂ©thode : POST

Détails techniques

Si vous ne comprenez pas les informations contenues dans cette partie, c'est que vous n'en avez pas besoin.

Ajout d'informations¶

Un POST d'un objet JSON sur l'adresse …/data/create/ du connecteur stocke l'objet et fournit en retour l'identifiant qui lui a Ă©tĂ© attribuĂ©, exemple :

$ curl -X POST \
       -d '{"nom": "Foo Bar 2000", "numero": "123456789"}' \
       https:/passerelle.example.net/jsondatastore/associations/data/create
{"text": "Foo Bar 2000 (123456789)",
 "id": "a53cdd0b99ed43a4bf7ddc102f919948",
 "err": 0}

Dans le paramétrage du connecteur, il est possible de paramétrer le modèle à appliquer pour la valeur de la clé "text", dans cet exemple on aura ainsi mis {{nom}} ({{numero}}).

Récupération de données¶

Un appel Ă  l'adresse …/data/<identifiant>/ retourne l'objet enregistrĂ© :

$ curl https:/passerelle.example.net/jsondatastore/associations/data/a53cdd0b99ed43a4bf7ddc102f919948/
{
 "content": {
   "nom": "Foo Bar 2000",
   "numero": "123456789" 
 },
 "text": "Foo Bar 2000 (123456789)",
 "id": "a53cdd0b99ed43a4bf7ddc102f919948",
 "err": 0
}

Récupération de l'ensemble des données¶

L'adresse …/data/ seule permet de rĂ©cupĂ©rer toutes les donnĂ©es :

$ curl https:/passerelle.example.net/jsondatastore/associations/data/
{
 "data": [
  {
   "content": {
     "nom": "Foo Bar 2000",
     "numero": "123456789" 
   },
   "text": "Foo Bar 2000 (123456789)",
   "id": "a53cdd0b99ed43a4bf7ddc102f919948" 
  },
  {
   "content": {
     "nom": "Bzze",
     "numero": "0234" 
   },
   "text": "Bzze (0234)",
   "id": "1ad86d329ec54ea6b37c9b22473e1395" 
  }
 ],
 "err": 0
}

Modification de données¶

Un POST Ă  la mĂŞme adresse, …/data/<identifiant>/, permet d'actualiser les donnĂ©es :

$ curl -X POST \
       -d '{"nom": "Foo Bar 2001", "numero": "123456789"}' \
       https:/passerelle.example.net/jsondatastore/associations/data/a53cdd0b99ed43a4bf7ddc102f919948/
{
 "content": {
   "nom": "Foo Bar 2001",
   "numero": "123456789" 
 },
 "text": "Foo Bar 2001 (123456789)",
 "id": "a53cdd0b99ed43a4bf7ddc102f919948",
 "err": 0
}

Suppression de données¶

Un POST Ă  l'adresse …/data/<identifiant>/delete permet de supprimer un objet :

$ curl -X POST \
       https:/passerelle.example.net/jsondatastore/associations/data/a53cdd0b99ed43a4bf7ddc102f919948/delete
{"err": 0}

Possibilité de lier les données à un compte¶

Les diffĂ©rents appels acceptent un paramètre name_id qui permet d'associer aux requĂŞtes l'identifiant du « propriĂ©taire Â» de l'objet JSON.

# enregistrement
$ curl -X POST \
       -d '{"nom": "Foo Bar 2000", "numero": "123456789"}' \
       https:/passerelle.example.net/jsondatastore/associations/data/create?name_id=AZERTY
{"text": "Foo Bar 2000 (123456789)",
 "id": "a53cdd0b99ed43a4bf7ddc102f919948",
 "err": 0}

# liste
$ curl https:/passerelle.example.net/jsondatastore/associations/data/?name_id=AZERTY
{
 "data": [
  {
   "content": {
     "nom": "Foo Bar 2000",
     "numero": "123456789" 
   },
   "text": "Foo Bar 2000 (123456789)",
   "id": "a53cdd0b99ed43a4bf7ddc102f919948" 
  }
 ],
 "err": 0
}

# liste pour un autre identifiant
$ curl https:/passerelle.example.net/jsondatastore/associations/data/?name_id=QSDFGH
{
 "data": [],
 "err": 0
}

# récupération
$ curl https:/passerelle.example.net/jsondatastore/associations/data/a53cdd0b99ed43a4bf7ddc102f919948/?name_id=AZERTY
{
 "content": {
   "nom": "Foo Bar 2000",
   "numero": "123456789" 
 },
 "text": "Foo Bar 2000 (123456789)",
 "id": "a53cdd0b99ed43a4bf7ddc102f919948",
 "err": 0
}

# récupération avec un autre identifiant
$ curl https:/passerelle.example.net/jsondatastore/associations/data/a53cdd0b99ed43a4bf7ddc102f919948/?name_id=QSDFGH
{
 "err_class": "passerelle.apps.jsondatastore.models.DoesNotExist",
 "err_desc": "JsonData matching query does not exist.",
 "data": null,
 "err": 1
}

Dernière mise à jour le 25/04/2025 09:42 — Éditer