maciek905 - Fotolia
So verwenden Sie die REST API unter Python
Mit der Schnittstelle REST API für die Programmiersprache Python erhalten Storage-Administratoren zusätzliche Flexibilität, um Management-Aufgaben durchzuführen.
Open Source ist auf dem Vormarsch. Auch bei Schnittstellen (Application Programming Interface, API) ist Offenheit angesagt.
Die Verwendung der REST API unter Python kann Administratoren größere Flexibilität ermöglichen. Einige Programmierkenntnisse sind allerdings nötig.
Mit der REST API können Sie das Storage-Management durch Scripts vereinfachen. Als Scripting Language ist Python gut geeignet.
Die REST API erleichtert den Zugriff auf viele Webservices. Egal ob Sie einen Tweet verschicken, Daten auf Dropbox speichern, Ihren eigenen Cloud-Server einrichten oder auf öffentlich zugängliche Daten zugreifen, wirkt die REST API im Hintergrund.
Diese Services mit Python zu nutzen, ist recht einfach, besonders wenn Sie einen nativen Python Wrapper oder ein Software Development Kit (SDK) benutzen.
REST API in Python
Das REST Protokoll ist populär für die Entwicklung moderner Web- und mobiler Anwendungen. REST ermöglicht die Verbindung zu einem Service, normalerweise über HTTP.
Mit den HTTP-Befehlen wie GET, PUT, POST, DELETE und OPTIONS können Endpoints adressiert und Aktionen ausgeführt werden.
Beispielsweise reagiert der Service auf die Anfrage <GET /v2/sizes> mit einem Listing der Collection Sizes. Um die Verwaltung der Ergebnisse zu erleichtern, verwenden REST APIs unter Python meistens Filter und Seitenaufrufe mit Prametern wie etwa
<GET /v2/droplets?tag_name=prod-nl> oder <GET /v2/sizes?page=1&per_page=10>
Die Antwort wird meist per JSON formatiert, aber auch XML ist eine Option. Für die Details eines Items in der Size Collection kann der Befehl <GET /v2/sizes/<item_id>> dienen, wobei die <item_id> einen bestimmten Item identifiziert.
Die Spezifikationen von REST legen fest, dass die Antwort eine vollständige Repräsentation eines Items enthalten muss. Der Client kann danach den Item über die PUT oder POST Methode verändern und dann die Repräsentation des veränderten Items veranlassen.
Der Server muss sich nicht um die Statusverfolgung kümmern. Dies übernimmt REST, das sehr gut skaliert.
Abhängig vom Servicetyp verlangen Provider oft einen API Key, um eingehende Anfragen zu bearbeiten. Um den Key zu erhalten, müssen Sie sich beim Provider registrieren, für gewöhnlich auf den Profile oder Settings Pages.
Die folgenden Beispiele zeigen, wie Sie das Python SDK von Amazon Web Services (AWS) verwenden können, um auf Dateien im Simple Storage Service (S3) zuzugreifen. Das SDK bietet einen großen Funktionsumfang, aber wir wollen uns auf einfache Beispiele beschränken.
Beispiel 1: Direktzugriff
Mit dieser Methode interagiert das Client Programm direkt mit dem API Endpoint durch HTTPS mit Python-Anfragen und JSON-Modulen. Der Vorteil liegt darin, dass keine spezialisierten Module benötigt werden. Andererseits müssen Sie die Datenstrukturen des REST API Service verstehen.
Zusätzlich zur API Logik müssen Sie die Authentication- und Authorization-Funktionen implementieren und dies erfordert einen erheblichen Programmieraufwand. S3 ist dafür ein gutes Beispiel: Es dokumentiert und unterstützt den Zugriff auf den Service, ohne das SDK zu nutzen. Das Schema für Authentication und Authorization ist nur mit erheblichen Mühen zu implementieren und aufrechtzuerhalten.
Beispiel 2. Python Wrapper
Eine angenehmere Methode ist die Benutzung eines SDKs, das vom REST API in Python zur Verfügung gestellt wird. Dies kümmert sich um die Kommunikation auf dem HTTP-Level und wandelt die JSON-Responses in Python-Objekte um.
Beispiele für solche Wrapper sind Tweepy, der Twitter API Wrapper, Boto3 von AWS sowie Apache Libcloud, eine generische Python Library, um auf Infrastructure-as-a-Service-Provider zuzugreifen.
Das folgende Beispiel nutzt den Default Credential Store des AWS Python SDK, das $HOME/.Aws Directory. Um die Sicherheit zu erhöhen, sollte dieses Directory nur vom Service Account der Anwendung aus lesbar sein. Der AWS S3 Service benötigt zwei Konfigurationsdateien.
$HOME/.aws/config:
01 02 03 |
[default] output = json region = eu-central-1 |
und $HOME/.aws/credentials. Der Inhalt sollte so ähnlich aussehen:
01 02 03 |
[default] aws_access_key_id = AKIAJXXXXXXXXXXXXXXX aws_secret_access_key = XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX |
Stellen Sie sicher, dass das benötigte Modul mit folgendem Befehl installiert wird:
<pip install boto3>
Die zweite Zeile importiert das boto3-Modul. Zeile 12 nutzt die Standard Credentials des AWS S3 Service. Zeile 15 holt sich eine Liste von Objekten aus dem myfiles S3 bucket. Die Variable item zeigt zusätzliche Informationen.
Zeile 20 lädt eine Datei aus dem Bucket in das aktuelle Directory.
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 |
import sys import boto3
if len(sys.argv) > 2: bucket = sys.argv[1] obj = sys.argv[2] else: bucket = 'myfiles' obj = 'forrest.jpg'
# Session s3 = boto3.client('s3')
# List content bucket items = s3.list_objects_v2(Bucket=bucket, FetchOwner=True) for f in items.get('Contents'): print(f['Key'], f['Size'])
# Download a file s3.download_file(Bucket=bucket, Key=obj, Filename=obj) |
Der Output dieses Programms ist:
|
forrest.jpg 1675801 |
Folgen Sie SearchStorage.de auch auf Twitter, Google+, Xing und Facebook!