2015-11-19 3 views
2

Я заинтересован в добавлении API в существующее приложение rails. Я бы хотел, чтобы Application controller наследовал от ActionController :: Base и Api Controller, чтобы наследовать от ActionController :: API, чтобы ненужное промежуточное ПО не существовало на конечных точках APIRails-приложение с двумя различными базовыми (базовыми и API-интерфейсами)

Я могу добавить рельсы-api gem (я заблокирован на рельсах 4.2), и при необходимости отрегулируйте инициализатор параметров переноса, но регистрация идентификаторов сеансов в приложении rails ломается, когда это происходит.

Есть ли проблемы с использованием рельсов и рельсов-api? и Может ли применение рельсов иметь две разные базы?

Для обсуждения предположим, что я не могу просто создать отдельное приложение rails-api и вытащить бизнес-логику в драгоценные камни.

EDIT:

Что мы имеем:

ActionController::Base 
    \ ApplicationController 
     \ RailsControllers 
    \ ApiController 
     \ RailsAPIControllers 

Что мы хотели:

ActionController::Base 
    \ ApplicationController 
     \ RailsControllers 
ActionController::API 
    \ ApiController 
     \ RailsAPIControllers 

Я не уверен, есть ли фактическая разница, если база ActionController должна быть но в какой-то момент. Идея заключается в том, что RailAPIControlers будут легче, если они унаследованы от API ActionController, но это вызывает проблемы.

ответ

1

Натан,

Лучше всего создать ApiController, что все ваше API конечных точек унаследовать от только что делают JSON и заботиться о всех вашей сессии/Иденте вещи. Тогда вам не придется беспокоиться о поддержке какой-либо странности от обоих драгоценных камней.

Для api вы, скорее всего, захотите унаследовать от ActionController :: Base УБЕДИТЕСЬ, что ваш сеанс/до того, как материал action в api будет имитировать рельсы HTTP-запросов. Если более поздний случай наследуется от ApplicationController.

+0

См. Мое редактирование выше. Нам нужен ApiController независимо. Вопрос в том, где вы наследуете. –

+0

См. Комментарий, добавленный выше – Austio

0

Я сейчас нахожусь в одной лодке прямо сейчас, и как «упражнение» я создаю Rails Engine, чтобы отделить все логики API/маршруты/сериализаторы/спецификации и т. Д. От нашего основного приложения. Я просто хотел оправдаться, чтобы опробовать двигатели ...

Я только что начал, но есть некоторые явные преимущества и недостатки, которые я вижу уже против того, что у меня есть отдельные пространства имен для моих контроллеров и сериализаторов.

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

Недостаток, с которым я столкнулся, - это дублирование. На данный момент мне нужны фабрики для моих спецификаций, но я не нашел разумного способа использовать фабрики из родительского приложения. Пока что я просто заново создаю фабрики, которые мне нужны в движке. Я уверен, что есть лучший способ, я еще не понял этого.

Смежные вопросы