簡體   English   中英

Rails REST API並在同一應用程序中使用

[英]Rails REST API and consuming in the same application

我已經閱讀了許多有關創建和使用REST API的文章,但是我還沒有找到任何有關如何在單個應用程序中進行操作的有用文檔。

我以前在Rails上有一個完整的MVC應用程序,但是我們決定將其更改為使用REST API為其他開發提供數據,但是我們不確定如何做到。 我們所做的是創建一個內部帶有API控制器的api / v1 /文件夾結構。

我們有一個非常簡單的控制器來測試:

class Api::V1::ProductsController < ApplicationController
  def list
    @products = Product.limit(100)
    render json: @products, status: 200
  end
end

在我的路線文件中,我具有以下內容:

namespace :api do
  namespace :v1 do
    scope '/products' do
      get '/list' => 'products#list'
    end
  end
end

當我啟動服務器並訪問http:// localhost:3000 / api / v1 / products / list時,它可以按預期工作。

但是現在,我試圖從同一個應用程序中使用它,所以我還有另一個ProductsController,其代碼如下:

class ProductsController < ApplicationController
  include HTTParty 
  base_uri "http://1ocalhost:3000/api/v1/products"     
  format :json

  def index
    @products = self.class.get("/list?category_id=22"))
  end
end

當我嘗試獲取該路由時,它將在服務器控制台中顯示以下內容:

Started GET "/" for 127.0.0.1 at 2017-05-08 11:58:30 -0400
Processing by ProductsController#index as HTML
Started GET "/api/v1/products/list?category_id=22" for 127.0.0.1 at 2017-05-08 11:58:31 -0400
Completed 500 Internal Server Error in 120213ms (ActiveRecord: 2.9ms)

Net::ReadTimeout (Net::ReadTimeout):

但是,在引發錯誤之后,請求將在后台正確完成。

我想先知道這是否是正確的方法,其次,如果我在同一台服務器上並且已經測試了使API正常工作,為什么我會超時呢?

提前非常感謝您。

如果我在同一台服務器上並且已經測試了使API正常工作,為什么會出現超時?

正是因為您在同一個[單線程開發]服務器中。 您已經在處理請求中。 所有容量耗盡。

不應該在對自身進行遠程調用上浪費資源。 除了使您的代碼更加資源枯燥和脆弱之外,這還能實現什么? 現在本來可以是一個簡單的數據庫請求的是同一數據庫請求和一個http請求。

從前端查詢(javascript /瀏覽器)完全是另一回事。 但是在服務器上-不要這樣做。 如果您擔心代碼重復,則將查詢提取到QueryObject(或其他任何對象)中,並從api控制器和應用程序控制器中使用它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM