Учебники

CherryPy – веб-сервисы

Веб-сервис – это набор веб-компонентов, которые помогают в обмене данными между приложением или системами, которые также включают открытые протоколы и стандарты. Он может быть опубликован, использован и найден в Интернете.

Веб-сервисы бывают разных типов, такие как RWS (RESTfUL Web Service), WSDL, SOAP и многие другие.

REST – представительский государственный трансферт

Тип протокола удаленного доступа, который передает состояние от клиента к серверу, который можно использовать для манипулирования состоянием вместо вызова удаленных процедур.

  • Не определяет какую-либо конкретную кодировку или структуру и способы возврата полезных сообщений об ошибках.

  • Использует HTTP “глаголы” для выполнения операций передачи состояния.

  • Ресурсы однозначно идентифицируются с помощью URL.

  • Это не API, а транспортный уровень API.

Не определяет какую-либо конкретную кодировку или структуру и способы возврата полезных сообщений об ошибках.

Использует HTTP “глаголы” для выполнения операций передачи состояния.

Ресурсы однозначно идентифицируются с помощью URL.

Это не API, а транспортный уровень API.

REST поддерживает номенклатуру ресурсов в сети и предоставляет унифицированный механизм для выполнения операций с этими ресурсами. Каждый ресурс идентифицируется как минимум одним идентификатором. Если инфраструктура REST реализована на основе HTTP, эти идентификаторы называются унифицированными идентификаторами ресурса (URI) .

Ниже приведены два общих подмножества набора URI:

Подмножество Полная форма пример
URL Унифицированный указатель ресурса http://www.gmail.com/
URN Единое имя ресурса urn: isbn: 0-201-71088-9 urn: uuid: 13e8cf26-2a25-11db-8693-000ae4ea7d46

Прежде чем разбираться в реализации архитектуры CherryPy, давайте сосредоточимся на архитектуре CherryPy.

CherryPy включает в себя следующие три компонента –

  • cherrypy.engine – Он управляет запуском / остановом процесса и обработкой событий.

  • cherrypy.server – настраивает и контролирует сервер WSGI или HTTP.

  • cherrypy.tools – Набор утилит, которые ортогональны обработке HTTP-запроса.

cherrypy.engine – Он управляет запуском / остановом процесса и обработкой событий.

cherrypy.server – настраивает и контролирует сервер WSGI или HTTP.

cherrypy.tools – Набор утилит, которые ортогональны обработке HTTP-запроса.

Интерфейс REST через CherryPy

Веб-сервис RESTful реализует каждый раздел архитектуры CherryPy с помощью следующего:

  • Аутентификация
  • авторизация
  • Состав
  • Инкапсуляция
  • Обработка ошибок

Аутентификация

Аутентификация помогает в проверке пользователей, с которыми мы взаимодействуем. CherryPy включает в себя инструменты для обработки каждого метода аутентификации.

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)

Вышеуказанная функция authenticate () поможет проверить существование клиентов или пользователей. Встроенные инструменты помогают выполнять процесс систематически.

авторизация

Авторизация помогает поддерживать работоспособность процесса через URI. Этот процесс также помогает преобразовывать объекты по токенам пользователей.

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
})

Как уже упоминалось в предыдущем примере, встроенные инструменты авторизации помогают систематически обрабатывать процедуры.

Состав

Поддержание структуры API помогает снизить нагрузку на отображение URI приложения. Всегда необходимо поддерживать доступность и чистоту API. Базовая структура API для фреймворка CherryPy должна иметь следующую структуру:

  • Аккаунты и Пользователь
  • Автоответчик
  • контакт
  • файл
  • скоросшиватель
  • Список и поле
  • Сообщение и Пакет

Инкапсуляция

Инкапсуляция помогает в создании API, который легок, удобочитаем и доступен для различных клиентов. Список элементов наряду с созданием, поиском, обновлением и удалением требует инкапсуляции API.

Обработка ошибок

Этот процесс обрабатывает ошибки, если таковые имеются, если API не выполняется на конкретном инстинкте. Например, 400 для плохого запроса и 403 для неавторизованного запроса.

пример

Рассмотрим следующее в качестве примера ошибок базы данных, проверки или приложения.

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())

Приведенный выше код выдаст следующий вывод:

Обработка ошибок

Управлять API (Application Programming Interface) легко с помощью CherryPy благодаря встроенным инструментам доступа.

Методы HTTP

Список методов HTTP, которые работают с ресурсами, выглядит следующим образом:

S.No HTTP метод и работа
1.

ГОЛОВА

Получает метаданные ресурса.

2.

ПОЛУЧИТЬ

Получает метаданные и контент ресурса.

3.

СООБЩЕНИЕ

Запрашивает у сервера создание нового ресурса с использованием данных, содержащихся в теле запроса.

4.

ПОЛОЖИЛ

Запрашивает у сервера заменить существующий ресурс на тот, который вложен в тело запроса.

5.

УДАЛЯТЬ

Запрашивает сервер на удаление ресурса, идентифицированного этим URI.

6.

ОПЦИИ

Запрашивает у сервера информацию о возможностях в глобальном или конкретном отношении к ресурсу.

ГОЛОВА

Получает метаданные ресурса.

ПОЛУЧИТЬ

Получает метаданные и контент ресурса.

СООБЩЕНИЕ

Запрашивает у сервера создание нового ресурса с использованием данных, содержащихся в теле запроса.

ПОЛОЖИЛ

Запрашивает у сервера заменить существующий ресурс на тот, который вложен в тело запроса.

УДАЛЯТЬ

Запрашивает сервер на удаление ресурса, идентифицированного этим URI.

ОПЦИИ

Запрашивает у сервера информацию о возможностях в глобальном или конкретном отношении к ресурсу.

Протокол публикации Atom (APP)

APP возникла из сообщества Atom как протокол уровня приложения поверх HTTP, позволяющий публиковать и редактировать веб-ресурсы. Блок сообщений между сервером APP и клиентом основан на формате XML-документа Atom.

Протокол публикации Atom определяет набор операций между службой APP и агентом пользователя, использующим HTTP и его механизмы, и формат XML-документа Atom в качестве единицы сообщений.

Сначала APP определяет служебный документ, который предоставляет агенту пользователя URI различных коллекций, обслуживаемых службой 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 определяет, как выполнять базовые операции CRUD для члена коллекции или самой коллекции, используя методы HTTP, как описано в следующей таблице: