CherryPy - Webdienste
Ein Webdienst ist eine Reihe von webbasierten Komponenten, die beim Datenaustausch zwischen der Anwendung oder den Systemen helfen und auch offene Protokolle und Standards enthalten. Es kann im Internet veröffentlicht, verwendet und gefunden werden.
Es gibt verschiedene Arten von Webdiensten wie RWS (RESTfUL Web Service), WSDL, SOAP und viele mehr.
REST - Repräsentativer Staatstransfer
Eine Art von RAS-Protokoll, das den Status vom Client zum Server überträgt und zum Bearbeiten des Status verwendet werden kann, anstatt Remote-Prozeduren aufzurufen.
Definiert keine spezifische Codierung oder Struktur und Möglichkeiten zur Rückgabe nützlicher Fehlermeldungen.
Verwendet HTTP- "Verben", um Statusübertragungsvorgänge auszuführen.
Die Ressourcen werden anhand der URL eindeutig identifiziert.
Es ist keine API, sondern eine API-Transportschicht.
REST verwaltet die Nomenklatur der Ressourcen in einem Netzwerk und bietet einen einheitlichen Mechanismus zum Ausführen von Vorgängen für diese Ressourcen. Jede Ressource wird durch mindestens eine Kennung identifiziert. Wenn die REST-Infrastruktur auf der Basis von HTTP implementiert ist, werden diese Bezeichner als bezeichnetUniform Resource Identifiers (URIs).
Im Folgenden sind die beiden allgemeinen Teilmengen der URI-Gruppe aufgeführt:
Teilmenge | Vollständige Form | Beispiel |
---|---|---|
URL | Uniform Resource Locator | http://www.gmail.com/ |
URNE | Einheitlicher Ressourcenname | Urne: isbn: 0-201-71088-9 Urne: uuid: 13e8cf26-2a25-11db-8693-000ae4ea7d46 |
Bevor wir die Implementierung der CherryPy-Architektur verstehen, konzentrieren wir uns auf die Architektur von CherryPy.
CherryPy enthält die folgenden drei Komponenten:
cherrypy.engine - Es steuert den Prozessstart / -abbau und die Ereignisbehandlung.
cherrypy.server - Es konfiguriert und steuert den WSGI- oder HTTP-Server.
cherrypy.tools - Eine Toolbox mit Dienstprogrammen, die orthogonal zur Verarbeitung einer HTTP-Anforderung sind.
REST-Schnittstelle über CherryPy
Der RESTful-Webdienst implementiert jeden Abschnitt der CherryPy-Architektur mithilfe der folgenden Funktionen:
- Authentication
- Authorization
- Structure
- Encapsulation
- Fehlerbehandlung
Authentifizierung
Die Authentifizierung hilft bei der Validierung der Benutzer, mit denen wir interagieren. CherryPy enthält Tools für jede Authentifizierungsmethode.
def authenticate():
if not hasattr(cherrypy.request, 'user') or cherrypy.request.user is None:
# < Do stuff to look up your users >
cherrypy.request.authorized = False # This only authenticates.
Authz must be handled separately.
cherrypy.request.unauthorized_reasons = []
cherrypy.request.authorization_queries = []
cherrypy.tools.authenticate = \
cherrypy.Tool('before_handler', authenticate, priority=10)
Die obige Funktion authenticate () hilft dabei, die Existenz der Clients oder Benutzer zu überprüfen. Die integrierten Tools helfen dabei, den Prozess systematisch abzuschließen.
Genehmigung
Die Autorisierung hilft bei der Aufrechterhaltung der Vernunft des Prozesses über URI. Der Prozess hilft auch beim Morphing von Objekten durch Benutzer-Token-Leads.
def authorize_all():
cherrypy.request.authorized = 'authorize_all'
cherrypy.tools.authorize_all = cherrypy.Tool('before_handler', authorize_all, priority=11)
def is_authorized():
if not cherrypy.request.authorized:
raise cherrypy.HTTPError("403 Forbidden",
','.join(cherrypy.request.unauthorized_reasons))
cherrypy.tools.is_authorized = cherrypy.Tool('before_handler', is_authorized,
priority = 49)
cherrypy.config.update({
'tools.is_authorized.on': True,
'tools.authorize_all.on': True
})
Die integrierten Autorisierungstools helfen bei der systematischen Behandlung der Routinen, wie im vorherigen Beispiel erwähnt.
Struktur
Das Beibehalten einer API-Struktur hilft dabei, die Arbeitslast beim Zuordnen des URI der Anwendung zu verringern. Es ist immer notwendig, die API erkennbar und sauber zu halten. Die Grundstruktur der API für das CherryPy-Framework sollte Folgendes enthalten:
- Konten und Benutzer
- Autoresponder
- Contact
- File
- Folder
- Liste und Feld
- Nachricht und Stapel
Verkapselung
Encapsulation hilft bei der Erstellung von APIs, die leichtgewichtig, für Menschen lesbar und für verschiedene Clients zugänglich sind. Die Liste der Elemente zusammen mit dem Erstellen, Abrufen, Aktualisieren und Löschen erfordert die Kapselung der API.
Fehlerbehandlung
Dieser Prozess verwaltet etwaige Fehler, wenn die API nicht auf den jeweiligen Instinkt ausgeführt werden kann. Zum Beispiel ist 400 für eine fehlerhafte Anfrage und 403 für eine nicht autorisierte Anfrage.
Beispiel
Betrachten Sie das Folgende als Beispiel für Datenbank-, Validierungs- oder Anwendungsfehler.
import cherrypy
import json
def error_page_default(status, message, traceback, version):
ret = {
'status': status,
'version': version,
'message': [message],
'traceback': traceback
}
return json.dumps(ret)
class Root:
_cp_config = {'error_page.default': error_page_default}
@cherrypy.expose
def index(self):
raise cherrypy.HTTPError(500, "Internal Sever Error")
cherrypy.quickstart(Root())
Der obige Code erzeugt die folgende Ausgabe -
Die Verwaltung der API (Application Programming Interface) ist über CherryPy dank der integrierten Zugriffstools einfach.
HTTP-Methoden
Die Liste der HTTP-Methoden, die mit den Ressourcen arbeiten, lautet wie folgt:
S.No. | HTTP-Methode und Betrieb |
---|---|
1. | HEAD Ruft die Ressourcenmetadaten ab. |
2. | GET Ruft die Ressourcenmetadaten und -inhalte ab. |
3. | POST Fordert den Server auf, eine neue Ressource unter Verwendung der im Anforderungshauptteil enthaltenen Daten zu erstellen. |
4. | PUT Fordert den Server auf, eine vorhandene Ressource durch die im Anforderungshauptteil enthaltene zu ersetzen. |
5. | DELETE Fordert den Server auf, die durch diesen URI identifizierte Ressource zu entfernen. |
6. | OPTIONS Fordert den Server auf, Details zu Funktionen entweder global oder spezifisch für eine Ressource zurückzugeben. |
Atom Publishing Protocol (APP)
APP ist aus der Atom-Community als Protokoll auf Anwendungsebene über HTTP entstanden, um das Veröffentlichen und Bearbeiten von Webressourcen zu ermöglichen. Die Nachrichteneinheit zwischen einem APP-Server und einem Client basiert auf dem Atom-XML-Dokumentformat.
Das Atom Publishing-Protokoll definiert eine Reihe von Vorgängen zwischen einem APP-Dienst und einem Benutzeragenten unter Verwendung von HTTP und seinen Mechanismen sowie des Atom-XML-Dokumentformats als Nachrichteneinheit.
APP definiert zunächst ein Servicedokument, das dem Benutzeragenten den URI der verschiedenen Sammlungen bereitstellt, die vom APP-Service bereitgestellt werden.
Beispiel
Nehmen wir ein Beispiel, um zu demonstrieren, wie APP funktioniert -
<?xml version = "1.0" encoding = "UTF-8"?>
<service xmlns = "http://purl.org/atom/app#" xmlns:atom = "http://www.w3.org/2005/Atom">
<workspace>
<collection href = "http://host/service/atompub/album/">
<atom:title> Albums</atom:title>
<categories fixed = "yes">
<atom:category term = "friends" />
</categories>
</collection>
<collection href = "http://host/service/atompub/film/">
<atom:title>Films</atom:title>
<accept>image/png,image/jpeg</accept>
</collection>
</workspace>
</service>
APP gibt an, wie die grundlegenden CRUD-Operationen für ein Mitglied einer Sammlung oder die Sammlung selbst mithilfe von HTTP-Methoden ausgeführt werden sollen, wie in der folgenden Tabelle beschrieben.
Operation | HTTP-Methode | Statuscode | Inhalt |
---|---|---|---|
Abrufen | ERHALTEN | 200 | Ein Atom-Eintrag, der die Ressource darstellt |
Erstellen | POST | 201 | Der URI der neu erstellten Ressource über die Header Location und Content-Location |
Aktualisieren | STELLEN | 200 | Ein Atom-Eintrag, der die Ressource darstellt |
Löschen | LÖSCHEN | 200 | Keiner |