Александр Борисов, 28 сентября 2014
Для создания API в приложениях на Ruby on Rails я рекомендую использовать гем Grape. Он содержит DSL для описания запросов, из коробки поддерживает версионирование, автоматически отвечает на OPTIONS- и HEAD-запросы, отдаёт ответ с помощью замечательных презентеров из гема grape-entity.
Перед началом работы настоятельно рекомендую ознакомиться с подробной и хорошо написанной документацией. Со своей стороны постараюсь осветить несколько неочевидных моментов и поделиться приёмами при создании API на Grape.
В этой статье я расскажу про организацию кода при использовании гема Grape.
Методы API – это, фактически, методы контроллеров. Поэтому положим исходники нашего API в app/controllers/api
:
app/ controllers/ api/ v1/ base_api.rb cities_api.rb v1.rb api.rb
Версии API подключим в файле app/controllers/api.rb
, а сам api.rb
подключим в роутах к нужному нам пути:
Каждую версию API опишем в отдельном файле:
В файле версии API удобно определять общие для всей версии обработчики ошибок.
API-контроллеры удобно наследовать от общего класса-предка Api::V1::BaseAPI
. В нём можно определять общие методы и исключения.
Если необходимо, используем пространства имён для вложенных сущностей:
app/ controllers/ api/ v1/ cities/ places_api.rb base_api.rb cities_api.rb v1.rb api.rb
Обратите внимание на хелпер Api::V1::CityHelper
:
С помощью этого хелпера удобно единообразно получать доступ к нужному экземпляру City
внутри API.
Тесты раскладываем аналогично структуры каталогов с API. Код тестов пишем согласно документации гема.
spec/ controllers/ api/ v1/ cities/ places_api_spec.rb cities_api_spec.rb
В следующей статье я расскажу про аутентификацию и авторизацию при построении API на Grape.
Мысли о веб-разработке на Ruby on Rails: работа с кодом, приёмы, инструменты, организация процесса разработки.
Веб-разработка на Ruby on Rails, реализация сложных проектов
mailbox@cifronomika.ru
+7 (910) 535-99-11