Организация кода при использовании гема Grape

Александр Борисов, 28 сентября 2014

Для создания API в приложениях на Ruby on Rails я рекомендую использовать гем Grape. Он содержит DSL для описания запросов, из коробки поддерживает версионирование, автоматически отвечает на OPTIONS- и HEAD-запросы, отдаёт ответ с помощью замечательных презентеров из гема grape-entity.

Перед началом работы настоятельно рекомендую ознакомиться с подробной и хорошо написанной документацией. Со своей стороны постараюсь осветить несколько неочевидных моментов и поделиться приёмами при создании API на Grape.

В этой статье я расскажу про организацию кода при использовании гема Grape.

Эндпоинты API – это контроллеры

Методы 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.

Смотрите также


comments powered by Disqus
Блог Цифрономики

Мысли о веб-разработке на Ruby on Rails: работа с кодом, приёмы, инструменты, организация процесса разработки.

@cifronomika
RSS


Веб-разработка на Ruby on Rails, реализация сложных проектов
mailbox@cifronomika.ru
+7 (910) 535-99-11