Applications serveur + API : Implémentation Python pour la tâche Cron
Dans le cadre du scénario d’architecture Serveur + API, nous expliquerons comment implémenter le processus du serveur dans Python. Veuillez vous référer au document Scénario d’architecture Serveur + API pour obtenir des informations sur la solution implémentée.
Le code source complet de l’implémentation Python se trouve dans ce référentiel GitHub.
Obtenir un jeton d’accès
Pour effectuer la requête HTTP vers le point de terminaison Auth0 /oauth/token
de l’API, nous utiliserons les bibliothèques json
, urllib
et urllib2
.
Voici un exemple d’implémentation :
def main():
import json, urllib, urllib2, httplib
# Configuration Values
domain = "{yourDomain}" # Your Auth0 Domain
api_identifier = "API_IDENTIFIER" # API Identifier of your API
client_id = "{yourClientId}" # Client ID of your Machine-to-Machine Application
client_secret = "{yourClientSecret}" # Client Secret of your Machine to Machine Application
api_url = "http://localhost:8080/timesheets/upload"
grant_type = "client_credentials" # OAuth 2.0 flow to use
# Get an access token from Auth0
base_url = "https://{domain}".format(domain=domain)
data = urllib.urlencode({'client_id': client_id,
'client_secret': client_secret,
'audience': api_identifier,
'grant_type': grant_type})
req = urllib2.Request(base_url + "/oauth/token", data, headers={"Accept": "application/x-www-form-urlencoded"})
response = urllib2.urlopen(req)
resp_body = response.read()
oauth = json.loads(resp_body)
access_token = oauth['access_token']
# Standard boilerplate to call the main() function.
if __name__ == '__main__':
main()
Was this helpful?
Pour la tester, modifiez votre code pour imprimer la variable access_token
et exécutez le processus en utilisant python cron.py
.
Invoquer l’API
Les étapes que nous suivons pour l’implémentation sont les suivantes :
Créer un objet JSON contenant les données de la feuille de temps et affectez-le à une variable
timesheet
.Ajoutez l’URL de l’API et le contenu de la variable
timesheet
au corps de la requête en utilisanturllib2.Request
.Ajouter l’en-tête
Authorization
à la requête.Définir l’en-tête
Content-Type
surapplication/json
.Invoquer l’API en utllisant
urllib2.urlopen
et ajouter des fonctions de gestion des erreurs. Récupérer l’API en utilisantjson.loads
et imprimez-la dans la console.
Voici un exemple d’implémentation (certains codes sont omis par souci de concision) :
def main():
# import libraries - code omitted
# Configuration Values - code omitted
# Get an Access Token from Auth0 - code omitted
#Post new timesheet to API
timesheet = {'user_id': '007',
'date': '2017-05-10T17:40:20.095Z',
'project': 'StoreZero',
'hours': 5}
req = urllib2.Request(api_url, data = json.dumps(timesheet))
req.add_header('Authorization', 'Bearer ' + access_token)
req.add_header('Content-Type', 'application/json')
try:
response = urllib2.urlopen(req)
res = json.loads(response.read())
print 'Created timesheet ' + str(res['id']) + ' for employee ' + str(res['user_id'])
except urllib2.HTTPError, e:
print 'HTTPError = ' + str(e.code) + ' ' + str(e.reason)
except urllib2.URLError, e:
print 'URLError = ' + str(e.reason)
except httplib.HTTPException, e:
print 'HTTPException'
except Exception, e:
print 'Generic Exception' + str(e)
# Standard boilerplate to call the main() function - code omitted
Was this helpful?
Pour la tester, assurez-vous que votre API est en cours d’exécution et lancez le processus en utilisant python cron.py
.
C’est tout! Vous avez terminé!