июля 2, 2010REST и Python: Введение для начинающих. Часть 1
«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-ресурсом, а также все его файлы и подкаталоги.
Продолжение следует...



Leave a Reply