Das Vertec Python Modul "vtcweb" für das Arbeiten mit Webservices
Ab Version 6.8.0.17 gibt es das Python Modul vtcweb mit der Basisklasse vtcweb.WebService. Alle Webservice-Klassen müssen von dieser Klasse abgeleitet sein. Über die Basisklasse verfügt das Service-Objekt self über folgende Methoden und Attribute:
| Methoden / Attribute | Beschreibung |
|---|---|
self.http_method |
Enthält die HTTP-Methode, mit der der Webservice aufgerufen werden kann. Mögliche Werte sind GET, POST, PUT & DELETE. |
self.path_parameters |
Ein Tupel, der die Pfadparameter der URL nach dem Methodennamen enthält: self.path_parameters=("additional", "path", "parameters") |
self.headers |
Ein Dictionary, welches die Header des WebRequests in der Form |
self.query |
Ein Dictionary, welches die Query-Parameter des WebRequests in der Form |
self.querystring |
Der originale Query-String, mit dem der Webservice aufgerufen wird und das ohne führendes Fragezeichen. |
self.body |
Der originale Request Body als Zeichenkette, mit dem der Webservice aufgerufen wird. |
self.response |
Ein Response Objekt, dass automatisch zur Beantwortung des WebRequests verwendet wird, wenn die Methode nicht selbst einen Rückgabewert hat. Es können folgende Werte gesetzt werden: self.response.status_code (Der Statuscode der Webresponse wird auf 200 OK gesetzt) self.response.body (Der Body der Webresponse und standardmässig als <empty>) self.response.headers["..."] (Ein Dictionary von Response Headers) |
self.as_json(<some_object>) |
Diese Methode serialisiert das übergebene Objekt als JSON-String und setzt es also Body auf self.response.body. Ausserdem wird self.response.statuscode = 200 und self.response.headers[“Content-Type”] = application/json gesetzt. |
self.log(log_object) |
Schreibt das übergebene Objekt ins Log. Kann mit Zeichenketten, aber auch mit anderen Objekten umgehen.
|
| Methoden / Attribute | Beschreibung | Beispiel |
|---|---|---|
self.parse_request_body(expected_attributes=None) |
Die Methode vereinfacht die Arbeit mit Request Bodies. Der Request muss den Content-Type |
Für JSON Bodies wird der Body deserialisiert. Die Werte werden als Attribute auf ein Hilfsobjekt geschrieben und sind so direkt abrufbar. Der Typ der Werte entspricht dem Typ in JSON.
Body: { result = self.parse_request_body() Keys, die keine gültigen Python Identifier sind, werden ignoriert und es wird ein entsprechender Hinweis geloggt.
result = self.parse_request_body() $release_date und 1line sind keine gültigen Bezeichner in Python und werden daher ignoriert. Für result = self.parse_request_body() |
expected_attributes |
Mit diesem Attribut wird der Request Body der obigen Methode validiert und konvertiert. Dies funktioniert nur mit JSON-Bodies. Erwartet wird ein Dictionary, dessen Keys die Attribute im Body und die Values der Typ ist. |
Mögliche Typen sind:
Der Typ Body: { expected_attributes = { result = self.parse_request_body() Hinweis: |
In den über WebRequests aufgerufenen Methoden können Webresponsen folgendermassen erzeugt werden:
| Antworten | Beschreibung |
|---|---|
| return <Integer> |
Eine Ganzzahl wird als Statuscode interpretiert. Die Response enthält keine weiteren Werte. |
| return "string" | Die zurückgegebene Zeichenkette wird als Response Body interpretiert mit dem Statuscode 200 OK. Zudem wird der Header Content-Type auf text/plain gesetzt. |
| return self.response | Das Response Objekt (siehe oben) wird zurückgegeben und interpretiert. Dies passiert auch, wenn die Methode ohne Rückgabewert endet. |
| return self.as_json(response_object) | Siehe oben. |
| Klasse | Beschreibung |
|---|---|
| raise WebException(<statusCode>,<body>=None,<contentType>=None) |
Mit dem Auslösen einer WebException kann an beliebiger Stelle die Ausführung des aktuellen Aufrufs unterbrochen werden. Die WebException wird entsprechend der übergebenen Werte in eine Webresponse umgewandelt. Ein Statuscode muss übergeben werden, Body und Content-Type sind optional. Wird ein Body aber kein Content-Type übergeben, wird als Fallback |