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:
from vtcweb import WebService class myService(WebService): ...
Über die Basisklasse verfügt das Service-Objekt self über folgende Methoden und Attribute:
| Methode / Attribut | Beschreibung |
|---|---|
http_method |
Enthält die HTTP-Methode, mit der der Webservice aufgerufen wurde. Mögliche Werte sind GET, POST, PUT und DELETE. |
path_parameters |
Enthält die Liste der Pfadparameter der URL nach dem Methodennamen. Beim Aufruf von
self.path_parameters=("additional", "path", "parameters")
|
headers |
Ein Dictionary, welches die Header des WebRequests in der Form |
query |
Ein Dictionary, welches die Query-Parameter des WebRequests in der Form |
querystring |
Der Query-String, mit dem der Webservice aufgerufen wurde (ohne führendes Fragezeichen). |
body |
Der originale Request Body als Zeichenkette, mit dem der Webservice aufgerufen wird. |
parse_request_body ([expected_attributes=None]) |
Handelt es sich beim Request um JSON oder HTML (Content-Type Der Typ der Werte entspricht bei JSON dem Typ. Bei HTML werden alle Werte als String zurückgegeben.
Keys, die keine gültigen Python Identifier sind, werden ignoriert und es wird ein entsprechender Hinweis geloggt. expected_attributesMit dem optionalen Parameter Als
expected_attributes = {
"abbreviation": "str",
"level": "int"
}
Mögliche Typen sind:
Beim Aufruf von Die Werte müssen dabei nicht unbedingt dem angegebenen Typ entsprechen, sie müssen nur in diesen konvertiert werden können. So könnte als "level" beispielsweise auch die Zeichenkette Das zurückgegebene Objekt enthält dann alle Attribute konvertiert in den erwarteten Typ. Attribute, die nicht in |
response |
Ein Response Objekt, dass automatisch zur Beantwortung des WebRequests verwendet wird, wenn die Methode nicht selbst einen Rückgabewert hat. Es können darauf folgende Werte gesetzt werden:
|
as_json(content): response |
Diese Methode serialisiert den übergebenen Content als JSON-String und gibt ein Response Objekt mit folgenden Parametern zurück:
|
log(log_object) |
Schreibt das übergebene Objekt ins Log. Kann mit Zeichenketten, aber auch mit anderen Objekten umgehen. Das Objekt wird einerseits in das Vertec Session Log geschrieben. Dabei wird die Category Zudem wird das Objekt auch mit |
Innerhalb der Webservice Klasse kann ganz normaler Vertec Python Code geschrieben werden.
Methoden, die von aussen aufrufbar sein sollen, müssen mit einem der fünf Python Decorators versehen werden, welche vom Modul importiert werden:
from vtcweb import get, put, post, delete, http
Sie werden wie folgt deklariert:
und entsprechen jeweils der HTTP Methode, mit welcher sie aufgerufen werden können. Hat eine Methode den @http Decorator, ist sie mit allen HTTP-Methoden verfügbar.
Es muss immer ein Alias (String) angegeben werden, über welchen die Methode aufgerufen werden kann, z.B.
@get("objects") def objects_get(self): ...
Damit kann via http://<host>/api/webservice/<webservicename>/objects die Methode objects_get aufgerufen werden.
Der Alias kann auch eine Route / ein Pfad sein:
@get("project/search") def search_project(self): ...
Das reagiert auf die Route project/search und ruft dann die Methode search_project auf. Der Pfad wird trotzdem wie immer in self.path_parameters geliefert.
Als Rückgabewerte der so aufgerufenen Methoden können Webresponses wie folgt 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(content) |
Siehe oben. |
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.
raise WebException(<statuscode>,<body>=None,<contenttype>=None)
Ein Statuscode (Integer) muss übergeben werden, Body (String) und Content-Type (String) sind optional. Wird ein Body, aber kein Content-Type übergeben, wird als Fallback text/plain verwendet.