Forum Français

Expand all | Collapse all

REST API & Python

This thread has been viewed 25 times
  • 1.  REST API & Python

    Posted Apr 06, 2017 07:04 PM

     

    «Programmabilité», «Python», «RESTfull»,  «API», sont des termes qui reviennent souvent.   

    Aruba a fait des API et de la programmabilité sa force. Par exemple, les produits suivants supportent les API et disposent d’une documentation complète qui reprend l’ensemble des méthodes supportées, le format des données et les  informations retournées :

    • ArubaOS Switches,
    • Mobility Master 8.X,
    • Airwave,
    • ClearPass,
    • VAN SDN Controller,
    • ALE,
    • Aruba Central.

    Vous l’aurez compris, nous allons  parler API et Scripting Python. 

    L’objectif de cet article est de vous donner une vue générale sur les  RESTfull API et  de vous fournir les outils nécessaires pour construire un environnement de test  qui vous permettra de faire des test d’appels API vers le ClearPass.

     

    Qu’est-ce qu’une architecture API RESTfull Web Service ?

    D’abord, commençons par définir qu’est-ce qu’un Service Web? Un Service Web est le moyen de communication entre deux systèmes ou applications  via une interface prédéfinie (API).  Il existe deux principaux types de Services Web : REST (le plus répandu aujourd’hui) et SOAP.

    Sans rentrer dans les détails (ce n’est pas notre objectif) REST (REpresentational State Transfert) est un modèle d’architecture qui permet de définir des applications et rendre toutes les ressources de ces applications accessible via une URL. Il est implémenté en utilisant HTTP.

    Une API (Application Programming Interface) est une collection de règles qui décrivent le moyen et les mécanismes d’interaction entre ces applications.

     

     Ce qui suit tend à donner une vue générale d’un design API et les principaux éléments à connaitre pour une intégration réussie :

     

    API Authentification :

    En général, les API nécessitent une authentification car elles permettent l’accès à des ressources protégées. Il existe plusieurs méthodes pour authentifier et autoriser  les accès API :

    • Aucune authentification: la ressource Web API est publiquement accessible. En général pour des appels GET (en lecture).
    • Basic HTTP : un nom d’utilisateur et mot de passe est ajouté en paramètre de la requête HTTP à chaque appel API.
    • Auth-Token : Ce Token est généré depuis le WEB API Serveur (par exemple, depuis ClearPass) et placé dans chaque appel API. Ce token est précédé par un mot clé qui diffère selon les serveurs WEB API (exemple : ClearPass utilise le mot clé "Bearer"). Ceci permet aussi de gérer la durée de validité du Token.
    • OAuth 2.0 : OAuth est un protocole libre qui permet de générer un « Access Token » depuis un serveur d’autorisation. En résumé, il permet d’autoriser une application client à utiliser une API sécurisée d’une autre application pour le compte d’un utilisateur. Il permet aussi de gérer la durée de vie du Token, de le révoquer ou de le prolonger et une gestion des sessions.

    API URL

    Pour faire des appels API, il faut spécifier l’URL de la ressource qu’on veut atteindre. Cette URL est disponible dans la documentation API de chaque application. Par exemple : l’URL suivante : https://<Adresse IP du ClearPass>/api/guest   permet d’atteindre la base Guest qui contient tous les comptes visiteurs dans ClearPass.

     

    Méthodes HTTP :

    L’ensemble des méthodes supportées par HTTP, par exemple :

    • GET: pour récupérer une ressource,
    • POST: pour modifier une ressource,
    • PUT: pour créer une ressource,
    • DELETE: pour supprimer une ressource.

     Le Payload ou Data:

    C’est la donnée envoyée ou recherchée par un appel API. Elle est présentée sous différents formats les plus connus sont Extensible Markup Language (XML) ou JavaScript Object Notation(JSON).

     

    En résumé, RESTfull API utilise les méthodes HTTP pour manipuler les données depuis/vers un serveur et retourne (selon le type de la requête) ces données sous format JSON ou XML.

     

     Comment cela fonctionne ?

    Exemple : je veux interroger l’API Guest de mon ClearPass pour récupérer l'ensemble des comptes Guest. Le schéma ci-dessous résumé la requête et la réponse que je souhaite avoir.

     

    Comment cela fonctionne.png

     

     

    Comment se présente une requête REST API

    Pour faire une requête ou appel REST API, il faut spécifier les éléments suivants :

    • Spécifier la méthode : GET, POST, PUT, DELETE,
    • Spécifier l’URL : par exemple: https://<AdresseIP_ClearPass>/api/guest   
    • Spécifier l’authentification : Aucune, Basic HTTP, OAuth, Auth-Token,
    • Personnaliser les Headers : HTTP headers.
    • Corps de la requête (Optionnel) : JSON ou XML pour compléter la requête.

     Quelle est la réponse REST

    La réponse correspond aux codes de statuts HTTP :

     Le schéma ci-dessous représente un exemple d’une requête API REST :

    exempled e requete REST.png

     

    Préparation de l’environnement de test

     

    Maintenant, que nous avons une idée plus claire sur ces API…. si nous faisions un Test d’appel API vers ClearPass.

    J’utilise les outils suivants pour mon environnement de test :

     

    • Python 3: Python est préinstallé dans les distributions Linux et Mac OS. Pour Windows vous avez besoin de le télécharger en suivant le lient : https://www.python.org/downloads/. Vous pouvez vérifier la bonne installation en tappant la commande « Python » dans l’invite de commande. Il est nécessaire de compléter l’installation de Python sur Windows avec les modules « Requests » et « Simplejson » en utilisant la commande pip :
      C:\WINDOWS\system32>python -m pip install requests
      C:\WINDOWS\system32>python -m pip install simplejson
    • PyCharm : j’utilise PyCharm comme éditeur de text (IDE) pour mes scripts Python, mais vous pouvez utiliser d’autres IDE (Notepad++, Atom, Sublime text , …). PyCharm est disponible :https://www.jetbrains.com/pycharm/
    • Postman : est un outil pour appeler/tester une API Web.  Il existe la version intégrée au navigateur (extension chrome par exemple) ou la version application package. Vous pouvez le télécharger à l’adresse suivante : https://www.getpostman.com/ . Vous pouvez aussi utiliser la ligne de commande en utilisant curl : http://curl.haxx.se/docs/httpscripting.html#GET

     

    Exemple 1 : Utiliser Postman pour afficher les comptes Guest de ClearPass

     

    En  utilisant Postman, je vais afficher l’ensemble  des comptes Guest sur ClearPass. L’anatomie de mon appel API est :

    • Méthode : GET
    • URL : https://<adressIP ClearPass>/api/guest
    • Header : Token à insérer

     Pour rappel, la documentation API de ClearPass est disponible à l’adresse suivante: https://<adressIP ClearPass>/api-doc

     

    La capture d’écran suivante représente la réponse obtenue:


    anatomi call API.png

     

     

    Exemple 2 : Utiliser un script Python pour afficher les comptes Guest de ClearPass :

      

    Nous allons utiliser le script Python suivant pour afficher l’ensemble des comptes Guest :

    import requests
    import json
    import argparse
    import pprint
    
    url = "https://10.14.120.30:443/api/guest"  #URL de mon ClearPass
    token="ad06e7c39776163163f12d3eaa6d9090063f2066"#Remplacer par le Token généré depuis ClearPass
    headers={'Authorization':'Bearer ' + token}
    response= requests.get(url, headers=headers ,verify=False)
    
    response_json = response.json() #réponse sous format JSON
    pprint.pprint(response_json) #utiliser la commande pretty Print pour afficher le résultat
    

    réponse Python.png

    En résumé, nous avons vu d’une manière générale ce que c’est une architecture RESTfull API et comment faire des appels API (ici vers  ClearPass) en utilisant Postman et Python.

     

    Alors « To API or not to API »……..

    A bientôt……..

     

     

     

     

     



  • 2.  RE: REST API & Python

    Posted Apr 07, 2017 10:32 AM

    Excellent ! Merci Kamel !



  • 3.  RE: REST API & Python

    Posted Apr 10, 2017 05:56 AM

    Merci pour l'intro :)



  • 4.  RE: REST API & Python

    Posted Jul 20, 2017 07:00 PM
    Good job kamel. Merci !


  • 5.  RE: REST API & Python

    Posted Aug 17, 2017 08:40 AM

    Simple et concis !

    Parfait pour débuter ! merci :)