Credentials

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

Créez, consultez et supprimez les connexions que DQE One Standalone utilise pour accéder à vos données : Salesforce, Microsoft Dynamics 365, PostgreSQL, Snowflake, BigQuery et SFTP.

{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.
Documentation associée : DQE One Standalone API — Introduction, Files, Credentials, Processes, Runs & results, RuleSets.
Secrets : l'API ne renvoie jamais de mot de passe, de clé ni de token. getCredential n'expose que l'identifiant de connexion. La création d'un credential transmet des secrets sur le réseau : utilisez toujours HTTPS et évitez de coller de vrais secrets dans des outils partagés.
Créer un credential - DQE One Standalone API

Crée une connexion. Pour la plupart des types, DQE One teste d'abord la connexion : un credential qui ne peut pas se connecter n'est donc jamais enregistré.

createCredential

Requête

Envoyez un corps JSON. Les clés à fournir dépendent de type (tableau ci-dessous).

POSThttps://{DOMAIN}/api/Cred/create

Exemples de code

Créer un credential

curl -u "{EMAIL}:{API_TOKEN}" -X POST \ -H "Content-Type: application/json" \ -d '{ "type": "postgres", "endpoint": "db.acme.com", "port": 5432, "login": "dqe", "password": "s3cret", "database": "crm" }' \ "https://{DOMAIN}/api/Cred/create"
fetch("https://{DOMAIN}/api/Cred/create", { method: "POST", headers: { "Authorization": "Basic " + btoa("{EMAIL}:{API_TOKEN}"), "Content-Type": "application/json" }, body: JSON.stringify({ "type": "postgres", "endpoint": "db.acme.com", "port": 5432, "login": "dqe", "password": "s3cret", "database": "crm" }) }) .then(r => r.text()) .then(data => console.log(data));
import requests response = requests.post( "https://{DOMAIN}/api/Cred/create", auth=("{EMAIL}", "{API_TOKEN}"), json={"type": "postgres", "endpoint": "db.acme.com", "port": 5432, "login": "dqe", "password": "s3cret", "database": "crm"}, ) print(response.status_code, response.text)
<?php $ch = curl_init("https://{DOMAIN}/api/Cred/create"); curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST"); curl_setopt($ch, CURLOPT_USERPWD, "{EMAIL}:{API_TOKEN}"); $data = ['type' => 'postgres', 'endpoint' => 'db.acme.com', 'port' => 5432, 'login' => 'dqe', 'password' => 's3cret', 'database' => 'crm']; curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data)); curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']); 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: "post", url: "https://{DOMAIN}/api/Cred/create", auth: { username: "{EMAIL}", password: "{API_TOKEN}" }, data: { "type": "postgres", "endpoint": "db.acme.com", "port": 5432, "login": "dqe", "password": "s3cret", "database": "crm" } }) .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 body = "{\"type\":\"postgres\",\"endpoint\":\"db.acme.com\",\"port\":5432,\"login\":\"dqe\",\"password\":\"s3cret\",\"database\":\"crm\"}"; HttpRequest request = HttpRequest.newBuilder() .uri(URI.create("https://{DOMAIN}/api/Cred/create")) .header("Authorization", "Basic " + auth) .header("Content-Type", "application/json") .method("POST", HttpRequest.BodyPublishers.ofString(body)) .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/Cred/create"); request.Content = new StringContent("{\"type\":\"postgres\",\"endpoint\":\"db.acme.com\",\"port\":5432,\"login\":\"dqe\",\"password\":\"s3cret\",\"database\":\"crm\"}", Encoding.UTF8, "application/json"); var response = await client.SendAsync(request); Console.WriteLine((int)response.StatusCode + " " + await response.Content.ReadAsStringAsync());
package main import ( "bytes" "fmt" "io" "net/http" ) func main() { body := []byte(`{"type":"postgres","endpoint":"db.acme.com","port":5432,"login":"dqe","password":"s3cret","database":"crm"}`) req, _ := http.NewRequest("POST", "https://{DOMAIN}/api/Cred/create", bytes.NewBuffer(body)) req.SetBasicAuth("{EMAIL}", "{API_TOKEN}") req.Header.Set("Content-Type", "application/json") 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
type
Valeurs : salesforce
String Obligatoire
login Nom d'utilisateur Salesforce (flux JWT bearer). String Obligatoire
endpoint URL de l'instance, par ex. https://acme.my.salesforce.com. Un '/' final est supprimé. String Obligatoire
client_id Consumer key de la connected app. String Obligatoire
pvt Clé privée PEM correspondant au certificat de la connected app. String Obligatoire
Authentification : HTTP Basic — votre email DQE One et votre API token (My Account > API Token). Consultez l'article Introduction.

Clés requises, par type

type Clés requises Notes
salesforce login, endpoint, client_id, pvt Flux JWT bearer : endpoint est l'URL de l'instance (un / final est supprimé), pvt la clé privée PEM du certificat de la connected app.
dynamics client_id, client_secret, scope, tenant Nécessite une connexion OAuth via navigateur — répond pending (voir ci-dessous).
snowflake endpoint, client_id, client_secret Nécessite une connexion OAuth via navigateur — répond pending. Les processes sur Snowflake échouent actuellement à la validation.
postgres endpoint, port, login, password, database endpoint est le nom d'hôte.
sftp endpoint, port, login, password pvt optionnel = clé privée ; password est alors la passphrase de la clé. L'hôte doit figurer dans la liste AUTHORIZED_SFTP_HOSTS du serveur (correspondance exacte).
bigquery login, email, id, key_id, pvt Compte de service : login = client id, email = client email, id = id du projet, key_id et pvt = id de la clé privée et clé.

Dynamics et Snowflake : la réponse pending

Ces deux types nécessitent une connexion OAuth dans un navigateur. L'API conserve vos paramètres pendant 5 minutes et répond HTTP 201 avec {"status":"pending","url":"https://{DOMAIN}/login/?token=..."}. Une personne doit ouvrir cette URL et se connecter ; aucun appel d'API ne permet de terminer l'opération. Interrogez listCredentials régulièrement jusqu'à l'apparition du credential.

À propos de name

Une clé name est acceptée mais ignorée : le libellé est dérivé de la connexion — Salesforce “<org name> (<org id>)”, PostgreSQL et SFTP l'hôte, BigQuery l'id du projet.

Réponse

Créé (ou en attente d'OAuth). Statut HTTP 201.

Clé Description Type
status
Valeurs : success
String
id Integer

Exemple de réponse

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

Erreurs

HTTP Corps / signification
400 Keys endpoint,port need to be set for type postgres
401 Unauthorized
500 Failed to create credentials.

Un test de connexion échoué (mot de passe incorrect, hôte injoignable ou non autorisé, clé invalide) est toujours signalé par le même message générique Failed to create credentials. (HTTP 500). Vérifiez l'hôte, le port et les secrets et, pour SFTP, que l'hôte est autorisé sur le serveur.

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. La création d'un credential teste une vraie connexion à votre source de données.
Ouvrir la console
Lister les credentials - DQE One Standalone API

Liste l'id et le libellé de vos credentials.

listCredentials

Requête

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

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

Exemples de code

Lister vos credentials

curl -u "{EMAIL}:{API_TOKEN}" \ "https://{DOMAIN}/api/Cred/list"
fetch("https://{DOMAIN}/api/Cred/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/Cred/list", auth=("{EMAIL}", "{API_TOKEN}"), ) print(response.status_code, response.text)
<?php $ch = curl_init("https://{DOMAIN}/api/Cred/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/Cred/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/Cred/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/Cred/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/Cred/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 credentials. Statut HTTP 200.

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

Clé Description Type
id Integer
name Libellé dérivé de la connexion (voir l'article Credentials). String

Exemple de réponse

Exemple de réponse
[ { "id": 3, "name": "db.acme.com" } ]

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
Obtenir un credential - DQE One Standalone API

Renvoie les métadonnées d'un credential et indique s'il se connecte toujours.

getCredential

Requête

Envoyez une requête GET avec l'id du credential.

Test en direct à chaque appel : status est calculé en se connectant réellement à la source de données à chaque fois (valid si la connexion réussit, expired sinon), cet appel peut donc être lent. login est l'identifiant déchiffré ; pour les types qui n'ont pas de login, il s'agit du client_id.
GEThttps://{DOMAIN}/api/Cred/get?id={id}

Exemples de code

Obtenir un credential

curl -u "{EMAIL}:{API_TOKEN}" \ "https://{DOMAIN}/api/Cred/get?id=3"
fetch("https://{DOMAIN}/api/Cred/get?id=3", { 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/Cred/get", auth=("{EMAIL}", "{API_TOKEN}"), params={"id": "3"}, ) print(response.status_code, response.text)
<?php $ch = curl_init("https://{DOMAIN}/api/Cred/get?id=3"); 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/Cred/get", auth: { username: "{EMAIL}", password: "{API_TOKEN}" }, params: { "id": "3" } }) .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/Cred/get?id=3")) .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/Cred/get?id=3"); 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/Cred/get?id=3", 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 credential. Integer Obligatoire
Authentification : HTTP Basic — votre email DQE One et votre API token (My Account > API Token). Consultez l'article Introduction.

Réponse

Credential. Statut HTTP 200.

Clé Description Type
id Integer
login Login déchiffré (client_id pour les types qui n'ont pas de login). Les mots de passe, clés et tokens ne sont jamais renvoyés. String
name String
type
Valeurs : salesforce, dynamics, snowflake, postgres, sftp, bigquery
String
status Résultat d'un test de connexion en direct (LIVE) exécuté à chaque appel.
Valeurs : valid, expired
String
process Ids des processes qui utilisent ce credential. Array

Exemple de réponse

Exemple de réponse
{ "id": 3, "login": "dqe", "name": "db.acme.com", "type": "postgres", "status": "valid", "process": [ 42 ] }

Erreurs

HTTP Corps / signification
400 No id found.
401 Unauthorized
404 Credential not found

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 credential - DQE One Standalone API

Supprime un credential. Refusé avec 423 tant qu'un process l'utilise.

deleteCredential

Requête

Envoyez une requête DELETE avec l'id du credential. Un id non numérique produit une erreur HTTP 500 non formatée.

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

Exemples de code

Supprimer un credential

curl -u "{EMAIL}:{API_TOKEN}" -X DELETE \ "https://{DOMAIN}/api/Cred/delete?id=3"
fetch("https://{DOMAIN}/api/Cred/delete?id=3", { 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/Cred/delete", auth=("{EMAIL}", "{API_TOKEN}"), params={"id": "3"}, ) print(response.status_code, response.text)
<?php $ch = curl_init("https://{DOMAIN}/api/Cred/delete?id=3"); 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/Cred/delete", auth: { username: "{EMAIL}", password: "{API_TOKEN}" }, params: { "id": "3" } }) .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/Cred/delete?id=3")) .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/Cred/delete?id=3"); 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/Cred/delete?id=3", 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 credential. 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 No id found.
401 Unauthorized
404 Credential not found
423 Credential is used in one or more processes and cannot be deleted
500 Failed to delete the Credential

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 credential.
Ouvrir la console

Voir aussi

Associé à

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

Utilisateurs qui ont trouvé cela utile : 0 sur 0