Как создать REST API на основе Catalyst

Введение

Что такое REST

REST — это принцип построения архитектуры программного обеспечения. Используется при разработке веб-сервисов.

 

Что такое REST API

REST API — это набор функций, к которым могут обращаться разработчики. Используя HTTP-протокол, разработчик отправляет запрос и получает ответ. Как правило, данные передаются в одном из форматов: HTML, XML или JSON.

Запрос данных. Клиент обращается к веб-сервису, используя специальный URL. URL содержит все необходимые серверу данные, для однозначной идентификации запрашиваемого объекта. Методы HTTP-протокола используются для передачи информации о том, что мы хотим сделать с указанным объектом.

Например:

  • GET /articles — получить список всех публикаций
  • GET /article/1236 — получить из хранилища публикацию под номером 1236
  • PUT /article — добавить новую статью (данные в теле запроса)
  • POST /article/1236 – изменить статью (данные в теле запроса)
  • DELETE /article/33 – удалить публикацию

 

Создаем REST API на основе Catalyst

Краткое описание

Для реализации REST-сервиса мы будем использовать специальный модуль Catalyst::Controller::REST, который значительно упрощает разработку соответствующих web-сервисов.

Catalyst::Controller::REST вмешивается в процесс диспетчеризации поступающих запросов.

Принцип диспетчиризации поступающих запросов изменяет добавление атрибута :ActionClass(‘REST’) к объявлению Catalyst action (м.б. кто-нибудь подскажет русскоязычный аналог этого термина?).

Например, если при объявлении метода article указан :ActionClass(‘REST’)

то в дальнейшем, при обращении клиента по адресу /article методом GET, Catalyst будет передавать
управление обработчику article_GET, если использован метод POST, то обработчику article_POST. Если соответствующий обработчик не найден — Catalyst вернет клиенту ответ со статусом — 405 (Method Not Found).

Другой вариант объявления метода, который будет вызываться для обработки запроса GET /article

Если ответ со статусом 405 не нравится, и хочется отправить клиенту что-то особенное, можно переопределить метод, который вызывается для ответа в случае ошибки, и задать ему желаемое поведение:

 

Практическая реализация REST API на основе Catalyst. Примеры кода

Каркас приложения у нас уже создан. См. «Как создать Catalyst-приложение с нуля».

Теперь добавим модули, которые еще не установлены, но понадобятся для создания REST API.

Создаем новое представление

Первый аргумент — название создаваемого представления, второй — название модуля, который мы наследуем при создании представления. Можно создавать представление, давая ему любое имя, например:

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

Для работы мы будем использовать уже знакомую БД test (см. дамп БД) и таблицу статей.

API — это не только REST. Поэтому, для всех возможных API, я создаю отдельный каталог в директории Controller. Внутри API создаю каталог REST. Там будут все модули, которые отвечают за выполнение запросов.

 

Модуль /lib/MyApp/Controller/API/REST.pm

 

Модуль /lib/MyApp/Controller/API/REST/Articles.pm

Все данные клиенту будут возвращаться в JSON-формате.

 

Представление /lib/MyApp/View/JSON.pm

В представление нужно добавить обработчик «process»:

 

Проверяем работоспособность REST-сервисов

Для тестирования REST-сервисов использовала RESTClient — специальный плагин для Firefox. Очень удобно, рекомендую.

Чтобы получить список статей, надо в адресной строке web-клиента указать:

и выполнить запрос методом GET.

Чтобы отправить PUT запрос с данными, нужно передавать данные через поле «Request Body», в JSON-формате. Например:

Примечание: Если REST API используется для внутренних нужд, можно ограничить доступ к нему настройками сервера. Если web-сервис должен быть доступен внешним клиентам, необходимо ввести для клиентов этапы авторизации и аутентификации.

 

Похожие публикации на блоге программиста

Как создать Catalyst-приложение с нуля

Работа с атрибутами Path, CaptureArgs, Args, Local, Global и Private в Catalyst

Команды Curl для отправки запросов методами GET, PUT, POST, DELETE

 

Полезные ссылки по теме «Perl, Catalyst и REST-сервисы»

habr.ru: Архитектура REST

Руководство по использованию REST API Mail.ru

search.cpan.org: Catalyst::Controller::REST

 

Как создать REST API на основе Catalyst: 1 комментарий

  1. Владимир

    Статья интересная, хотя перлом я не интересуюсь (теперь «почти не интересуюсь»). Не совсем было понятно для чего все это делается и какой профит ожидается — об этом, возможно, стоит дописать тут:
    «REST API — это набор функций, к которым могут обращаться разработчики. Используя HTTP-протокол, разработчик отправляет…»

    Есть примеры, но хотелось бы узнать о том, где лично Вы применяли это на практике (если применяли) — это было бы интересно.

    Про то, зачем все это нужно, в целом написано на хабре (правильную ссылку я нашел в этой статье).

    Пока читать статью, гуглил и нагуглил интересных ссылок:

    1 описано что такое REST и зачем оно нужно безо всяких перлов/пхп и прочих / http://habrahabr.ru/post/46032/
    2 REST на php (пример использования фрэймворка Phalcon, пример мне очень понравился) / http://docs.phalconphp.ru/ru/latest/reference/tutorial-rest.html
    3 Phalcon на хабре / http://habrahabr.ru/post/160311/
    4 Цикл статей по C++ REST SDK (Casablanca) на MSDN / http://msdn.microsoft.com/en-us/library/jj969455.aspx

Обсуждение закрыто.