2010-07-29 16 views
10

JSON API arabirimi içeren bir Rails uygulamasına sahibim. Değerler doğru bir şekilde belirtildiğinde, denetleyici, mutlu yolu iyi işleyebilir ve JSON çıktı olarak işlenir.Rails REST API'mdaki hataları veya hatalı istekleri nasıl ele alırım?

Ancak, girişte bir sorun varsa, bir istisna kaldırılır ve bunun yerine rescues numaralı şablonlar oluşturulur. Ben sadece { "error": { "msg": "bad request", "params": ... } } ve uygun HTTP durum kodları boyunca bir JSON hatası döndürmek istiyorum (örneğin, kimliği doğrulanmamışsa 403). Ama ben sadece bunun example.com/api/...'daki herhangi bir şeye karşı isteklere uygulanabilir olmasını istiyorum.

Bunu nasıl yapabilirim?

cevap

4

api denetleyicinizde bir around_filter'a ne dersiniz? Ben de hata türüne bağlı olarak birden kurtarmaları olabilir,

around_filter :my_filter 

private 
def my_filter 
    begin 
    yield 
    rescue 
    render :js => ... 
    end 
end 
13

gibi bir şey ben de benzer durum vardı, ama yöntem belirli hataları gerekli çünkü ayrı ayrı bireysel API yöntemini kurtarıldı. Ben hata kurtarma çünkü ben açıkça hoptoad API çağrısı için gerekli benim API kontrolörü

def some_method 
    ## do stuff 
rescue 
    error(500, method_specific_error_code, "it all done broke") 
    ## additional error notifications here if necessary. 
end 

yılında Sonra

def error(status, code, message) 
    render :js => {:response_type => "ERROR", :response_code => code, :message => message}.to_json, :status => status 
end 

: başvurum denetleyicisi

, ben bir yöntem vardı. Umarım bu yardımcı olur

def render_404 
    error(404, 404, "Unknown method") 
end 

:

işlemek için kimlik doğrulaması, 404 hatalarına kurtarmak için login_required

def login_required 
    error(403, 403, "Not Authenticated") unless authenticated 
end 

Ve bir before_filter vardı!

+0

Farklı eylemler için de özel hatalar oluşturmanın en iyi yolu bu şekilde sizinle aynı fikirdeyim –

+0

Sadece bir not, ancak bunu yerine render: json => {...} 'yerine render : js => {...} ' –

İlgili konular