HTTP Üstbilgisi veya Yanıt Gövdesi'ndeki dinlenme hatası mesajı?


84

İPhone ve Android istemcilere sunulan bir REST hizmetim var. Şu anda 200, 400, 401, 403, 404, 409, 500 vb. HTTP kodlarını takip ediyorum.

Sorum şu: Hatanın nedenini / açıklamasını / nedenini koymak için önerilen yer neresi? REST API'nin başlıkta her zaman böyle özel Nedene sahip olması daha mantıklı mı?

< HTTP/1.1 400 Bad Request - Missing Required Parameters.
< Date: Thu, 20 Dec 2012 01:09:06 GMT
< Server: Apache/2.2.22 (Ubuntu)
< Connection: close
< Transfer-Encoding: chunked

Yoksa JSON aracılığıyla Yanıt Gövdesi'nde olması daha mı iyi?

< HTTP/1.1 400 Bad Request
< Date: Thu, 20 Dec 2012 01:09:06 GMT
< Server: Apache/2.2.22 (Ubuntu)
< Connection: close
< Transfer-Encoding: chunked
< Content-Type: application/json
{ "error" : "Missing Required Parameters" }

6
Günümüzde, 'X-HTTP-Hata-Açıklaması: Gerekli parametreler eksik' gibi özel başlıklar eklemek yaygın bir uygulamadır.
andresz

Yanıtlar:


96

400.x hata kodları için HTTP belirtiminden alıntı yapmak:

4xx sınıfı durum kodu, istemcinin hata yapmış gibi göründüğü durumlar için tasarlanmıştır. Bir HEAD isteğine yanıt verme durumu dışında, sunucu, hata durumunun açıklamasını ve bunun geçici mi yoksa kalıcı bir durum mu olduğunu içeren bir varlık içermelidir. Bu durum kodları herhangi bir istek yöntemi için geçerlidir. Kullanıcı aracıları dahil edilen herhangi bir varlığı kullanıcıya GÖSTERMELİDİR.

Hata mesajını, JSON, düz metin, biçimlendirilmiş HTML veya kullanmak isteyebileceğiniz başka bir biçim gibi HTTP yanıtının gövdesine bir varlık olarak dahil etmek en iyi uygulamadır.


24

Vücutta hata detaylarının olması daha iyidir. Ayrıca, birçok (çoğu / neredeyse tümü, örneğin WSGI) sunucu ve istemci, hata kodunun adının değiştirilmesini desteklemez - bunları sabit çiftler olarak ele alın (örneğin, 400 her zaman "Kötü İstek" olur ve "Kötü İstek - Siz Kullanıcı Kimliğini Belirtmeyi Unuttum "). Bozulmasalar bile, belirli hata kodu için özel adınızı önemsemeyeceklerdir.


3

Hata bedene ait değildir. Uyarı başlığına aittir.

Uyarı genel HTTP başlığı, mesajın durumuyla ilgili olası sorunlar hakkında bilgi içerir.

Referans


3
Bunun için "resmi" bir başlık kullanmak güzel olurdu. Ancak, Warningadından da anlaşılacağı gibi hatalar için değildir. RFC (7234) şöyle der:> Bir hata durum kodu yerine bir uyarı kullanılması, bu yanıtları gerçek hatalardan ayırır.
Frans

1
Not: Uyarı başlığı yakında kullanımdan kaldırılacaktır; Daha fazla ayrıntı için Uyarı ( github.com/httpwg/http-core/issues/139 ) ve Uyarı: başlık ve bayat-ederken-yeniden doğrulama ( github.com/whatwg/fetch/issues/913 ) bölümlerine bakın.
Bizmarck
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.