doc: add import_csv API description (#56955)

This commit is contained in:
Thomas NOËL 2021-10-22 16:06:11 +02:00
parent 6300d8d344
commit 07b1e7d149
1 changed files with 92 additions and 4 deletions

View File

@ -21,10 +21,10 @@ données associés.
</p>
<section id="create">
<title>Création d'une fiche</title>
<title>Création dune fiche</title>
<p>
La création d'une fiche se fait par une requête <code>POST</code> à
La création dune fiche se fait par une requête <code>POST</code> à
ladresse <code>/api/cards/<var>slug</var>/submit</code>, le contenu de
la requête doit être un dictionnaire contenant obligatoirement un attribut
<code>data</code>.
@ -80,7 +80,7 @@ données associés.
<p>
Lexemple suivant crée une fiche « Parking », dont le modèle
de fiche a comme identifiant « parkings », qui demanderait trois champs :
adresse (nom de variable <code>adresse</code>), date d'ouverture
adresse (nom de variable <code>adresse</code>), date douverture
(nom de variable <code>date_ouverture</code>) et nom (nom de variable
<code>nom</code>).
</p>
@ -110,8 +110,96 @@ données associés.
</section>
<section id="card-import-csv">
<title>Création dun ensemble de fiches par import CSV</title>
<p>
Il est possible de créer un ensemble de fiches par import dun fichier CSV.
Cela seffectue par une requête <code>PUT</code> à ladresse
<code>/api/cards/<var>slug</var>/import-csv</code>. Le contenu de la requête
doit être un fichier CSV (text/csv).
</p>
<p>
Chaque ligne du fichier va provoquer la création dune nouvelle fiche et lancer
le workflow correspondant.
</p>
<screen>
<output style="prompt">$ </output><input>curl -X PUT -H "Content-Type: text/csv" \
-H "Accept: application/json" \
https://www.example.net/api/cards/<var>slug</var>/import-csv<var>?signature…</var>
--data-binary @fichier.csv</input>
<output>{"err": 0}</output>
</screen>
<p>Le fichier CSV doit suivre le même format que celui utilisé lors dun import
CSV dans linterface de gestion.</p>
<section id="card-import-csv-async">
<title>Import CSV asynchrone (recommandé)</title>
<p>
En plus de la création des fiches, le workflow va être exécuté pour chacune :
sur un fichier CSV important le temps dexécution de limport peut dépasser la
limite acceptée par le serveur HTTP (souvent 20 ou 30 secondes). Il est donc
recommandé dutiliser loption asynchrone de limport CSV.
</p>
<p>
Pour faire un import asynchrone, ajouter <code>async=on</code> dans les
paramètres de lURL :
</p>
<screen>
<output style="prompt">$ </output><input>curl -X PUT -H "Content-Type: text/csv" \
-H "Accept: application/json" \
https://www.example.net/api/cards/<var>slug</var>/import-csv<var>?async=on</var>
--data-binary @fichier.csv</input>
<output>{
"err": 0,
"data": {
"job": {
"id": "1234",
"url": "https://www.example.net/api/jobs/1234/"
}
}
}</output>
</screen>
<p>
Cet appel envoie le fichier CSV, mais il nest pas aussitôt importé. Une tâche
(<em>job</em>) est lancée qui va effectivement faire limport, et on peut en
suivre la progression en appellant son URL indiquée en retour de lappel PUT.
</p>
<screen>
<output style="prompt">$ </output><input>curl -H "Accept: application/json" \
https://www.example.net/api/jobs/1234/</input>
<output>{
"err": 0,
"data": {
"status": "en cours",
"label": "Importation des données dans des fiches",
"creation_time": 1634910701,
"completion_time": null,
"completion_status": "23/46 (50%)"
}
}</output>
</screen>
<p>
Pour suivre la bonne exécution de limport, il faut appeler cette URL jusquà
ce que la valeur <code>completion_time</code> soit renseignée. La valeur
<code>status</code> permet de savoir alors si limport s'est correctement
déroulé.
</p>
</section>
</section>
<section id="card">
<title>Récupération des données dune fiches</title>
<title>Récupération des données dune fiche</title>
<p>
Lexemple suivant récupère les données dune fiche « Parking », dont le modèle