Let Diyelim ki arayarak kullanıcıların listesini almak istiyorum demek GET
için api/users
, ama hiçbir kullanıcı yüzden şu anda tablo kesildi. Bu senaryo için doğru yanıt nedir: 404
veya 204
?
/api/users
ile ilgili /api/users/1
.
Let Diyelim ki arayarak kullanıcıların listesini almak istiyorum demek GET
için api/users
, ama hiçbir kullanıcı yüzden şu anda tablo kesildi. Bu senaryo için doğru yanıt nedir: 404
veya 204
?
/api/users
ile ilgili /api/users/1
.
Yanıtlar:
Ben de söyleyemem.
404 durum kodu, bir kaynağın bulunmadığı durumlar için ayrılmalıdır. Bu durumda, kaynağınız bir kullanıcı koleksiyonudur . Bu koleksiyon var ama şu anda boş. Şahsen, 200
bir gün ve 404
ertesi gün bir güne sahip olsam, uygulamanız için bir istemcinin yazarı olarak kafam çok karışır, çünkü biri birkaç kullanıcıyı kaldırır. Ne yapmam gerekiyor? URL’m yanlış mı? Birisi API'yi değiştirdi ve bir yönlendirme bırakmayı ihmal etti.
İşte 204 durum kodunun açıklamasından w3c tarafından bir alıntı
Sunucu isteği yerine getirdi, ancak bir varlık gövdesi döndürmesi gerekmiyor ve güncellenmiş meta bilgileri döndürmek isteyebilir.
Bu durumda bu makul görünse de müşterilerin kafasını karıştıracağını düşünüyorum. A'nın 204
, bazı işlemlerin başarıyla yürütüldüğünü ve hiçbir verinin döndürülmesi gerekmediğini göstermesi beklenir. Bu, bir DELETE
isteğe yanıt olarak veya belki de veri döndürmesi gerekmeyen bazı betikleri çalıştırırken mükemmeldir. Böyle bir durumda, api/users
genellikle kullanıcı koleksiyonunuzun bir temsilini almayı beklersiniz. Bir yanıt gövdesini bir kez göndermek ve diğerinde göndermemek tutarsızdır ve potansiyel olarak yanıltıcıdır.
Yukarıda belirtilen nedenlerden dolayı (tutarlılık), boş bir koleksiyonun temsilini döndürürdüm. XML kullandığınızı varsayalım. Boş olmayan bir kullanıcı topluluğu için normal bir yanıt gövdesi şöyle görünebilir:
<users>
<user>
<id>1</id>
<name>Tom</name>
</user>
<user>
<id>2</id>
<name>IMB</name>
</user>
</users>
ve liste boşsa, buna benzer bir şeyle yanıt verebilirsiniz (hala a kullanırken 200
):
<users/>
Her iki durumda da, bir müşteri belirli, iyi bilinen bir formatı izleyen bir yanıt gövdesi alır. Gereksiz kafa karışıklığı ve durum kodu kontrolü yoktur. Ayrıca hiçbir durum kodu tanımı ihlal edilmez. Herkes mutlu.
Aynısını JSON veya HTML veya kullandığınız herhangi bir formatla yapabilirsiniz.
[]
.
GET /singleCoin
- cebinizden rastgele tek bir jeton GET /severalCoins
döndürür , - cebinizden bir seferde alabileceğiniz bazı paraları döndürür. Diyelim ki şu anda cebinizde bozuk para yok. Ne zaman istersen GET /singleCoin
alırsın 404 Not Found
, ama istediğinde boş liste GET /severalCoins
alırsın . Bir gerçek - farklı yanıtlarla tanımlanan bozuk paranız yok, neden? Her zaman almanın daha iyi olduğunu söyleyebilirim , çünkü cebinizde bozuk para yoktur. 200 OK
[]
404 Not Found
GET /severalCoins
. Bazı madeni paraları iade etmesi GET /severalCoins
gerektiğini emrederseniz, o zaman 200 olmamalıdır, çünkü sorun değil; sunucu istemcinin istediğini sağlayamadı. İçin /singleCoin
istemci az artık tam olarak bir jeton, istediğim için bu açıktır. Bu aynı /coins/7
. /coins
Uç noktanın aksine , tipik olarak müşteriler madeni para, bir madeni para veya birden fazla madeni para beklemiyor. Hepsi geçerli yanıttır. Madeni para yoksa, istedikleri bu. List<Coin>
Java yerine bir imparatorluk gibi null
.
Çalışma zamanı durumuna bağlı olarak iki koddan birini yanıtlardım:
404 Bulunamadı)
Tablonuz yoksa bu cevap oldukça doğrudur. Sadece boş tablo değil, KULLANICI TABLOSU YOK. Kesin fikri doğrular - kaynak yok. Diğer seçenekler, daha fazla ayrıntı sağlamaktır. NEDEN masanız yoktur, birkaç tane daha ayrıntılı kod vardır, ancak 404, gerçekten masanızın olmadığı duruma atıfta bulunmak için oldukça iyidir.
200 (Tamam)
Tablonuzun olduğu ancak boş olduğu tüm durumlar veya istek işlemciniz tüm sonuçları filtreledi. Bu, 'talebiniz doğru, her şey yolunda, ancak sırf bizim elimizde veri olmadığı için veya isteğinizle eşleşen verimiz olmadığı için hiçbir veriyle eşleşmiyorsunuz' anlamına gelir. Bu, güvenlik reddi yanıtından farklı olmalıdır. Ayrıca, bazı verilere sahip olduğunuz ve genel olarak tabloya erişmenize izin verildiği, ancak isteğinizle eşleşen tüm verilere erişiminiz olmadığı durumda 200 döndürmek için oy veriyorum (veriler, nesne düzeyinde güvenlik nedeniyle filtrelendi, ancak genel olarak izniniz var istek).
404, kaynak bulunamadı anlamına gelir. Ancak kaynak var. Ve ayrıca, cevabın 404 durumu varsa. Kullanıcı listesinin boş veya dolu olduğunu nasıl bilebilirsiniz?