====== GLPI - Utiliser l'API REST de GLPI avec cURL et Python ======
===== Présentation de l'activité =====
Vous avez **expérimenté** une première utilisation de l'**Gras**API REST de GLPI avec l'outil **Postman**. Cet outil est très pratique pour **tester** et **déterminer les bons paramètres** à définir dans vos requêtes d'API REST qui **utilisent les protocoles HTTTP ou HTTPS**.
Pour rappel il faut s'appuyer sur la **documentation** de l'API pour :
* **connaître** le **point d'entrée** (Endpoint) de l'API c'est à dire **l'URL** à utiliser ;
* connaître les **types de requête** proposés : **GET**, **POST** mais aussi **DELETE**, **PUT** et **PATCH** ;
* **interpréter** correctement les **codes retour** de réponse de l'API : **2xx** (succès), **3xx** (redirection) **4xx** (erreur côté client), **5xx** (erreur côté serveur) ;
* savoir **utiliser** les **clés d'API** pour **s'authentifier** et obtenir un **jeton de session** (session_token) ;
* **fournir** les **paramètres** nécessaire soit dans **l'URL** (**Query string**) ou dans **l'entête** (**Header**) ;
* gérer le **format des données** obtenues qui sont le plus souvent au format **JSON**.
Dans cette activité, vous allez **réutiliser** ce que vous avez expérimenté avec **Postman** pour exécuter des requêtes avec l'utilitaire **cURL** et le langage de programmation **Python**.
===== Préparer votre environnement Python =====
Vous allez utiliser la bibliothèque **requests** de Python. Si nécesaier mettez à jour vote environnement python :
* mettre à jour pip
* installer le module requests
C:> python -m pip install --upgrade pip
C:> pip install request
===== Obtenir un jeton de session (Session-Token) =====
Pour obtenir un jeton de session, il faut effectuer une requête **Init session** en renseignant des paramètres dans l'entête (**Headers**) :
* le jeton d'application (**App-Token**) qui a été créé pour vous permettre d'utiliser l'API de GLPI. Demandez à l'enseignant de vous communiquer cet **App-Token**.
* une authentification soit par un couple de login /mot de passe soit en utilisant un jeton d'utilisateur (//user_token//). C'est cette deuxième méthode que vous allez utiliser.
==== Exécution de la requête avec cURL ====
C:> curl -X GET -H "Authorization: user_token uuu..." -H "App-Token: aaa..." "http://path/to/glpi/apirest.php/initSession"
{
"session_token":"sss..."
}
==== Exécution de la requête en Python ====
* script Python **session_token.py** permettant d'obtenir un jeton de session
import json
import requests
url = "http://path/to/glpi/apirest.php/initSession"
headers = {
"Authorization": "user_token uuu...",
"App-Token": "aaa..."
}
reponse = requests.get(url, headers = headers)
if reponse.status_code == 200:
print('success: ' + str(reponse.status_code))
json_data = reponse.json()
print(json_data)
else:
print('error: ' + str(reponse.status_code))
==== Exécution de la requête en Powershell ====
* script Powershell **session_token.ps1** permettant d'obtenir un jeton de session
$apptoken = "aaa..."
$usertoken = "uuu..."
$headers = @{
"Authorization" = "user_token " + $usertoken
"App-Token" = $apptoken
}
$baseURL = 'http://path/to/glpi/apirest.php'
$url = $baseURL + "/initSession"
$req = Invoke-RestMethod -Uri $url -Headers $headers
# conversion JSON => texte
$resultat = write-host $req | ConvertFrom-Json
write-host $resultat
===== Requête pour obtenir la liste des entités accessibles à un utilisateur =====
Pour la liste des entités vous devez exécuter la requête **getMyEntities** en renseignant des paramètres dans l'entête (**Headers**) :
* le jeton de session **Session-Token** que vous venez d'obtenir ;
* le jeton d'application **App-Token**.
==== Exécution de la requête avec cURL ====
C:\>curl -X GET -H "App-Token: aaa..." -H "Session-Token: sss..." "http://192.168.1.70/glpi/apirest.php/getMyEntities?is_recursive=true"
{ "myentities":[{"id":1,"name":"Entité racine > Bâtiment 1"},
{ "id":2,"name":"Entité racine > Bâtiment 1 > Etage 0"},
{"id":0,"name":"Entité racine"}
]}
==== Exécution de la requête en Python ====
* script Python **getmyentities.py** permettant d'obtenir la liste des entités (de manière récursive)
import json
import requests
url = "http://path/to/glpi/apirest.php/getMyEntities?is_recursive=true"
headers = {
"App-Token": "aaa...",
"Session-Token": "sss...",
}
reponse = requests.get(url, headers = headers)
if reponse.status_code == 200:
print('success: ' + str(reponse.status_code))
json_data = reponse.json()
print(json_data)
else:
print('error: ' + str(reponse.status_code))
==== Exécution de la requête en Powershell ====
* script Powershell **getmyentities.ps1** permettant d'obtenir la liste des entités (de manière récursive)
$apptoken = "aaa..."
$sessiontoken = "sss..."
$headers = @{
"Session-Token" = $sessiontoken
"App-Token" = $apptoken
}
$baseURL = 'http://path/to/glpi/apirest.php'
$url = $baseURL + "/getMyEntities"
$req = Invoke-RestMethod -Uri $url -Headers $headers
# conversion JSON => texte
$resultat = write-host $req | ConvertFrom-Json
write-host $resultat
==== Travail à faire ====
**Travail à faire :**
Créer le script python **itemcomputer.py** permettant d'afficher les informations sur votre ordinateur renseignées dans GLPI.
Fonctionnement du script python :
* vous aurez à renseigner en début de script ou en ligne de commande ;
* l'**ID** de votre ordinateur ;
* le type d'élément (**itemtype**) : **Computer**
* le jeton d'application communiqué par l'enseignant : **App-Token** ;
* il est nécessaire de faire un première requête afin d'obtenir le jeton de session (requête **initSession**);
* une deuxième requête doit afficher ensuite les informations sur votre ordinateur pour l'**ID indiqué** (requête **getItem**)
==== Retour Activité A8 ====
* [[glpi_gestionconfig_00|A8 - La gestion des configurations avec GLPI]]