2016-10-19 35 views
0

我有一個具有一些標準路徑的Rails應用程序,並且我想向其中添加一些API端點。向Web應用程序添加一個小型API

我想我只需要添加一些路線(可能是下scope '/api'),創建擴展ActionController::API一些新的控制器,然後也許做一些事情使導軌神奇知道如何呈現JSON數據。

有沒有關於如何做到這一點的指導?我可以找到的所有關於創建「僅API」應用程序的討論,但不討論爲現有的Web應用程序添加一些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繼承。在Rails中沒有什麼神奇的ApplicationController。它只是一個軌道生成器設置控制器繼承的類。我意識到我忘了在示例中添加' max

+0

哦,哇,我明白了,我想這可能是缺少的一塊......我現在在手機上,但今天晚些時候會回來,並關閉它,謝謝! – Cechner

1
  1. (在這種情況下,我們會使用JSON)決定了一個API格式
  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 
    

隨機智慧的一個

  • 還有一些建議是嘗試考慮你的終點儘可能地完成 。我不知道你是否打算讓某人使用這個API,或者如果你是唯一使用它的人,但是從消費它的角度考慮每個終點。這將爲您節省大量的重構和重新設計時間。
  • 您還應該考慮使用序列化程序幫助 與對象修飾,然後將它們提供給您的端點的模式。
  • 請確保您考慮如何處理錯誤,你是否希望他們默默地失敗,你是否想要反饋給消費者等 。無論你選擇做什麼只是確保你是 consistant'

看看這裏的一些建議:

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。

您所描述的其餘部分是一個體面的實施,正是我們今天在生產中使用的。一些端點仍然是普通的rails,但是大多數API只是在客戶端MVC做繁重的工作時使用api json。這是從默認導軌應用程序遷移到客戶端MVC時的常見用例。

另一個好的方法是基於您創建的基本api控制器的api控制器,該控制器從應用程序控制器繼承。

相關問題