Boroda aka Hamster (fantaseour) wrote,
Boroda aka Hamster
fantaseour

Category:

REST приложения

Попытался разобраться в том, что такое REST-приложение (Representational State Transfer), поскольку это название последнее время часто мелькает. Что-то просветление наступило не до конца.

Изложу тут для памяти как я это понял, буду благодарен, за комментарии по существу.

Cмысл понятия REST, в организации вызовов API в виде обращения к ресурсу (example.com/user/list), где ресурс представлен четким и ясным URI. Работа по протоколу HTTP, обращение к ресурсам стандартными методами HTTP: GET, PUT, POST, DELETE. Эти методы некоторым образом эквивалентны стандартным CRUD операциям с Базой данных:

GET = Read
PUT= Update
POST = Create
DELETE = Delete

Важно отличие от RPC (Remote Procedure Call): вместо вызовов процедур у нас URI. Мы вызываем процедуру посредством правильного URI, а дальше просто передаем данные.

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

Вот что я не понял, так это что такое чистый и канонический REST, потому, что обычно идет ремарка, что "Смотрите не спутайте чистый REST, и приложения, где через REST гоняется XML". И дальше обычно идет речь о Relaxed REST. Однако если этот XML содержит в себе команды на подобие RPC, то понятно почему, это не REST -- мы используем вместо API через URI все тот же старый вызов функций. А если там гоняются данные, или модные микроформаты? Короче в этом месте я недопонял.

По запросу GET приложение читает данные и отдает их в любом удобном виде -- HTML, XHTML, XML, микроформат.

Запросы POST (добавление) и PUT (обновление) могут содержать данные для записи в БД, например в XML.

Такое взаимодействие позволяет организовать как веб-сервис, так и обычный сайт. Более того такая организация URI, отлично ложится на популярную схему построения URI в MVC фреймворках (modul/action/param1/val1/param2/val2), как бы раскрывает этот подход на уровни URI. См. также постиннг Макса Лапшина.

Из имеющихся трудностей следует отметить, что в стандартной комплектации LAMP не умеет обрабатывать PUT и DELETE запросы и тут требуются доработки, которых я не знаю (обычно пишут: Вам надо сконфигурировать веб-сервер, но подозреваю, что только этим дело не обойдется).

Поэтому в нынешнем php-приложении POST работает, как PUT, POST и DELETE -- за троих то есть. Иногда роль DELETE играет GET, но это не очень правильно -- GET не должен менять состояние системы (хотя и тут есть нюансы -- счетчик статистики например, или параметры сессии).

Опять же авторизация -- нужно ли ее загонять в четкий REST или нет?

Материалы по теме

  1. Очень краткая статья в Википедии
  2. Просто, очень понятно и подробно: Designing RESTful Web Applications. Слайды Ben Ramsey с php | works, Atlanta, Sept 2007
  3. Микроформаты
  4. Блог под руководством Максима Россомахина о микроформатах
Tags: development, tech
Subscribe

  • Post a new comment

    Error

    default userpic

    Your reply will be screened

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 19 comments