我有一個「軟件即服務」應用程序,它使用JSON通過RESTful API進行通信。如何在基於JSON的RESTful代碼中處理異常?
簡單地說:在JSON數據交換中使用RESTful API時捕獲和報告異常的最佳實踐是什麼?
我的第一個想法是通過生成一個腳手架來了解Rails的功能,但這顯然是不正確的。下面是一個摘錄:
class MumblesController < ApplicationController
# GET /mumbles/1
# GET /mumbles/1.json
def show
@mumble = Mumble.find(params[:id])
respond_to do |format|
format.html # show.html.erb
format.json { render json: @mumble }
end
end
end
在這種情況下,如果代碼JSON發送一個不存在的ID,例如
http://www.myhost.com/mumbles/99999.json
然後Mumble.find()會引發ActiveRecord :: RecordNotFound。 ActionController將捕獲並在HTML中呈現錯誤頁面。但對於期待JSON的客戶端而言,HTML是無用的。
我可以通過將Mumble.find()包裝在begin ... rescue RuntimeError
塊中並呈現JSON狀態=>:unprocessable_entity或其他東西來解決該問題。
那麼是什麼,如果客戶端的應用程序發送一個無效的路徑,例如:
http://www.myhost.com/badtypo/1.json
是一個JSON基於應用程序應該趕上和JSON返回一個錯誤?如果是這樣,我可以在沒有深入研究ActionDispatch的情況下將其捕獲到哪裏?
因此,總體而言,如果出現錯誤,我是否會放下並讓ActionController生成HTML?這感覺不對......
小心:至少在導軌4,在'rescue_from'匹配的順序是顛倒*從*'定期rescue':如果你想爲一個子類對不同的行爲它的父類,把子類*放在父類後面: - /' – AlexChaffee 2016-07-12 15:38:04