2012-02-19 26 views
10

Khi người dùng gửi dữ liệu không hợp lệ đến API của tôi (thường thông qua Javascript + JSON), tôi tự hỏi mình có HTTP response code Tôi nên trả lời bằng.Nếu phương pháp REST API không thành công, tôi có nên trả lại thông báo trạng thái HTTP 200, 400 hoặc 500 không?

Tôi có nên trả lại phản hồi HTTP 200 có lỗi hay máy chủ của tôi phản hồi với lỗi 400 hoặc 500 vì yêu cầu thực sự không thành công do xác thực của tôi do một số dữ liệu xấu?

Nó có vẻ như một lỗi 400 là con đường để đi từ "Lớp 4xx của mã trạng thái được thiết kế đối với trường hợp trong đó các khách hàng dường như đã sai lầm" - wikipedia

Tuy nhiên, có một điều cần lưu ý là hầu hết mọi người sử dụng một khung như jQuery yêu cầu bạn chỉ định một cuộc gọi lại khác khi yêu cầu AJAX phản hồi với bất kỳ mã trạng thái nào khác ngoài 200.

+2

400 là "đúng" cách, 200 là "lịch sự" cách. Bạn chọn. –

+0

có thể trùng lặp của [mã trạng thái HTTP REST] (http://stackoverflow.com/questions/3290182/rest-http-status-codes) –

+0

Câu hỏi rất thú vị hiện tại tôi trả về một đối tượng json trống nhưng điều đó có lẽ không đúng, nhìn vào mã phản hồi HTTP gần nhất sẽ có đường nối là 400 (yêu cầu không hợp lệ), Quan tâm để đọc những người khác xem trên trang này. – Dampsquid

Trả lời

7

400 Yêu cầu không hợp lệ Yêu cầu không thể được máy chủ hiểu cú pháp không đúng định dạng. Khách hàng KHÔNG NÊN lặp lại yêu cầu mà không sửa đổi.

sử dụng statusCode trong jquery ajax gọi:

<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

Dường như mong đợi khách hàng xử lý mọi mã trạng thái đơn lẻ. –

+1

Rất tốt đẹp khách hàng trả lời horaceman. Tuy nhiên, kể từ @Laurent, dường như có một điểm hợp lệ. Có lẽ một phương tiện vui vẻ giữa chính xác và thực tế là chỉ thực hiện một số mã trạng thái bao gồm tất cả các cơ sở. 500, 400, 404 và 200 nên thực hiện công việc. Khách hàng chỉ cần triển khai 400 và 200. 404 cần được chú ý trước khi mã này đưa vào sản xuất và nếu không, hoặc có lỗi máy chủ thực sự (500) bị trình xử lý lỗi mặc định bắt. – Xeoncross

+2

@ this.lau_ Bạn không cần xử lý mọi mã lỗi. Một 'code! = 200' đơn giản là đủ. Nhưng hầu hết thời gian tôi mong đợi khách hàng muốn cung cấp phản hồi có ý nghĩa cho người dùng. –

Các vấn đề liên quan