21 |
21 |
</p>
|
22 |
22 |
|
23 |
23 |
<section id="create">
|
24 |
|
<title>Création d'une fiche</title>
|
|
24 |
<title>Création d’une 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 d’une 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 d’ouverture
|
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 |
|
-
|