«REST (сокр. англ. Representational State Transfer, «передача состояния представления») — подход к архитектуре сетевых протоколов, обеспечивающих доступ к информационным ресурсам. Был описан и популяризован в 2000 году Ройем Филдингом (Roy Fielding), одним из создателей протокола HTTP. Самой известной системой, построенной в значительной степени по архитектуре REST, является современная Всемирная паутина.» © Wiki

Характеристики REST

Для начала приведу краткий перечень некоторых основных аспектов REST:

  • Распределенная сеть взаимосвязанных и наделенных правами доступа документов, расположенных по всему миру на компьютерах пользователей. По словам Р. Филдинга «распределенная гипермедиа система».
  • Клиент-серверная архитектура.
  • Состояние сеанса не сохраняется на сервере. Каждый запрос, сделанный клиентом, должен содержать все необходимые сведения для обработки его веб-сервером. Предыдущие же запросы серверу знать не обязательно, что является одной из причин почему клиенты передают серверу «cookie» каждый раз при попытке доступа к ресурсу. HTTP-сессия длится ровно столько, сколько длится «запрос-ответ» между клиентом и сервером. (Для справки: в протоколах FTP и SSH, например, «общение» между клиентом и сервером может происходить более одного раза за сеанс, поэтому состояние сеанса хранится на сервере.)
  • Ресурсы. Так как REST решает проблемы управления «распределенной сетью документов», то единицей хранения является документ (ресурс). Статическая веб-страница является ресурсом, но согласно REST она должна быть динамически сгенерирована веб-приложением. В мире HTTP каждый ресурс имеет URL — уникальный идентификатор. Например, http://yandex.ru/yandsearch?text=python&lr=191 — может быть динамически создан поисковой системой после вашего запроса. В итоге ресурс однозначно определяется URL.
  • Представления. Когда вы запрашиваете ресурс из браузера, сервер должен вернуть его представление. В самом общем случае ресурс имеет только одно представление — файл на сервере. Однако веб-клиент может по-своему интерпретировать представление ресурса в зависимости от задачи.

REST-операции:

  • GET — получение представления запрашиваемого ресурса.
  • POST — изменение ресурса, чтобы привести его в соответствие с новым представлением.
  • PUT — создание нового ресурса из представления.
  • DELETE — удаление существующего ресурса.

HTTP: Реальный REST

Принципы REST являются общепринятыми, однако главным образом они реализованы в протоколе HTTP. Лучший способ понять это — практика. Напишем маленький локальный веб-сервер, который пока ничего не будет делать =) :

1
2
3
4
5
6
7
8
9
10
# -*- coding: UTF-8 -*-
from BaseHTTPServer import BaseHTTPRequestHandler, HTTPServer

def run(server_class=HTTPServer, handler_class=BaseHTTPRequestHandler):
    server_address=('', 1512)
    httpd=server_class(server_address, handler_class)
    httpd.serve_forever()

if __name__ == '__main__':
    run()

Запустите скрипт, теперь мы имеем доступ к веб-серверу http://localhost:1512 . Если порт 1512 уже занят, просто измените номер на любой свободный!

Скрипт управляет объектом HTTPServer, который прослушивает заданный порт на наличие HTTP-запросов. Каждый раз при запросе в браузере адреса http://localhost:1512, сервер будет обрабатывать его пока вы не «убьете»  скрипт. Каталог, из которого был запущен сервер, становится ДОСТУПНЫМ REST-ресурсом, а также все его файлы и подкаталоги.

Продолжение следует...

P.S. Статья про REST на Хабре (не моя =) )