我有一個具有一些標準路徑的Rails應用程序,並且我想向其中添加一些API端點。向Web應用程序添加一個小型API
我想我只需要添加一些路線(可能是下scope '/api'
),創建擴展ActionController::API
一些新的控制器,然後也許做一些事情使導軌神奇知道如何呈現JSON數據。
有沒有關於如何做到這一點的指導?我可以找到的所有關於創建「僅API」應用程序的討論,但不討論爲現有的Web應用程序添加一些API端點。
編輯:我專門找導軌5個解決方案
我有一個具有一些標準路徑的Rails應用程序,並且我想向其中添加一些API端點。向Web應用程序添加一個小型API
我想我只需要添加一些路線(可能是下scope '/api'
),創建擴展ActionController::API
一些新的控制器,然後也許做一些事情使導軌神奇知道如何呈現JSON數據。
有沒有關於如何做到這一點的指導?我可以找到的所有關於創建「僅API」應用程序的討論,但不討論爲現有的Web應用程序添加一些API端點。
編輯:我專門找導軌5個解決方案
「經典」或僅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的一部分。
在你config/routes.rb
添加下面的路線
然後在你控制器目錄名創建一個目錄v1
在然後創建一個控制器,你在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
隨機智慧的一個
看看這裏的一些建議:
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
使用類似
namespace :api, defaults: {format: 'json'} do
默認你的API控制器只渲染JSON。
您所描述的其餘部分是一個體面的實施,正是我們今天在生產中使用的。一些端點仍然是普通的rails,但是大多數API只是在客戶端MVC做繁重的工作時使用api json。這是從默認導軌應用程序遷移到客戶端MVC時的常見用例。
另一個好的方法是基於您創建的基本api控制器的api控制器,該控制器從應用程序控制器繼承。
上面的'ApiController'如何與我現有的'ApplicationController'一起生活?軌道如何知道看它? 編輯:是因爲'namespace'嗎? – Cechner
因爲您將您的api控制器設置爲從ApiController而不是ApplicationController繼承。在Rails中沒有什麼神奇的ApplicationController。它只是一個軌道生成器設置控制器繼承的類。我意識到我忘了在示例中添加'
max
哦,哇,我明白了,我想這可能是缺少的一塊......我現在在手機上,但今天晚些時候會回來,並關閉它,謝謝! – Cechner