Fichiers

Support DQE
Support DQE
  • Mise à jour
Fichiers - DQE One Standalone API

Téléversez des fichiers CSV ou Excel à utiliser comme source de données csv, listez-les, supprimez-les et téléchargez le résultat d'un process.

{DOMAIN} est le nom d'hôte de votre propre serveur DQE One Standalone — il est auto-hébergé, cette valeur dépend donc de votre déploiement. {EMAIL} est votre identifiant de connexion DQE One et {API_TOKEN} le token généré dans My Account > API Token.
Bon à savoir : lorsque vous créez un process csv, le fichier est cloné et le clone est lié au process. Votre fichier téléversé d'origine reste libre (vous pouvez le supprimer) ; le clone apparaît dans listFiles avec son process_id et ne peut pas être supprimé tant que le process existe.
Téléverser un fichier - DQE One Standalone API

Téléverse un fichier CSV ou Excel. L'id renvoyé est ce que vous passez comme file lors de la création d'un process csv.

addFile

Requête

Envoyez un POST multipart/form-data avec un seul champ nommé file.

Règles : uniquement .csv, .xlsx et .xls (la vérification de l'extension est sensible à la casse, DATA.CSV est donc refusé). Les fichiers Excel sont convertis en CSV (première feuille uniquement) mais conservent leur nom Excel. Les en-têtes de colonnes doivent être uniques et ne pas contenir d'espaces. Le délimiteur et le caractère de guillemet sont détectés automatiquement. L'API n'impose aucune limite de taille : le fichier entier est lu en mémoire, gardez donc des téléversements raisonnables.
POSThttps://{DOMAIN}/api/File/add

Exemples de code

Téléverser un fichier

curl -u "{EMAIL}:{API_TOKEN}" -X POST \ -F "file=@contacts.csv" \ "https://{DOMAIN}/api/File/add"
const form = new FormData(); form.append("file", fileInput.files[0]); // <input type="file"> fetch("https://{DOMAIN}/api/File/add", { method: "POST", headers: { "Authorization": "Basic " + btoa("{EMAIL}:{API_TOKEN}") }, body: form }) .then(r => r.text()) .then(data => console.log(data));
import requests response = requests.post( "https://{DOMAIN}/api/File/add", auth=("{EMAIL}", "{API_TOKEN}"), files={"file": open("contacts.csv", "rb")}, ) print(response.status_code, response.text)
<?php $ch = curl_init("https://{DOMAIN}/api/File/add"); curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST"); curl_setopt($ch, CURLOPT_USERPWD, "{EMAIL}:{API_TOKEN}"); curl_setopt($ch, CURLOPT_POSTFIELDS, ['file' => new CURLFile("contacts.csv")]); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $response = curl_exec($ch); $status = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch); echo $status . " " . $response;
const axios = require('axios'); const FormData = require('form-data'); const fs = require('fs'); const form = new FormData(); form.append('file', fs.createReadStream("contacts.csv")); axios({ method: "post", url: "https://{DOMAIN}/api/File/add", auth: { username: "{EMAIL}", password: "{API_TOKEN}" }, headers: form.getHeaders(), data: form }) .then(res => console.log(res.status, res.data)) .catch(err => console.log(err.response ? err.response.status : err.message, err.response && err.response.data));
import java.net.URI; import java.net.http.*; import java.util.Base64; String auth = Base64.getEncoder().encodeToString("{EMAIL}:{API_TOKEN}".getBytes()); String boundary = "----dqe" + System.nanoTime(); byte[] content = java.nio.file.Files.readAllBytes(java.nio.file.Path.of("contacts.csv")); var out = new java.io.ByteArrayOutputStream(); out.write(("--" + boundary + "\r\nContent-Disposition: form-data; name=\"file\"; filename=\"" + "contacts.csv" + "\"\r\n\r\n").getBytes()); out.write(content); out.write(("\r\n--" + boundary + "--\r\n").getBytes()); HttpRequest request = HttpRequest.newBuilder() .uri(URI.create("https://{DOMAIN}/api/File/add")) .header("Authorization", "Basic " + auth) .header("Content-Type", "multipart/form-data; boundary=" + boundary) .method("POST", HttpRequest.BodyPublishers.ofByteArray(out.toByteArray())) .build(); HttpResponse<String> response = HttpClient.newHttpClient().send(request, HttpResponse.BodyHandlers.ofString()); System.out.println(response.statusCode() + " " + response.body());
using System.Net.Http; using System.Net.Http.Headers; using System.Text; using var client = new HttpClient(); client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue( "Basic", Convert.ToBase64String(Encoding.UTF8.GetBytes("{EMAIL}:{API_TOKEN}"))); using var request = new HttpRequestMessage(HttpMethod.Post, "https://{DOMAIN}/api/File/add"); var form = new MultipartFormDataContent(); form.Add(new ByteArrayContent(File.ReadAllBytes("contacts.csv")), "file", "contacts.csv"); request.Content = form; var response = await client.SendAsync(request); Console.WriteLine((int)response.StatusCode + " " + await response.Content.ReadAsStringAsync());
package main import ( "bytes" "fmt" "io" "mime/multipart" "net/http" "os" ) func main() { var buf bytes.Buffer w := multipart.NewWriter(&buf) part, _ := w.CreateFormFile("file", "contacts.csv") f, _ := os.Open("contacts.csv") io.Copy(part, f) w.Close() req, _ := http.NewRequest("POST", "https://{DOMAIN}/api/File/add", &buf) req.SetBasicAuth("{EMAIL}", "{API_TOKEN}") req.Header.Set("Content-Type", w.FormDataContentType()) resp, err := http.DefaultClient.Do(req) if err != nil { panic(err) } defer resp.Body.Close() out, _ := io.ReadAll(resp.Body) fmt.Println(resp.StatusCode, string(out)) }

Paramètres

Champ Description Type Obl / Opt
file .csv, .xlsx ou .xls. String (file) Obligatoire
Authentification : HTTP Basic — votre email DQE One et votre API token (My Account > API Token). Consultez l'article Introduction.

Réponse

Fichier enregistré. Statut HTTP 201.

Clé Description Type
status
Valeurs : success
String
id Integer

Exemple de réponse

Exemple de réponse
{ "status": "success", "id": 12 }

Erreurs

HTTP Corps / signification
400 API only accept .csv, .xlsx or .xls file.
401 Unauthorized
500 Failed to save file: No space in header fields name allowed.

Tester l'API

Cliquez sur le bouton ci-dessous pour tester cet endpoint en direct dans votre navigateur.

À savoir : cette console envoie une vraie requête à votre propre serveur depuis votre navigateur, avec votre véritable API token. Cela téléverse un vrai fichier sur votre serveur.
Ouvrir la console
Lister les fichiers - DQE One Standalone API

Liste les fichiers que vous avez téléversés, du plus récent au plus ancien, y compris les clones liés aux processes.

listFiles

Requête

Envoyez une requête GET. Il n'y a aucun paramètre.

GEThttps://{DOMAIN}/api/File/list

Exemples de code

Lister vos fichiers

curl -u "{EMAIL}:{API_TOKEN}" \ "https://{DOMAIN}/api/File/list"
fetch("https://{DOMAIN}/api/File/list", { method: "GET", headers: { "Authorization": "Basic " + btoa("{EMAIL}:{API_TOKEN}") } }) .then(r => r.text()) .then(data => console.log(data));
import requests response = requests.get( "https://{DOMAIN}/api/File/list", auth=("{EMAIL}", "{API_TOKEN}"), ) print(response.status_code, response.text)
<?php $ch = curl_init("https://{DOMAIN}/api/File/list"); curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "GET"); curl_setopt($ch, CURLOPT_USERPWD, "{EMAIL}:{API_TOKEN}"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $response = curl_exec($ch); $status = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch); echo $status . " " . $response;
const axios = require('axios'); axios({ method: "get", url: "https://{DOMAIN}/api/File/list", auth: { username: "{EMAIL}", password: "{API_TOKEN}" } }) .then(res => console.log(res.status, res.data)) .catch(err => console.log(err.response ? err.response.status : err.message, err.response && err.response.data));
import java.net.URI; import java.net.http.*; import java.util.Base64; String auth = Base64.getEncoder().encodeToString("{EMAIL}:{API_TOKEN}".getBytes()); HttpRequest request = HttpRequest.newBuilder() .uri(URI.create("https://{DOMAIN}/api/File/list")) .header("Authorization", "Basic " + auth) .method("GET", HttpRequest.BodyPublishers.noBody()) .build(); HttpResponse<String> response = HttpClient.newHttpClient().send(request, HttpResponse.BodyHandlers.ofString()); System.out.println(response.statusCode() + " " + response.body());
using System.Net.Http; using System.Net.Http.Headers; using System.Text; using var client = new HttpClient(); client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue( "Basic", Convert.ToBase64String(Encoding.UTF8.GetBytes("{EMAIL}:{API_TOKEN}"))); using var request = new HttpRequestMessage(HttpMethod.Get, "https://{DOMAIN}/api/File/list"); var response = await client.SendAsync(request); Console.WriteLine((int)response.StatusCode + " " + await response.Content.ReadAsStringAsync());
package main import ( "fmt" "io" "net/http" ) func main() { req, _ := http.NewRequest("GET", "https://{DOMAIN}/api/File/list", nil) req.SetBasicAuth("{EMAIL}", "{API_TOKEN}") resp, err := http.DefaultClient.Do(req) if err != nil { panic(err) } defer resp.Body.Close() out, _ := io.ReadAll(resp.Body) fmt.Println(resp.StatusCode, string(out)) }

Paramètres

Cet endpoint ne prend aucun paramètre.

Authentification : HTTP Basic — votre email DQE One et votre API token (My Account > API Token). Consultez l'article Introduction.

Réponse

Tableau de fichiers. Statut HTTP 200.

Le corps est un tableau JSON ; chaque élément contient ces clés.

Clé Description Type
id Integer
name String
headers Noms des colonnes. Array
rows Nombre de lignes. Integer
process_id Process auquel le fichier est lié, ou null s'il s'agit d'un téléversement libre. Integer

Exemple de réponse

Exemple de réponse
[ { "id": 12, "name": "contacts.csv", "headers": [ "Id", "Email" ], "rows": 1500, "process_id": null } ]

Erreurs

HTTP Corps / signification
401 Unauthorized

Tester l'API

Cliquez sur le bouton ci-dessous pour tester cet endpoint en direct dans votre navigateur.

À savoir : cette console envoie une vraie requête à votre propre serveur depuis votre navigateur, avec votre véritable API token.
Ouvrir la console
Télécharger le résultat d'un process - DQE One Standalone API

Télécharge le résultat du dernier run d'un process sous forme de pièce jointe CSV.

getProcessResult

Requête

Envoyez une requête GET avec le processId. La réponse est un fichier, pas du JSON.

Ce que vous obtenez : la clé primaire plus les champs que le process synchronise — pas le fichier de sortie complet. Toutes les valeurs sont entre guillemets, en UTF-8, avec le délimiteur d'origine. Le nom de fichier suggéré se termine par .csv.csv (une particularité connue ; renommez-le librement). Si le process n'a jamais été exécuté, ou si son dernier run n'a pas encore de fichier de sortie (toujours en cours ou en échec), le serveur répond par une erreur HTTP 500 non formatée plutôt que par une erreur JSON. Vérifiez d'abord le statut du run (Runs & results).
GEThttps://{DOMAIN}/api/File/get?processId={processId}

Exemples de code

Télécharger le résultat d'un process

curl -u "{EMAIL}:{API_TOKEN}" \ "https://{DOMAIN}/api/File/get?processId=42"
fetch("https://{DOMAIN}/api/File/get?processId=42", { method: "GET", headers: { "Authorization": "Basic " + btoa("{EMAIL}:{API_TOKEN}") } }) .then(r => r.text()) .then(data => console.log(data));
import requests response = requests.get( "https://{DOMAIN}/api/File/get", auth=("{EMAIL}", "{API_TOKEN}"), params={"processId": "42"}, ) print(response.status_code, response.text)
<?php $ch = curl_init("https://{DOMAIN}/api/File/get?processId=42"); curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "GET"); curl_setopt($ch, CURLOPT_USERPWD, "{EMAIL}:{API_TOKEN}"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $response = curl_exec($ch); $status = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch); echo $status . " " . $response;
const axios = require('axios'); axios({ method: "get", url: "https://{DOMAIN}/api/File/get", auth: { username: "{EMAIL}", password: "{API_TOKEN}" }, params: { "processId": "42" } }) .then(res => console.log(res.status, res.data)) .catch(err => console.log(err.response ? err.response.status : err.message, err.response && err.response.data));
import java.net.URI; import java.net.http.*; import java.util.Base64; String auth = Base64.getEncoder().encodeToString("{EMAIL}:{API_TOKEN}".getBytes()); HttpRequest request = HttpRequest.newBuilder() .uri(URI.create("https://{DOMAIN}/api/File/get?processId=42")) .header("Authorization", "Basic " + auth) .method("GET", HttpRequest.BodyPublishers.noBody()) .build(); HttpResponse<String> response = HttpClient.newHttpClient().send(request, HttpResponse.BodyHandlers.ofString()); System.out.println(response.statusCode() + " " + response.body());
using System.Net.Http; using System.Net.Http.Headers; using System.Text; using var client = new HttpClient(); client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue( "Basic", Convert.ToBase64String(Encoding.UTF8.GetBytes("{EMAIL}:{API_TOKEN}"))); using var request = new HttpRequestMessage(HttpMethod.Get, "https://{DOMAIN}/api/File/get?processId=42"); var response = await client.SendAsync(request); Console.WriteLine((int)response.StatusCode + " " + await response.Content.ReadAsStringAsync());
package main import ( "fmt" "io" "net/http" ) func main() { req, _ := http.NewRequest("GET", "https://{DOMAIN}/api/File/get?processId=42", nil) req.SetBasicAuth("{EMAIL}", "{API_TOKEN}") resp, err := http.DefaultClient.Do(req) if err != nil { panic(err) } defer resp.Body.Close() out, _ := io.ReadAll(resp.Body) fmt.Println(resp.StatusCode, string(out)) }

Paramètres

Champ Description Type Obl / Opt
processId Id du process. Integer Obligatoire
Authentification : HTTP Basic — votre email DQE One et votre API token (My Account > API Token). Consultez l'article Introduction.

Réponse

Pièce jointe CSV (toutes les valeurs entre guillemets, UTF-8).. Statut HTTP 200.

Réponse binaire/pièce jointe (application/octet-stream).

Exemple de réponse

La réponse est une pièce jointe, pas du JSON.

Erreurs

HTTP Corps / signification
400 Process ID is required
401 Unauthorized
404 File not found for the given process.
500 Failed to extract fields from file.

Tester l'API

Cliquez sur le bouton ci-dessous pour tester cet endpoint en direct dans votre navigateur.

À savoir : cette console envoie une vraie requête à votre propre serveur depuis votre navigateur, avec votre véritable API token.
Ouvrir la console
Supprimer un fichier - DQE One Standalone API

Supprime définitivement un fichier et son contenu. Refusé avec 423 tant que le fichier est lié à un process.

deleteFile

Requête

Envoyez une requête DELETE avec l'id du fichier. Un id non numérique produit une erreur HTTP 500 non formatée, validez-le donc de votre côté.

DELETEhttps://{DOMAIN}/api/File/delete?id={id}

Exemples de code

Supprimer un fichier

curl -u "{EMAIL}:{API_TOKEN}" -X DELETE \ "https://{DOMAIN}/api/File/delete?id=12"
fetch("https://{DOMAIN}/api/File/delete?id=12", { method: "DELETE", headers: { "Authorization": "Basic " + btoa("{EMAIL}:{API_TOKEN}") } }) .then(r => r.text()) .then(data => console.log(data));
import requests response = requests.delete( "https://{DOMAIN}/api/File/delete", auth=("{EMAIL}", "{API_TOKEN}"), params={"id": "12"}, ) print(response.status_code, response.text)
<?php $ch = curl_init("https://{DOMAIN}/api/File/delete?id=12"); curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "DELETE"); curl_setopt($ch, CURLOPT_USERPWD, "{EMAIL}:{API_TOKEN}"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $response = curl_exec($ch); $status = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch); echo $status . " " . $response;
const axios = require('axios'); axios({ method: "delete", url: "https://{DOMAIN}/api/File/delete", auth: { username: "{EMAIL}", password: "{API_TOKEN}" }, params: { "id": "12" } }) .then(res => console.log(res.status, res.data)) .catch(err => console.log(err.response ? err.response.status : err.message, err.response && err.response.data));
import java.net.URI; import java.net.http.*; import java.util.Base64; String auth = Base64.getEncoder().encodeToString("{EMAIL}:{API_TOKEN}".getBytes()); HttpRequest request = HttpRequest.newBuilder() .uri(URI.create("https://{DOMAIN}/api/File/delete?id=12")) .header("Authorization", "Basic " + auth) .method("DELETE", HttpRequest.BodyPublishers.noBody()) .build(); HttpResponse<String> response = HttpClient.newHttpClient().send(request, HttpResponse.BodyHandlers.ofString()); System.out.println(response.statusCode() + " " + response.body());
using System.Net.Http; using System.Net.Http.Headers; using System.Text; using var client = new HttpClient(); client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue( "Basic", Convert.ToBase64String(Encoding.UTF8.GetBytes("{EMAIL}:{API_TOKEN}"))); using var request = new HttpRequestMessage(HttpMethod.Delete, "https://{DOMAIN}/api/File/delete?id=12"); var response = await client.SendAsync(request); Console.WriteLine((int)response.StatusCode + " " + await response.Content.ReadAsStringAsync());
package main import ( "fmt" "io" "net/http" ) func main() { req, _ := http.NewRequest("DELETE", "https://{DOMAIN}/api/File/delete?id=12", nil) req.SetBasicAuth("{EMAIL}", "{API_TOKEN}") resp, err := http.DefaultClient.Do(req) if err != nil { panic(err) } defer resp.Body.Close() out, _ := io.ReadAll(resp.Body) fmt.Println(resp.StatusCode, string(out)) }

Paramètres

Champ Description Type Obl / Opt
id Id du fichier. Integer Obligatoire
Authentification : HTTP Basic — votre email DQE One et votre API token (My Account > API Token). Consultez l'article Introduction.

Réponse

Supprimé. Statut HTTP 200.

Clé Description Type
status
Valeurs : success
String

Exemple de réponse

Exemple de réponse
{ "status": "success" }

Erreurs

HTTP Corps / signification
400 File ID is required
401 Unauthorized
404 File not found
423 File is associated with a process and cannot be deleted

Tester l'API

Cliquez sur le bouton ci-dessous pour tester cet endpoint en direct dans votre navigateur.

À savoir : cette console envoie une vraie requête à votre propre serveur depuis votre navigateur, avec votre véritable API token. Cela supprime définitivement le fichier.
Ouvrir la console

Voir aussi

Associé à

Cet article vous a-t-il été utile ?

Utilisateurs qui ont trouvé cela utile : 0 sur 0