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