CherryPy - usługi internetowe
Usługa internetowa to zestaw komponentów internetowych, który pomaga w wymianie danych między aplikacją lub systemami, który obejmuje również otwarte protokoły i standardy. Można je publikować, wykorzystywać i znajdować w sieci.
Usługi sieciowe są różnego typu, takie jak RWS (RESTfUL Web Service), WSDL, SOAP i wiele innych.
REST - Reprezentacyjny transfer państwa
Typ protokołu zdalnego dostępu, który przesyła stan z klienta do serwera, który może służyć do manipulowania stanem zamiast wywoływania procedur zdalnych.
Nie definiuje żadnego konkretnego kodowania ani struktury ani sposobów zwracania przydatnych komunikatów o błędach.
Używa „czasowników” HTTP do wykonywania operacji transferu stanu.
Zasoby są jednoznacznie identyfikowane za pomocą adresu URL.
Nie jest to API, ale warstwa transportowa API.
REST utrzymuje nazewnictwo zasobów w sieci i zapewnia jednolity mechanizm wykonywania operacji na tych zasobach. Każdy zasób jest identyfikowany przez co najmniej jeden identyfikator. Jeśli infrastruktura REST jest zaimplementowana w oparciu o protokół HTTP, wówczas te identyfikatory są określane jakoUniform Resource Identifiers (URIs).
Poniżej przedstawiono dwa wspólne podzbiory zestawu URI -
Podzbiór | Pełna forma | Przykład |
---|---|---|
URL | Uniform Resource Locator | http://www.gmail.com/ |
URNA | Jednolita nazwa zasobu | urn: isbn: 0-201-71088-9 urn: uuid: 13e8cf26-2a25-11db-8693-000ae4ea7d46 |
Zanim zrozumiemy implementację architektury CherryPy, skupmy się na architekturze CherryPy.
CherryPy zawiera następujące trzy składniki -
cherrypy.engine - Kontroluje uruchamianie / kończenie procesów i obsługę zdarzeń.
cherrypy.server - Konfiguruje i steruje serwerem WSGI lub HTTP.
cherrypy.tools - Zestaw narzędzi, które są ortogonalne do przetwarzania żądania HTTP.
Interfejs REST przez CherryPy
Usługa sieciowa RESTful implementuje każdą sekcję architektury CherryPy za pomocą następujących elementów -
- Authentication
- Authorization
- Structure
- Encapsulation
- Obsługa błędów
Poświadczenie
Uwierzytelnianie pomaga w weryfikacji użytkowników, z którymi się kontaktujemy. CherryPy zawiera narzędzia do obsługi każdej metody uwierzytelniania.
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)
Powyższa funkcja authentication () pomoże zweryfikować istnienie klientów lub użytkowników. Wbudowane narzędzia pomagają w systematycznej realizacji procesu.
Upoważnienie
Autoryzacja pomaga w utrzymaniu prawidłowości procesu za pośrednictwem identyfikatora URI. Ten proces pomaga również w morfowaniu obiektów przez leady tokena użytkownika.
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
})
Wbudowane narzędzia autoryzacji pomagają w systematycznej obsłudze procedur, o czym wspomniano w poprzednim przykładzie.
Struktura
Utrzymanie struktury API pomaga zmniejszyć obciążenie pracą związaną z mapowaniem URI aplikacji. Zawsze konieczne jest, aby API było wykrywalne i czyste. Podstawowa struktura API dla platformy CherryPy powinna mieć następujące cechy -
- Konta i użytkownik
- Autoresponder
- Contact
- File
- Folder
- Lista i pole
- Wiadomość i partia
Kapsułkowanie
Hermetyzacja pomaga w tworzeniu interfejsu API, który jest lekki, czytelny dla człowieka i dostępny dla różnych klientów. Lista elementów wraz z tworzeniem, pobieraniem, aktualizacją i usuwaniem wymaga hermetyzacji API.
Obsługa błędów
Ten proces zarządza błędami, jeśli występują, jeśli API nie działa zgodnie z określonym instynktem. Na przykład 400 oznacza błędne żądanie, a 403 oznacza nieautoryzowane żądanie.
Przykład
Rozważmy następujące przykłady błędów bazy danych, walidacji lub aplikacji.
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())
Powyższy kod wygeneruje następujący wynik -
Zarządzanie interfejsem API (interfejs programowania aplikacji) jest łatwe dzięki CherryPy dzięki wbudowanym narzędziom dostępowym.
Metody HTTP
Lista metod HTTP, które działają na zasobach, jest następująca -
S.Nr | Metoda i działanie HTTP |
---|---|
1. | HEAD Pobiera metadane zasobów. |
2. | GET Pobiera metadane i zawartość zasobów. |
3. | POST Żąda od serwera utworzenia nowego zasobu przy użyciu danych zawartych w treści żądania. |
4. | PUT Żąda od serwera zastąpienia istniejącego zasobu zasobem zawartym w treści żądania. |
5. | DELETE Żąda od serwera usunięcia zasobu zidentyfikowanego przez ten identyfikator URI. |
6. | OPTIONS Żąda od serwera, aby zwrócił szczegółowe informacje o możliwościach globalnie lub konkretnie w odniesieniu do zasobu. |
Protokół publikowania Atom (APP)
APP wywodzi się ze społeczności Atom jako protokół na poziomie aplikacji, będący uzupełnieniem protokołu HTTP, umożliwiający publikowanie i edycję zasobów internetowych. Jednostka komunikatów między serwerem APP a klientem jest oparta na formacie dokumentu XML Atom.
Protokół Atom Publishing Protocol definiuje zestaw operacji między usługą APP a agentem użytkownika przy użyciu protokołu HTTP i jego mechanizmów oraz formatu dokumentu XML Atom jako jednostki komunikatów.
APP najpierw definiuje dokument serwisowy, który dostarcza agentowi użytkownika identyfikatory URI różnych kolekcji obsługiwanych przez usługę APP.
Przykład
Weźmy przykład, aby pokazać, jak działa APP -
<?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 określa sposób wykonywania podstawowych operacji CRUD względem elementu członkowskiego kolekcji lub samej kolekcji przy użyciu metod HTTP zgodnie z opisem w poniższej tabeli -
Operacja | Metoda HTTP | Kod statusu | Zadowolony |
---|---|---|---|
Odzyskać | DOSTAĆ | 200 | Wpis Atom reprezentujący zasób |
Stwórz | POCZTA | 201 | Identyfikator URI nowo utworzonego zasobu za pośrednictwem nagłówków Location i Content-Location |
Aktualizacja | POŁOŻYĆ | 200 | Wpis Atom reprezentujący zasób |
Usunąć | USUNĄĆ | 200 | Żaden |