Как создать 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

 

One thought on “Как создать REST API на основе Catalyst

  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

    Reply

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*