'İstek sınırına ulaşıldı' için önerilen HTTP REST durum kodu


43

Bir kısmı REST servisi için bir spesifikasyon hazırlıyorum, bunun bir kısmı kullanıcıları hizmet genelinde ve kaynak gruplarında veya bireysel kaynaklarda kısma yeteneğini içerecek. Aynı şekilde, bunlar için zaman aşımları kaynak / grup / hizmet başına yapılandırılabilir.

Sadece HTTP 1.1 spesifikasyonunu inceliyorum ve bir isteğin yerine getirilmeyeceği için bir müşteriyle nasıl sınırlandırılacağına karar vereceğim.

Başlangıçta 403 - Forbidden, teknik özelliklerden müşteri kodunun tek olduğunu düşündüm , ancak bu:

Yetkilendirme yardımcı olmaz ve istek tekrar edilmemelidir

beni rahatsız etti.

Aslında 503 - Service Unavailablekullanımı daha iyi bir şey gibi görünüyor - çünkü Retry-Afterbaşlık kullanarak yeniden deneme zamanının iletişimini sağlıyor .

Gelecekte, e-Ticaret yoluyla daha fazla talep almayı 'satın almayı' desteklemeyi düşünebilirim (bu durumda, müşteri kodu 402 - Payment Requiredsonuçlandırılmışsa bu iyi olurdu !) - ama bunun da 503'lük bir yanıtla eşitlenebileceğini düşünüyorum.

Hangisini kullanmam gerektiğini düşünüyorsun? Yoksa düşünmediğim başka biri var mı?

Yanıtlar:


77

429 Çok Fazla İstek

Kullanıcı, belirli bir süre içinde çok fazla istek gönderdi. Hız sınırlama şemaları ile kullanım için tasarlanmıştır. Bu kod RFC 6585 Ek HTTP Durum Kodlarında kabul edilmiştir .

http://i.stack.imgur.com/Y84Lj.jpg

   The 429 status code indicates that the user has sent too many
   requests in a given amount of time ("rate limiting").

   The response representations SHOULD include details explaining the
   condition, and MAY include a Retry-After header indicating how long
   to wait before making a new request...

   Note that this specification does not define how the origin server
   identifies the user, nor how it counts requests.  For example, an
   origin server that is limiting request rates can do so based upon
   counts of requests on a per-resource basis, across the entire server,
   or even among a set of servers.  Likewise, it might identify the user
   by its authentication credentials, or a stateful cookie.

   Responses with the 429 status code MUST NOT be stored by a cache...

Harika sesler - Aklımda tutacağım! Bedava kedilerle birlikte mi geliyor? Yoksa protokolün bir uzantısı mı?
Andras Zoltan

3
HTTP Durum kedileri - tüm durum ihtiyaçlarınız için: flickr.com/photos/girliemac/sets/72157628409467125
Sean McMillan

1
Büroda çok fazla kahkaha ve alkışa yol açtı - dahi!
Andras Zoltan

Sonunda bir 429 ile gittim - taslak spesifikasyonda ama bunun başka bir şey için kullanılacağından cidden eminim.
Andras Zoltan

7

Bir dereceye kadar, kodları ile istediğiniz şeyi yapmakta özgürsünüz, ancak hiç kimse bir şeyleri kırdığınızdan şikayet etmeden , kullanabileceğinizi 503veya istersen kabul edersiniz 402.

Düzenleme: Bir temizlikçi 503 ile başlamanız gerektiğini söyleyebilir, sonra da ödeme yapmanız mümkün olduğunda bir kez geçiş yapabilirsiniz.


Yorumlarda buna mükemmel bir ektir:

4xx, istemci tarafından belirli bir işlem gerçekleştirerek düzeltebilecekleri bir hatayı gösterirken, 5xx sunucuda istemcinin çözmesine yardımcı olamayacağı bir sorunu gösterir. Bu durumda, 4xx daha uygundur, çünkü (i) sunucu tam olarak gerektiği gibi davranır ve (ii) müşteri hatayı yavaşlatarak veya daha fazla kredi alarak "düzeltebilir". Kesin çözünürlük 429 cevabının gövdesinde gösterilebilir. - Mike Chamberlain 7 saat önce


503! 503! 503! Sınıra ulaştı, bir sonraki çağrı yasaklandı. Sade ve basit ...
yannis

@YannisRizos: Ah, ama ödeme yapıldıktan sonra yasak değil!
Marcin

1
Hata kodu, tek isteğin sonucunu temsil eder. Ödeme yapıldıysa, daha sonra bir talep üzerine her zamanki gibi iş yapılıyor ... Davranışı belgeliyorsanız, benim için sorun değil. Ya da bir hata mesajı ile sadece 200 döndürürsünüz. Ama bu hoş değil. Bazıları iş mantığı için HTTP hata kodları kullanarak söylese de, pek hoş değil. Eh, ben şahsen 503 ile gitmek istiyorum, şu anda hizmet mevcut değil - elbette 402'ye kadar desteklenir.
yannis,

@YannisRizos (& Marcin) - Yorumlarınız için teşekkürler - En iyisinin 503 olduğunu düşündüm; Ayrıca, RESTful bir nitelikteki uygulamaların HTTP durum kodlarını kullandıkları zaman yünlü davranma sıkıntısı yaşayabileceğini de anlayın. Bu konudaki kişisel bakış açım, uygun olmadıkça protokolün sağladığı şeyleri kullanmaktır (ki bu çok nadir görülür). Bu durumda, kesinlikle yapar!
Andras Zoltan

5
4xx, istemci tarafından belirli bir işlem gerçekleştirerek düzeltebilecekleri bir hatayı gösterirken, 5xx sunucuda istemcinin çözmesine yardımcı olamayacağı bir sorunu gösterir. Bu durumda, 4xx daha uygundur, çünkü (i) sunucu tam olarak gerektiği gibi davranır ve (ii) müşteri hatayı yavaşlatarak veya daha fazla kredi alarak "düzeltebilir". Kesin çözünürlük 429 cevabının gövdesinde gösterilebilir.
Mike Chamberlain,
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.