Lire et modifier les données avec l'API

L'API met à disposition 5 actions :

  • Récupérer l'ensemble des fiches d'un type donné.
  • Récupérer une fiche donnée.
  • Récupérer un ensemble de fiches en fonction d'un filtre.
  • D'écrire une fiche.
  • D'effacer une fiche.

Le type de fiche sera annoté de manière générique object_type. La Liste des types de fiches donne la liste des valeurs possibles. Ainsi object_type pourra être remplacé par application, technical ou personal_account.

Lire l'ensemble des fiches

Un GET sur /api/v2/object_type permet de récupérer l'ensemble des fiches d'un type donné.

Par exemple, pour récupérer l'ensemble des applications, il faut faire un GET sur /api/v2/application/.

Le script suivant :

Code
#!/bin/bash

# remplacez la valeur exemple ci-dessous par celle de votre token
TOKEN='eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ0ZW5hbnRJZCI6ImRlZmF1bHQiLCJpc3MiOiJhdXRoMCIsImFjdGlvbiI6W10sImV4cCI6MzMyNzI3NjYwMzgsImxvZ2luIjoiYXBpIn0.wEwtFt7QkTbda7qajHiVW5rydAbKMWMOYfrju9pvS6w'

# remplacez la valeur exemple ci-dessous par celle de votre tenant
TENANT='default'

# remplacez la valeur exemple ci-dessous par celle de votre host
HOST='http://localhost:1080'


AUTHORIZATION_HEADER='Authorization: Bearer {"token":"'"$TOKEN"'","myTenant":{"id":"'"$TENANT"'"}}'
MIMETYPE="application/vnd.cartosi.card+json;version=0.3"

curl -s "${HOST}/api/v2/application" -H "$AUTHORIZATION_HEADER" -H "Accept: $MIMETYPE"

Le script suivant affiche le nom de l'ensemble des applications ainsi que leur ID :

Code
#! /usr/bin/env python3

# remplacez la valeur exemple ci-dessous par celle de votre token
TOKEN = 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ0ZW5hbnRJZCI6ImRlZmF1bHQiLCJpc3MiOiJhdXRoMCIsImFjdGlvbiI6W10sImV4cCI6MzMyNzI3NjYwMzgsImxvZ2luIjoiYXBpIn0.wEwtFt7QkTbda7qajHiVW5rydAbKMWMOYfrju9pvS6w'

# remplacez la valeur exemple ci-dessous par celle de votre tenant
TENANT = 'default'

# remplacez la valeur exemple ci-dessous par celle de votre host
HOST = 'http://localhost:1080'

#############################################################################
import requests
import sys

headers = {
    "Authorization": 'Bearer {"token":"%s","myTenant":{"id":"%s"}}' % (TOKEN, TENANT),
    "Accept": "application/vnd.cartosi.card+json;version=0.3"
}

# exécution de la requête HTTP
rep = requests.get(HOST + "/api/v2/application", headers=headers)

# en cas d'erreur ...
if rep.status_code != 200:
    print("Erreur %d : %s" % (rep.status_code, rep.text))
    sys.exit(1)

# on parcourt le résultat pour afficher le label de l'application
for appli in rep.json():
    print("- "+appli["label"]+" : "+appli["id"])

Son exécution affiche :

Code
- Logistics : 09f059a4-78e8-eda8-0fea-9dcc4d493282
- Application Banque de France : bccdaa31-a17e-6be7-0674-f3ff48b269ba
- Data lake : b69161f4-d0d5-0458-bde9-31e2ed7a2da1
- Gitlab : e7301d29-a28a-9cde-afcb-883abf749d98
- Gestion des Postes : 24b6e910-e662-a2f7-b250-cadadf2735b3
- Intranet Communication RH : 46c1e104-ab3b-27f0-a283-14045f5a6604
- Linkedin : e80a4451-d2c4-f52e-fe53-3b00c4769546
- LDAP : 17a76405-8615-2d81-d474-da58aff98ea4
- Application courier : 16a167f5-c3e8-c47d-a588-f9dbb5193cf8
- Interface de commande fournisseurs : 52271e43-c8ad-ba23-3646-e6622e198aac
- Module ERP - Gestion des Stocks : ae15602d-478e-aa9e-7d66-597c220b1850
- Module ERP - Gestion Salarié : e3c2bd44-816c-177e-f5ba-ab3f1826c96f
- Google Cloud : 6cc572e2-8013-a564-93b9-a305ca0654f8
- ERP : 4b65bd90-0294-0943-7ed5-fe6b8a19e73b

Lire une fiche

Un GET sur /api/v2/object_type/id permet de récupérer les données de la fiche d'ID id.

L'exemple précédent indique que l'application Gitlab a pour ID e7301d29-a28a-9cde-afcb-883abf749d98. Les données de l'application Gitlab se récupèrent en faisant un GET sur /api/v2/application/e7301d29-a28a-9cde-afcb-883abf749d98.

Voici ce que cela donne avec cURL :

Code
#!/bin/bash

# remplacez la valeur exemple ci-dessous par celle de votre token
TOKEN='eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ0ZW5hbnRJZCI6ImRlZmF1bHQiLCJpc3MiOiJhdXRoMCIsImFjdGlvbiI6W10sImV4cCI6MzMyNzI3NjYwMzgsImxvZ2luIjoiYXBpIn0.wEwtFt7QkTbda7qajHiVW5rydAbKMWMOYfrju9pvS6w'

# remplacez la valeur exemple ci-dessous par celle de votre tenant
TENANT='default'

# remplacez la valeur exemple ci-dessous par celle de votre host
HOST='http://localhost:1080'


AUTHORIZATION_HEADER='Authorization: Bearer {"token":"'"$TOKEN"'","myTenant":{"id":"'"$TENANT"'"}}'
MIMETYPE="application/vnd.cartosi.card+json;version=0.3"

curl -s "${HOST}/api/v2/application/e7301d29-a28a-9cde-afcb-883abf749d98" -H "$AUTHORIZATION_HEADER" -H "Accept: $MIMETYPE"

Le script suivant affiche l'ensemble des champs de l'application Gitlab :

Code
#! /usr/bin/env python3

# remplacez la valeur exemple ci-dessous par celle de votre token
TOKEN = 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ0ZW5hbnRJZCI6ImRlZmF1bHQiLCJpc3MiOiJhdXRoMCIsImFjdGlvbiI6W10sImV4cCI6MzMyNzI3NjYwMzgsImxvZ2luIjoiYXBpIn0.wEwtFt7QkTbda7qajHiVW5rydAbKMWMOYfrju9pvS6w'

# remplacez la valeur exemple ci-dessous par celle de votre tenant
TENANT = 'default'

# remplacez la valeur exemple ci-dessous par celle de votre host
HOST = 'http://localhost:1080'

#############################################################################
import requests
import sys

headers = {
    "Authorization": 'Bearer {"token":"%s","myTenant":{"id":"%s"}}' % (TOKEN, TENANT),
    "Accept": "application/vnd.cartosi.card+json;version=0.3"
}

# exécution de la requête HTTP
rep = requests.get(HOST + "/api/v2/application/e7301d29-a28a-9cde-afcb-883abf749d98", headers=headers)

# en cas d'erreur ...
if rep.status_code != 200:
    print("Erreur %d : %s" % (rep.status_code, rep.text))
    sys.exit(1)

# on parcourt le résultat pour afficher les données de l'application
for key, value in rep.json().items():
    print(key+": "+str(value))

Son exécution affiche :

Code
maj_date: 2019-10-11T14:00:25+00:00
it_departments: ['62851c3b-d3ef-623f-6b85-5ef70b694b21']
cartoVersion: 4.1.14
label: Gitlab
id: e7301d29-a28a-9cde-afcb-883abf749d98
meta_6db5f01e-7981-57b4-19fb-c2035631c299: ['SaaS']
teamleader: pierre@carto-si.com
start_date: 2021-05-01T15:54:00+00:00

Écrire une fiche

Carto-SI ne distingue pas la création et la mise à jour d'une fiche au niveau de l'API. Les deux se font avec un PUT sur /api/v2/object_type/id. Le format des données contenues dans le PUT est identique à celui qui est reçu lors d'un GET.

Voici un exemple qui pousse une application avec cURL :

Code
#!/bin/bash

# remplacez la valeur exemple ci-dessous par celle de votre token
TOKEN='eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ0ZW5hbnRJZCI6ImRlZmF1bHQiLCJpc3MiOiJhdXRoMCIsImFjdGlvbiI6W10sImV4cCI6MzMyNzI3NjYwMzgsImxvZ2luIjoiYXBpIn0.wEwtFt7QkTbda7qajHiVW5rydAbKMWMOYfrju9pvS6w'

# remplacez la valeur exemple ci-dessous par celle de votre tenant
TENANT='default'

# remplacez la valeur exemple ci-dessous par celle de votre host
HOST='http://localhost:1080'


AUTHORIZATION_HEADER='Authorization: Bearer {"token":"'"$TOKEN"'","myTenant":{"id":"'"$TENANT"'"}}'
MIMETYPE="application/vnd.cartosi.card+json;version=0.3"

curl -s -X PUT "${HOST}/api/v2/application/123-scanner" -H "$AUTHORIZATION_HEADER" -H "Accept: $MIMETYPE" -H "Content-Type: $MIMETYPE" --data '{"id": "123-scanner", "label": "scanner"}'

L'exemple suivant commence par créer une application nommée scanner, puis change son responsable :

Code
#! /usr/bin/env python3
import uuid

# remplacez la valeur exemple ci-dessous par celle de votre token
TOKEN = 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ0ZW5hbnRJZCI6ImRlZmF1bHQiLCJpc3MiOiJhdXRoMCIsImFjdGlvbiI6W10sImV4cCI6MzMyNzI3NjYwMzgsImxvZ2luIjoiYXBpIn0.wEwtFt7QkTbda7qajHiVW5rydAbKMWMOYfrju9pvS6w'

# remplacez la valeur exemple ci-dessous par celle de votre tenant
TENANT = 'default'

# remplacez la valeur exemple ci-dessous par celle de votre host
HOST = 'http://localhost:1080'

#############################################################################
import requests
import sys

# mimetype utilisé pour formater une application
mimetype = "application/vnd.cartosi.card+json;version=0.3"


# Récupération d'une application
def get(id):
    headers = {
        "Authorization": 'Bearer {"token":"%s","myTenant":{"id":"%s"}}' % (TOKEN, TENANT),
        "Accept": mimetype
    }

    rep = requests.get(HOST + "/api/v2/application/" + id, headers=headers)

    # en cas d'erreur ...
    if rep.status_code != 200:
        print("Erreur %d : %s" % (rep.status_code, rep.text))
        sys.exit(1)

    return rep.json()


# Enregistrement d'une application
def put(id, appli):
    # même chose que le GET avec le header Content-Type en plus
    headers = {
        "Authorization": 'Bearer {"token":"%s","myTenant":{"id":"%s"}}' % (TOKEN, TENANT),
        "Accept": mimetype,
        "Content-Type": mimetype
    }

    rep = requests.put(HOST + "/api/v2/application/" + id, json=appli, headers=headers)

    # en cas d'erreur ...
    if rep.status_code != 200:
        print("Erreur %d : %s" % (rep.status_code, rep.text))
        sys.exit(1)


# Génération d'un ID aléatoire dont la taille est suffisamment grande pour éviter les conflits
id = str(uuid.uuid4())

# Donnée de l'application
appli = {
    "id": id,
    "label": "scanner",
    "teamleader": "pierre@carto-si.com"
}

# création de l'application scanner
put(id, appli)

# affichage des données de l'application scanner
appli = get(id)
print(appli["label"] + ", " + appli["teamleader"])

# on change le teamleader de scanner
appli["teamleader"] = "mathias@carto-si.com"
put(id, appli)

# affichage des données de l'application scanner
appli = get(id)
print(appli["label"] + ", " + appli["teamleader"])

Le script affiche :

Code
scanner, pierre@carto-si.com
scanner, mathias@carto-si.com

Effacer une fiche

Pour effacer une application, il faut faire un DELETE sur /api/v2/object_type/id.

Voici un exemple avec cURL :

Code
#!/bin/bash

# remplacez la valeur exemple ci-dessous par celle de votre token
TOKEN='eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ0ZW5hbnRJZCI6ImRlZmF1bHQiLCJpc3MiOiJhdXRoMCIsImFjdGlvbiI6W10sImV4cCI6MzMyNzI3NjYwMzgsImxvZ2luIjoiYXBpIn0.wEwtFt7QkTbda7qajHiVW5rydAbKMWMOYfrju9pvS6w'

# remplacez la valeur exemple ci-dessous par celle de votre tenant
TENANT='default'

# remplacez la valeur exemple ci-dessous par celle de votre host
HOST='http://localhost:1080'


AUTHORIZATION_HEADER='Authorization: Bearer {"token":"'"$TOKEN"'","myTenant":{"id":"'"$TENANT"'"}}'

curl -s -X DELETE "${HOST}/api/v2/application/123-scanner" -H "$AUTHORIZATION_HEADER" -H "Accept: $MIMETYPE"

L'exemple suivant efface l'application scanner :

Code
#! /usr/bin/env python3
import uuid

# remplacez la valeur exemple ci-dessous par celle de votre token
TOKEN = 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ0ZW5hbnRJZCI6ImRlZmF1bHQiLCJpc3MiOiJhdXRoMCIsImFjdGlvbiI6W10sImV4cCI6MzMyNzI3NjYwMzgsImxvZ2luIjoiYXBpIn0.wEwtFt7QkTbda7qajHiVW5rydAbKMWMOYfrju9pvS6w'

# remplacez la valeur exemple ci-dessous par celle de votre tenant
TENANT = 'default'

# remplacez la valeur exemple ci-dessous par celle de votre host
HOST = 'http://localhost:1080'

#############################################################################
import requests
import sys

# mimetype utilisé pour formater une application
mimetype = "application/vnd.cartosi.card+json;version=0.3"


# Récupération de toutes les applications
def get_all():
    headers = {
        "Authorization": 'Bearer {"token":"%s","myTenant":{"id":"%s"}}' % (TOKEN, TENANT),
        "Accept": mimetype
    }

    rep = requests.get(HOST + "/api/v2/application/", headers=headers)

    # en cas d'erreur ...
    if rep.status_code != 200:
        print("Erreur %d : %s" % (rep.status_code, rep.text))
        sys.exit(1)

    return rep.json()


# Effacement d'une application
def delete(id):
    # même chose que le GET avec le header Content-Type en plus
    headers = {
        "Authorization": 'Bearer {"token":"%s","myTenant":{"id":"%s"}}' % (TOKEN, TENANT)
    }

    rep = requests.delete(HOST + "/api/v2/application/" + id, headers=headers)

    # en cas d'erreur ...
    if rep.status_code != 200:
        print("Erreur %d : %s" % (rep.status_code, rep.text))
        sys.exit(1)


# Efface l'application dont le label est 'scanner'
for appli in get_all():
    if appli["label"] == "scanner":
        delete(appli["id"])

Filtrer des fiches

Il existe un ensemble de filtres permettant de récupérer un sous-ensemble de fiches. Le format des filtres est défini dans Référence des opérations de filtrage et Exemples de Filtres.

Un filtre s'exécute avec un POST sur l'URL /api/v2/object_type/filter avec une entité au format JSON suivant :

Code(json)
{ "filter": ["all"] }

Voici un exemple avec une commande cURL :

Code
#!/bin/bash

# remplacez la valeur exemple ci-dessous par celle de votre token
TOKEN='eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ0ZW5hbnRJZCI6ImRlZmF1bHQiLCJpc3MiOiJhdXRoMCIsImFjdGlvbiI6W10sImV4cCI6MzMyNzI3NjYwMzgsImxvZ2luIjoiYXBpIn0.wEwtFt7QkTbda7qajHiVW5rydAbKMWMOYfrju9pvS6w'

# remplacez la valeur exemple ci-dessous par celle de votre tenant
TENANT='default'

# remplacez la valeur exemple ci-dessous par celle de votre host
HOST='http://localhost:1080'


AUTHORIZATION_HEADER='Authorization: Bearer {"token":"'"$TOKEN"'","myTenant":{"id":"'"$TENANT"'"}}'
MIMETYPE="application/vnd.cartosi.card+json;version=0.3;paginated=false"

FILTER='{"filter":["glob","label","Appli*"]}'

curl -s -X POST "${HOST}/api/v2/application/filter" -H "$AUTHORIZATION_HEADER" -H "Accept: $MIMETYPE" -H "Content-Type: application/json" --data "$FILTER"

Et la même chose en Python :

Code
#! /usr/bin/env python3
import uuid

# remplacez la valeur exemple ci-dessous par celle de votre token
TOKEN = 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ0ZW5hbnRJZCI6ImRlZmF1bHQiLCJpc3MiOiJhdXRoMCIsImFjdGlvbiI6W10sImV4cCI6MzMyNzI3NjYwMzgsImxvZ2luIjoiYXBpIn0.wEwtFt7QkTbda7qajHiVW5rydAbKMWMOYfrju9pvS6w'

# remplacez la valeur exemple ci-dessous par celle de votre tenant
TENANT = 'default'

# remplacez la valeur exemple ci-dessous par celle de votre host
HOST = 'http://localhost:1080'

#############################################################################
import requests
import sys

headers = {
    "Authorization": 'Bearer {"token":"%s","myTenant":{"id":"%s"}}' % (TOKEN, TENANT),
    "Accept": "application/vnd.cartosi.card+json;version=0.3;paginated=false",
    "Content-Type": "application/json"
}

filter = {
    "filter": ["glob", "label", "Appli*"]
}

rep = requests.post(HOST + "/api/v2/application/filter", json=filter, headers=headers)

# en cas d'erreur ...
if rep.status_code != 200:
    print("Erreur %d : %s" % (rep.status_code, rep.text))
    sys.exit(1)

# affichage des noms des applications trouvées

for appli in rep.json():
    print(appli["label"])
Last modified on