Александр Борисов, 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