2013-05-06 57 views
1

我使用rails創建REST api,並且我有一個簡單的問題,涉及到路由以及如何接受我的api請求。Rails route accetping http和json請求

在我的路線文件我有以下代碼:

namespace :api do 
    namespace :v1 do 
     resources :productOp, :path => "product", :defaults => { :format => 'json' } 
    end 
end 

有了這個代碼,如果我去的URL在Web瀏覽器:

http://localhost:3000/api/v1/product 

它工作正常。另一方面,它只接受json格式的帖子

如果我刪除了「:defaults => {:format =>'json'}」我無法在Web瀏覽器中打開相同的URL,我收到一個406 http消息,因爲它試圖找到我的#index HTML。

任何人都可以解釋爲什麼當我刪除「:defaults => {:format =>'json'}」? 我該如何製作一個接受http post請求和json的API?

爲了添加信息,我的控制器總是以json格式響應,因爲我包含在第一行的控制器「respond_to:json」中。

+0

您的操作是什麼樣的? – jason328 2013-05-06 17:46:10

回答

1

當你有默認的哈希值時,無論你是否指定,你都告訴rails默認使請求成爲JSON。通過刪除它,rails不會這樣做,所以當你嘗試自己導航到頁面時,rails會認爲它是一個HTML請求,如果你沒有處理它,那麼它會失敗。

忘記

在你的控制器動作,你可能不告訴軌,它也可以返回HTML。如果只會返回JSON然後軌道是正確的,不能正常工作,但要注意,它不說,它不能找到,你得到406不是404

試着這麼做:

respond_to do |format| 
    format.json { render json: @whatever } 
    format.html {} 
end 

然後,html將簡單地呈現您的索引視圖,並且json請求將返回您想要的任何JSON內容

+0

以及如何讓它接受http請求get/post和json? – Fernando 2013-05-06 17:53:16

+0

對不起,只是編輯,包括:) – PaReeOhNos 2013-05-06 17:55:12

+0

謝謝,但它沒有工作,如果我這樣做,我收到一個模板丟失的消息...它試圖查看視圖文件夾,當我做我的請求,而不是顯示json – Fernando 2013-05-07 18:58:28