Projet

Général

Profil

0001-doc-add-import_csv-API-description-56955.patch

Thomas Noël, 22 octobre 2021 16:06

Télécharger (4,55 ko)

Voir les différences:

Subject: [PATCH] doc: add import_csv API description (#56955)

 help/fr/api-cards.page | 97 ++++++++++++++++++++++++++++++++++++++++--
 1 file changed, 93 insertions(+), 4 deletions(-)
help/fr/api-cards.page
21 21
</p>
22 22

  
23 23
<section id="create">
24
  <title>Création d'une fiche</title>
24
  <title>Création dune fiche</title>
25 25

  
26 26
  <p>
27
   La création d'une fiche se fait par une requête <code>POST</code> à
27
   La création dune fiche se fait par une requête <code>POST</code> à
28 28
   l’adresse <code>/api/cards/<var>slug</var>/submit</code>, le contenu de
29 29
   la requête doit être un dictionnaire contenant obligatoirement un attribut
30 30
   <code>data</code>.
......
80 80
  <p>
81 81
   L’exemple suivant crée une fiche « Parking », dont le modèle
82 82
   de fiche a comme identifiant « parkings », qui demanderait trois champs :
83
   adresse (nom de variable <code>adresse</code>), date d'ouverture
83
   adresse (nom de variable <code>adresse</code>), date douverture
84 84
   (nom de variable <code>date_ouverture</code>) et nom (nom de variable
85 85
   <code>nom</code>).
86 86
  </p>
......
110 110

  
111 111
</section>
112 112

  
113
<section id="card-import-csv">
114
<title>Création d’un ensemble de fiches par import CSV</title>
115

  
116
<p>
117
Il est possible de créer un ensemble de fiches par import d’un fichier CSV.
118
Cela s’effectue par une requête <code>PUT</code> à l’adresse
119
<code>/api/cards/<var>slug</var>/import-csv</code>. Le contenu de la requête
120
doit être un fichier CSV (text/csv).
121
</p>
122

  
123
<p>
124
Chaque ligne du fichier va provoquer la création d’une nouvelle fiche et lancer
125
le workflow correspondant.
126
</p>
127

  
128
<screen>
129
<output style="prompt">$ </output><input>curl -X PUT -H "Content-Type: text/csv" \
130
       -H "Accept: application/json" \
131
       https://www.example.net/api/cards/<var>slug</var>/import-csv<var>?signature…</var>
132
       --data-binary @fichier.csv</input>
133
<output>{"err": 0}</output>
134
</screen>
135

  
136
<p>Le fichier CSV doit suivre le même format que celui utilisé lors d’un import
137
CSV dans l’interface de gestion.</p>
138

  
139
<section id="card-import-csv-async">
140
<title>Import CSV asynchrone (recommandé)</title>
141

  
142
<p>
143
En plus de la création des fiches, le workflow va être exécuté pour chacune :
144
sur fichier CSV important le temps d’exécution de l’import peut dépasser la
145
limite acceptée par le serveur HTTP (souvent 20 ou 30 secondes). Il est donc
146
recommandé d’utiliser l’option asynchrone de
147
l’import CSV.
148
</p>
149

  
150
<p>
151
Pour faire un import asynchrone, ajouter <code>async=on</code> dans les
152
paramètres de l’URL :
153
</p>
154

  
155
<screen>
156
<output style="prompt">$ </output><input>curl -X PUT -H "Content-Type: text/csv" \
157
       -H "Accept: application/json" \
158
       https://www.example.net/api/cards/<var>slug</var>/import-csv<var>?async=on</var>
159
       --data-binary @fichier.csv</input>
160
<output>{
161
    "err": 0,
162
    "data": {
163
        "job": {
164
            "id": "1234",
165
            "url": "https://www.example.net/api/jobs/1234/"
166
        }
167
    }
168
}</output>
169
</screen>
170

  
171
<p>
172
Cet appel envoie le fichier CSV, mais il n’est pas aussitôt importé. Une tâche
173
(<em>job</em>) est lancée qui va effectivement faire l’import, et on peut en
174
suivre la progression en appellant son URL indiquée en retour de l’appel PUT.
175
</p>
176

  
177
<screen>
178
<output style="prompt">$ </output><input>curl -H "Accept: application/json" \
179
       https://www.example.net/api/jobs/1234/</input>
180
<output>{
181
    "err": 0,
182
    "data": {
183
        "status": "en cours",
184
        "label": "Importation des données dans des fiches",
185
        "creation_time": 1634910701,
186
        "completion_time": null,
187
        "completion_status": "23/46 (50%)"
188
}
189
}</output>
190
</screen>
191

  
192
<p>
193
Pour suivre la bonne exécution de l’import, il faut appeler cette URL jusqu’à
194
ce que la valeur <code>completion_time</code> soit renseignée. La valeur
195
<code>status</code> permet de savoir alors si l’import s'est correctement
196
déroulé.
197
</p>
198

  
199
</section>
200
</section>
201

  
113 202
<section id="card">
114
<title>Récupération des données d’une fiches</title>
203
<title>Récupération des données d’une fiche</title>
115 204

  
116 205
<p>
117 206
L’exemple suivant récupère les données d’une fiche « Parking », dont le modèle
118
-