2016-10-19 1 views
0

У меня есть приложение rails с некоторыми стандартными маршрутами, и я хотел бы добавить в него некоторые конечные точки API.добавление небольшого API в веб-приложение

Я полагаю, что мне просто нужно добавить несколько маршрутов (возможно, под scope '/api'), создать несколько новых контроллеров, которые расширяют ActionController::API, а затем, возможно, сделать что-то, чтобы рельсы волшебным образом знали, как визуализировать данные JSON.

Есть ли какие-либо руководства о том, как это сделать? Все, что я могу найти, говорит о создании приложений «только API», но не обсуждает добавление нескольких конечных точек API в существующее веб-приложение.

редактировать: Я специально искал рельсы 5 решений

ответ

2

Разница между «классическим» или только API-интерфейсом довольно мала. Приложение API только отбирает часть промежуточного программного обеспечения и компонентов, которые не нужны в API.

В противном случае шаги по созданию реальных компонентов API в значительной степени идентичны.

Вы должны начать с выбора другого суперкласса для ваших контроллеров API. Вашим API-контроллерам не нужен весь мусор на ApplicationController, и вы будете обрабатывать немало аспектов, таких как аутентификация по-разному.

Rails 5 имеет ActionController::API, в предыдущих версиях вы использовали бы ActionController::Metal и включали необходимые модули.

# app/controllers/api_controller.rb 
class ApiController < ActionController::API 
    # Do whatever you would do in ApplicationController 
end 

Вы затем настроить ваш маршруты:

namespace :api, defaults: { format: :json } 
    resources :things 
end 

и контроллеры:

module API 
    class ThingsController < ApiController 

    before_action :set_thing, except: [:create, :index] 

    def show 
     render json: @thing 
    end 

    def index 
     render json: @things = Thing.all 
    end 

    def create 
     @thing = Thing.create(thing_params) 

     if @thing.save 
     head :created, location: [:api, @thing] 
     else 
     render json: @thing.errors, status: :bad_entity 
     end 
    end 
    # ... 
    end 
end 

Есть немало аспектов построения API, такие как управление версиями и JSON сериализации стратегий и вас» найду много учебников по этому вопросу - просто не зацикливайся только на API.

+0

как «ApiController» выше живет рядом с моим существующим «ApplicationController»? Как рельсы знают, чтобы посмотреть на это? Редактировать: это из-за 'namespace'? – Cechner

+0

Поскольку вы устанавливаете свои контроллеры api для унаследования от ApiController вместо ApplicationController. В приложении «Резервное копирование» нет ничего волшебного в ApplicationController. Его просто класс, который генераторы рельсов устанавливают контроллеры, чтобы унаследовать их. Я понимаю, что я забыл добавить ' max

+0

oh wow я вижу, я думаю, что, возможно, это был недостающий кусок ... Im на моем телефоне сейчас, но вернемся к этому позже сегодня и закроем это, спасибо! – Cechner

1
  1. Решили на формате API (в данном случае мы будем использовать JSON)
  2. Выяснить, что конечные точки будут (например, позволяет сказать, вы создаете продукты создают конечную точку)
  3. Выбирают API обзорной и управление версиями схемы (в этом v1)
  4. в вас config/routes.rb добавьте следующие маршрутизирует

  5. Затем создайте каталог в вас контроллер имени каталога v1

  6. Затем создать контроллер в вашем в v1 каталоге, как один ниже

    #goes in routes 
    namespace 'v1', defaults: {format: 'json'} do 
        resources :products, only: [:create] 
    end 
    
    #controller 
    module V1 
        class ProductsController < ActionController::API 
    
        def create 
         #some code 
        end 
        end 
    end 
    

Случайные Мудростей

  • Еще один совет - подумать о своей конечной точке. s полностью как возможно. Я не знаю, планируете ли вы кого-то использовать этот API или если вы будете единственным человеком, который его использует, но подумайте о каждом конечном пункте с точки зрения того, что его будет потреблять; это сэкономит вам много времени на рефакторинг и редизайн.
  • Вы должны также изучить шаблон использования сериализаторов, чтобы помочь с вашим декорированием объектов, прежде чем подавать их на конечные точки.
  • Убедитесь, что вы думаете о том, как вы хотите обрабатывать ошибки, вы хотите, чтобы они не в состоянии тихо, вы хотите, чтобы дать корм обратно в потребителя и т.д. Что бы вы ни решили сделать просто убедитесь, что вы последовательны»

взгляд здесь несколько советов:

https://www.codementor.io/ruby-on-rails/tutorial/creating-simple-api-with-rails

https://www.airpair.com/ruby-on-rails/posts/building-a-restful-api-in-a-rails-application

+0

Это не отвечает на вопрос. Его просто некоторые случайные мудрости. – max

+0

Привет, спасибо, но это похоже на рельсы 4 (или, по крайней мере, меньше, чем на рельсы 5), и на самом деле не ссылаются на добавление API в существующее приложение – Cechner

+0

Да, я активно редактирую, жаль, что рельсы 5 комментариев не было там, когда Я начал отвечать. –

0

использовать что-то вроде

namespace :api, defaults: {format: 'json'} do

по умолчанию контроллеры API только делают JSON.

остальное, что вы описали, является достойной реализацией и именно то, что мы используем в производстве сегодня. некоторые конечные точки по-прежнему являются простыми рельсами, но большинство из них api json только с клиентской стороной MVC, выполняющей тяжелый подъем. это распространенный случай использования при переносе из приложений по умолчанию rails на клиентскую сторону MVC.

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

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