2012-02-19 7 views
10

Kiedy użytkownik przesyła nieprawidłowe dane do mojego API (zwykle przez Javascript + JSON), zastanawiam się, który HTTP response code powinienem odpowiedzieć.Jeśli metoda REST API nie działa, czy powinienem zwrócić komunikat o stanie 200, 400 lub 500 HTTP?

Czy powinienem zwrócić odpowiedź HTTP 200 z błędami - czy mój serwer powinien odpowiedzieć błędem 400 lub 500, ponieważ żądanie nie powiodło się z powodu złych danych?

Wydaje się błędu 400 jest droga od „Klasa 4xx kod stanu jest przeznaczony dla przypadków, w których klient wydaje się, że popełnił błąd” - wikipedia

Jednak jedno pamiętać, jest to, że większość osób korzysta z ram jak jQuery, która wymaga, aby określić alternatywną oddzwanianie, gdy żądania AJAX reagować z dowolnym kodem statusu innego niż 200.

+2

400 jest "poprawny" sposób 200 jest "miły" sposób. Ty wybierasz. –

+0

możliwy duplikat [kodów stanu HTTP RESTU] (http://stackoverflow.com/questions/3290182/rest-http-status-codes) –

+0

Bardzo interesujące pytanie Obecnie zwracam pusty obiekt json, ale to prawdopodobnie nie jest w porządku, patrząc na kod odpowiedzi HTTP najbliższy powinien wynosić 400 (zły wniosek), zainteresowany czytaniem innych widoków na ten temat. – Dampsquid

Odpowiedz

7

400 Bad Request żądanie nie mogło być zrozumiane przez serwer z powodu źle sformułowana składnia. Klient NIE POWINIEN powtarzać żądania bez modyfikacji.

użycie statusCode w jquery ajax powołaniu:

<html> 
<head> 
<title>jquery testing</title> 
<script type="text/javascript" src="jquery-1.6.2.min.js"/>"></script> 
<script language="javascript"> 
$(document).ready(
    function(){ 
     $('#linkClick').click(
      function(){ 
        $.ajax({ 
         url: 'a.html', 
         data: {}, 
         type: 'get', 
         dataType: 'json', 
         statusCode: { 
          404:function() { alert("404"); }, 
          200:function() { alert("200"); }, 
          201:function() { alert("201"); }, 
          202:function() { alert("202"); } 
         }, 
         success: function(data) { 
          alert("Status: " + data); 
         } 
        }); 
       }); 
     } 
     ); 
</script> 
</head> 
<body> 
<a href="#" id="linkClick">click</a> 
</body> 
</html> 
+1

Wydaje się, że ciężko oczekiwać od klienta obsługi każdego kodu statusu. –

+1

Bardzo fajna odpowiedź klienta horaceman. Jednak, ponieważ @ Laurent, wydaje się mieć ważny punkt. Być może szczęśliwym medium pomiędzy poprawnym i realistycznym rozwiązaniem jest zaimplementowanie tylko kilku kodów statusu, które obejmują wszystkie bazy. 500, 400, 404 i 200 powinny wykonać to zadanie. Klient musi jedynie wdrożyć 400 i 200. 404 powinno zostać zauważone, zanim kod kiedykolwiek doprowadzi go do produkcji, a jeśli nie, lub jest faktyczny błąd serwera (500) przechwytywany przez domyślną procedurę obsługi błędów. – Xeoncross

+2

@ this.lau_ Nie musisz zajmować się każdym kodem błędu. Wystarczyłby prosty "kod! = 200". Ale przez większość czasu oczekiwałbym, że klient chciałby przekazać użytkownikowi znaczącą informację zwrotną. –

Powiązane problemy