“Plan sınırı aşıldı” yanıtı için önerilen HTTP durum kodu


24

Kullanıcıların her zaman birkaç "plandan" birinde olduğu bir proje için bir REST API tasarlıyorum - her plan, bir hesabın sahip olabileceği maksimum kullanıcı sayısı veya yükleyebilecekleri maksimum veri sayısı gibi bazı kaynak sınırlarını tanımlar. Bu sınırlardan birine ulaşıldığında, kullanıcılar daha fazla kaynak elde etmek için planlarını yükseltebilir (temelde ödeme yaparlar).

Hesap kaynak limitleri nedeniyle eylemin gerçekleştirilemediği bir durumu belirten özel bir durum kodu döndürmek istiyorum ve planın yükseltilmesi sorunu çözecektir - örneğin bir kullanıcı depolama kapasitesinin% 100'ünü kullanıyorsa ve ek bir dosya yüklemeyi denerse , bu cevabı alacaklar.

Adaylar, IMHO:

  • 403 Forbidden - ancak, bu dava ile kullanıcının bu işlemi yapma izninin olmadığı diğer davaları ayırt etmek istiyorum.

  • 401 Unauthorized - iyi bir fikir değil, bunu kimlik doğrulama ile ilgili sorunlar için kullanıyoruz.

  • 402 Payment Required - biraz mantıklı ama standart dışı ancak ayrılmış bir durum kodu kullanmak konusunda endişeliyim

  • 423 LockedGelecekte başka bir şey için kullanmayacağımız gibi , daha az standart bir şey

Diğer bir seçenek de 403, cevap gövdesindeki hatanın özelliklerini belirtmek gibi çok standart bir şeyle gitmektir .

Hangi yaklaşımın (a) uzun vadede en iyi şekilde çalışacağına ve (b) RESTful ilkelerine daha iyi davranacağına inandığınızı merak ediyorum.


1
HTTP 507 Yetersiz Depolama Var.
CodesInChaos

RFC4331 alakalı olabilir, WebDAV için kota sınırları hakkında.
CodesInChaos

@CodesInChaos bu bir 5xx hatası olmamalı ve depolama sadece bir örnekti (gerçek proje aslında depolama ile ilgili değil, sadece iyi bir benzetmeydi).
shevron

HTTP 429 Çok Fazla İstek yanıt durumu kodu, kullanıcının belirli bir süre içinde çok fazla istek gönderdiğini gösterir
ExtractTable.com

Yanıtlar:


17

Bence 403 tek makul cevap, 405 Metoduna İzin Verilmiyor veya 409 Çatışma kabul edilebilir olsa da, 403 kadar iyi olduğunu sanmıyorum.

Sunucu isteği anladı, ancak yerine getirmeyi reddediyor. Yetkilendirme yardımcı olmaz ve istek tekrar edilmemelidir. İstek yöntemi HEAD değilse ve sunucu isteğin neden yerine getirilmediğini açıklamak istiyorsa, kuruluştaki reddin nedenini açıklamalıdır.

Bir 403 hatası verirseniz, kaynağın neden reddedildiğine dair bazı bilgiler içerir - geçersiz izin yalnızca en yaygın durumdur, limit aşımı çok farklı değildir - limitiniz aşıldığı için izniniz yoktur.


22

403'ün yanlış olduğuna inanıyorum, çünkü 403 kaynağa erişemediğiniz durumlar içindir ve erişimin hiçbir yolu yoktur. Müşterileriniz için belli ki erişmenin bir yolu var: Öde.

401 gerçekten yanlıştır, çünkü sadece kimlik doğrulama için kullanıyorsunuz değil, bunun için de var.

Bir API yazdığınız için, başka birinin API'yi kullanan kod yazması gerektiğini ve o kişinin API spesifikasyonunuzu okuması gerektiğini varsayalım. 429 "Çok fazla istek" ile gidebilirsiniz. Genellikle oran sınırlaması için tasarlanmıştır (örneğin bir müşterinin günde 100 talepte bulunabileceği durumlarda), ancak durumunuz için makul olarak geçerlidir. Bence 402 (Ödeme gerekli) de kabul edilebilir. Kullanıcıların API'nizi kullanmak için hangi araçları kullanmasını beklediğinize bağlı olarak değişir. 429, akıllı bir aletin dakikada / saatte / günde daha az istek göndermeye çalışacağı ve asla başarılı olamadığı riskini taşıyor.

BTW'ye göre https://tools.ietf.org/html/rfc6585 429 hatası ayrıca sorunun mahiyetini açıklayan bir html mesajı içermelidir, bu nedenle, eğer tedarik ederseniz, sorunun gerçekten ne olduğunu söyleme olasılığı oldukça yüksektir. cevabındaki bu bilgi.


1
402bir seçenek ancak 429gelecekte ekleyeceğimiz gerçek sınırlama amaçları için rezerv ayırmayı tercih ediyorum
shevron

Google daha çok sevdiğim halde kullanıyor403 gibi görünüyor 429. Bazı garip şeyler yapan http istemcilerinin bazı özel uygulamalarını gördüm 401ve 403(örneğin, bir web sitesinden, api'den 401 veya 403 varsa, kullanıcının oturumu kapatması).
Cristian Vrabie

0

WebDAV, bunun için HTTP 507 Yetersiz Depolama kullanır ve diğer tür depolama sınırlamalarından ayırmak için istek gövdesinde aşılan kota için ek bir hata kodu içerir .


12
Bunun için bir 5xx kodunu kullanmak tersine benziyor.
Ben Aaronson
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.