Utiliser l'API

Vue d'ensemble

Tous les composants qui utilisent l'architecture complète DMS-SDWAN reçoivent automatiquement des capacités d'API, pour ce tutoriel simple, nous utilisons le module du firmware mais d'autres fonctionneront de la même manière. L'accès à l'API fait partie du système d'authentification des utilisateurs locaux, mais utilise des paires clé / secret pour séparer les informations de compte de la communication de machine à machine. Les secrets ne sont pas stockés dans le DMS-SDWAN et ne peuvent être téléchargés qu'une seule fois, en cas de perte, une nouvelle clé doit être créée pour votre application.

Un utilisateur peut avoir plusieurs clés, notre conseil est de créer une clé unique pour chaque application utilisée.

Générer des clés

Les clés API sont gérées dans la gestion des utilisateurs (system_usermanager.php), accédez à la page du gestionnaire d'utilisateurs et sélectionnez un utilisateur. Quelque part en dessous de votre page, vous trouverez la section API pour cet utilisateur.

Usermanager ajouter api key.png

Cliquez sur le symbole + pour ajouter une nouvelle clé. Lorsque la clé est générée, vous recevrez un (téléchargement unique) avec les informations d'identification dans un fichier texte (formaté ini). Le contenu de ce fichier ressemble à ceci:

key=w86XNZob/8Oq8aC5r0kbNarNtdpoQU781fyoeaOBQsBwkXUt
secret=XeD26XVrJ5ilAc/EmglCRC+0j2e57tRsjHwFepOseySWLM53pJASeTA3

Exemple de code (python)

Pour l'exemple de code python, nous utilisons la jolie bibliothèque "requests" ( http://docs.python-requests.org/en/latest/ ), ce qui rend les appels HTTP très faciles.

Avant de commencer, assurez-vous que votre DMS-SDWAN dispose d'un certificat SSL valide (ou choisissez de l'ignorer à des fins de test en définissant verify=False), n'oubliez pas de vérifiez que l'utilisateur sélectionné peut accéder à la page du micrologiciel.

L'interface Web utilise la même logique qui sera disponible pour l'API dans cet exemple, nous collecterons des informations d'état à partir du module du firmware et l'imprimerons pour l'utilisateur.

Tout commence par la création de la demande et l'attente de la réponse, toutes les interactions de données utilisent le format json, tant pour les réponses que pour les données de la demande (lors de l'envoi de données POST).

La première étape de l'exemple consiste à importer les bibliothèques requises, puis spécifier l'URL du point de terminaison et les informations d'identification à utiliser et enfin à lancer la requête (get type). Une fois que nous obtenons la réponse, nous analysons le retour json dans un dictionnaire et imprimez des données en fonction de la réponse.

# import libraries
import json
import requests

# define endpoint and credentials
api_key = 'w86XNZob/8Oq8aC5hxh2he+vLN00r0kbNarNtdpoQU781fyoeaOBQsBwkXUt'
api_secret = 'puOyw0Ega3xZXeD26XVrJ5WYFepOseySWLM53pJASeTA3'
url = 'https://192.168.1.1/api/core/firmware/status'

# request data
r = requests.get(url,
                 verify='DMS-SDWAN.pem',
                 auth=(api_key, api_secret))

if r.status_code == 200:
    response = json.loads(r.text)

    if response['status'] == 'ok':
        print ('DMS-SDWAN can be upgraded')
        print ('download size : %s' % response['download_size'])
        print ('number of packages : %s' % response['updates'])
        if response['upgrade_needs_reboot'] == '1':
            print ('REBOOT REQUIRED')
    elif 'status_msg' in response:
        print (response['status_msg'])
else:
    print ('Connection / Authentication issue, response received:')
    print r.text

Utiliser Curl

Un test simple avec curl est également possible, l'exemple ci-dessous utilise les mêmes informations d'identification, mais ignore la vérification du certificat SSL (-k) pour le test.

curl -k -u "w86XNZob/8Oq8aC5hxh2he+vLN00r0kbNarNtdpoQU781fyoeaOBQsBwkXUt":"puOyw0Ega3xZXeD26XVrJ5WYFepOseySWLM53pJASeTA3" https://192.168.1.1/api/core/firmware/status

Et planifiez la mise à jour réelle de tous les packages en utilisant:

curl -XPOST -k -u "w86XNZob/8Oq8aC5hxh2he+vLN00r0kbNarNtdpoQU781fyoeaOBQsBwkXUt":"puOyw0Ega3xZXeD26XVrJ5WYFepOseySWLM53pJASeTA3" https://10.211.55.100/api/core/firmware/update