REST-API mit python

Mit python lässt sich einfach auf eine REST-API Zugreifen.

Nachfolgend finden sich Funktionen, damit man schnell starten kann.

Benötigte Module

Für Python und REST API werden die Module urllib, requests und json benötigt:

try:
  import sys, urllib, requests, json
  requests.packages.urllib3.disable_warnings()
except ImportError as err:
  print("ERROR: Some modules could not be loaded")
  raise

Das Modul requests gehört nicht zum Standardumfang von python und muss noch installiert werden.

Daher prüft das try/except Konstrukt danach um den Fehler abzufangen.

Mittels der requests.packages.urllib3.disable_warnings() Funktion werden Abbrüche vermieden, wenn man auf eine URL mit selbst-signiertem SSL Zertifikat zugreift.

Funktionen

restGet()

Führt einen REST GET aus um Daten zu schrieben und liefert das Ergebnis zurück:

def restGet(endpoint, auth_header=""):
  response = requests.get(endpoint.rstrip("/"), verify=False,
     headers={
     "Accept": "application/json",
     "Content-Type": "text/plain",
     "Authorization": auth_header
     }
  )

  # Handle response
  try:
    data = response

    if (response.status_code == 204):
      print( "REST request successful with HTTP status " +str(response.status_code) )
      return 0
    else:
      dataJson = response.json()
      print("REST request failed with HTTP status "    +str(response.status_code) +": " +dataJson['code'] +" - " +dataJson['message'] +" (DATA: " +post_data +")"
      return 2
  except requests.exceptions.HTTPError as error:
    print(error)
    return 2

restPost()

Führt einen REST POST aus um Daten zu schrieben und liefert das Ergebnis zurück:

def restPost(endpoint, post_data, auth_header=""):
  response = requests.post(endpoint.rstrip("/"), verify=False, data=post_data,
     headers={
     "Accept": "application/json",
     "Content-Type": "text/plain",
     "Authorization": auth_header
     }
  )

  # Handle response
  try:
    data = response

    if (response.status_code == 204):
      print( "REST request successful with HTTP status " +str(response.status_code) )
      return 0
    else:
      dataJson = response.json()
      print("REST request failed with HTTP status "    +str(response.status_code) +": " +dataJson['code'] +" - " +dataJson['message'] +" (DATA: " +post_data +")"
      return 2
  except requests.exceptions.HTTPError as error:
    print(error)
    return 2

urlEncode

Nützliche Funktion um Strings (z.B. mit Leerzeichen) in ein URL/REST taugliches Format zu bringen.

def urlEncode(raw_string):
  if sys.version_info.major == 2:
    urlencoded_string = urllib.quote(raw_string)
  else:
    urlencoded_string = urllib.parse.quote(raw_string)
  return urlencoded_string

Published by

Steven Varco

Steven ist ein Redhat RHCE-Zertifizierter Linux-Crack und ist seit über 20 Jahren sowohl beruflich wie auch privat auf Linux spezialisiert. In seinem Keller steht ein Server Rack mit diversen ESX und Linux Servern.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.