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
mountains.jpg 2005500

Folgen Sie SearchStorage.de auch auf Twitter, Google+, Xing und Facebook!

Nächste Schritte

Die Grundlagen der Einführung eines RESTful-API-Testprogramms.

REST APIs und SDN: Eine Einführung für Netzwerkspezialisten.

REST oder SOAP: Vergleich von Anwendungsfällen für den Handel.

Erfahren Sie mehr über Storage Management