Aşağıdakiler için doğru HTTP durum kodu nedir: “Bu API'nın bu sürümü kullanımdan kaldırıldı”?


13

RESTful API'm var. Bunun 3 sürümü vardır: v1, v2 ve v3. V4'ü yayınlamak üzereyim ve v1'i bırakmaya karar verdik, yani tüm isteklerin http://example.com/v1/resourcebaşarısız olacağı, ancak çağrıların http://example.com/v2/resourceçalışmaya devam edeceği anlamına geliyor.

Arızayı belirtmenin uygun yolu nedir? Bir 410 GONEdurum kodu kullanmayı düşündüm , ancak bu kaynak artık mevcut olmadığını gösterir. Yine de, kaynak hala kullanılabilir, ancak yalnızca farklı bir şekilde talep edilmelidir.

Ben de genel bir 400durum kodu düşündüm , ama bu da tuhaf görünüyordu. Bunun standart bir cevabı var mı?


API'lerin HTTP ile hiçbir ilgisi olmadığı için API hatası için HTTP durum kodu yoktur. Kaynak hala kullanılabilir, ancak REST'te aynı kaynak olmayan farklı bir yol talep edilmelidir, yani hayır, mevcut değildir.
Rob

Yanıtlar:


11

Standart yok gibi görünüyor.

StackOverflow cevap 410 GONE doğru eğilir, ama bence 301 KALICI OLARAK HAREKET daha uygun.

Doğru seçimi yapmak için özel durumunuza bakmalıyız. Amacınız, herhangi bir işlem yapmadan API v1'e yapılan tüm çağrıların başarısız olmasını sağlamaksa, 410 GONE bunun için çalışır. İstemciyi API'nizin çağrılarının başarılı olabileceği daha yeni bir sürümüne yönlendirmek gibi bir süreklilik istiyorsanız, 3XX çalışır, ancak hangisini seçersiniz? API v1'i kapatmaya çalışıyorsanız, 301 KALICI OLARAK HAREKET EDİLDİ 303'ten daha iyi olduğunu belirtmeye yardımcı olur, çünkü 301, gelecekteki tüm isteklerin yeni URL'ye yapılması gerektiğini gösterirken, 303 bu durumun olup olmadığını belirtmez kalıcı.

API'yi, her sürüm geriye dönük olarak uyumlu kalacak şekilde tasarlamanızı öneririm, böylece 301 KALICI OLARAK HAREKET EDİLDİ, yeni API sürümleri için yeni uç noktalar eklediğinizde API'nızı şeffaf ve güncel tutar. Bence zaten yapmaya çalıştığın şey bu.

HTTP Durum Kodları

HTTP durum kodu 302 başlangıçta çok genişti ve bu nedenle yanlış bir şekilde uygulandı / kullanıldı, bu nedenle 302 ve 307'nin ikili kullanım durumunu ayırt etmek için 303 ve 307 yapıldı. Bazı API'lar başka amaçlar için 303 kullanır.

301 KALICI OLARAK HAREKET EDİLDİ - 301 (Kalıcı Olarak Taşındı) durum kodu, hedef kaynağa yeni bir kalıcı URI'nin atandığını ve bu kaynağa gelecekteki tüm referansların ekteki URI'lerden birini kullanması gerektiğini gösterir.

302 FOUND - 302 (Bulunan) durum kodu, hedef kaynağın geçici olarak farklı bir URI altında bulunduğunu gösterir. Yönlendirme zaman zaman değiştirilebileceğinden, istemci gelecekteki istekler için etkin istek URI'sını kullanmaya devam etmelidir.

303 DİĞERİ GÖR - Bir GET isteğine verilen 303 yanıtı, kaynak sunucunun sunucu tarafından HTTP üzerinden aktarılabilecek hedef kaynağın bir temsiline sahip olmadığını gösterir. Bununla birlikte, Konum alanı değeri, hedef kaynağın açıklayıcı olduğu bir kaynağa işaret eder, böylece diğer kaynak üzerinde bir geri alma isteği yapmak, alıcılar için orijinal hedef kaynağı temsil ettiğini ima etmeden faydalı bir temsil ile sonuçlanabilir.

410 GONE - 410 (Gitti) durum kodu, hedef kaynağa erişimin artık kaynak sunucuda bulunmadığını ve bu koşulun kalıcı olacağını gösterir. Kaynak sunucu durumun kalıcı olup olmadığını bilmiyorsa veya belirleyecek bir imkan yoksa, durum kodu 404 (Bulunamadı) kullanılmalıdır.

Mevcut API'lar bunu nasıl ele alır?

Belki Google'ın Youtube API'sından bir sayfa alabilirsiniz :

Bir API isteği başarısız olduğunda, YouTube, hatayı genel olarak tanımlayan bir HTTP 4xx veya 5xx yanıt kodunun yanı sıra hataya neden olan hatalar hakkında daha spesifik bilgiler sağlayan bir XML yanıtı döndürür. Her hata için, XML yanıtı bir etki alanı öğesi, kod öğesi ve muhtemelen bir konum öğesi içerir.

Daha fazla okuma:


2
301 tehlikeli görünüyor. Bu, aynı kanonik anlamı olmayan bir yere otomatik yönlendirmelere neden olur.
Brandon Yarbrough

Girişi takdir edin. Tüm 3XX kodları, müşterinin Konum başlığında alternatif bir URL sağlayarak ek bir işlem (yönlendirme) yapması gerektiğini belirtir. Her kodun biraz farklı yönlendirme davranışına sahip olduğuna dikkat etmek ilginçtir; 303 bir POST'u yeni konuma GET olarak yönlendirir. Bu cevabı kesinlikle daha fazla bilgi ile güncelleyeceğim.
perry

1

Yönlendirmeler, taşınan kaynaklar için mükemmeldir. 301 kalıcı yönlendirmesi yerine (API değişiklikleri olmadan yeniden adlandırmayı gösterir), 303 "Diğerlerine Bak" yönlendirmesini kullanırdım.


0

Hala yönlendirmeleri olmayan mirası desteklemeniz mi gerekiyor? Hala destekliyor ve derinlemesine uygulasanız bile, 501 durumunuza elele görünüyor. Bilenler hala kullanabilirken, rasgele sürümler v1 için 501'i görür.

10.5.2 501 Uygulanmadı

Sunucu, isteği yerine getirmek için gereken işlevselliği desteklemiyor. Bu, sunucu istek yöntemini tanımadığında ve bunu herhangi bir kaynak için destekleyemediğinde uygun yanıttır.

http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html


0

Hizmetin kullanılamadığını bildiren bir mesajla 503'ü kullanır ve daha yeni sürümü kullanmayı belirtirim. Bu mesaj çağrıların% 50'si için geri gönderilebilir ve zaman içinde kademeli olarak% 100'e çıkar.

Saydam bir geçiş için, bu yöntem 301'den farklı olarak fiili (POST POST olacaktır) değiştirmediği için 308 - Kalıcı yönlendirme kullanacağım .

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.