İnsanların fikirlerinin PUT
, yanıt organında hiçbir şey döndürmeyen (boş) bir RESTful operasyonu hakkında ne olduğunu merak ediyordum .
İnsanların fikirlerinin PUT
, yanıt organında hiçbir şey döndürmeyen (boş) bir RESTful operasyonu hakkında ne olduğunu merak ediyordum .
Yanıtlar:
HTTP spesifikasyonunda ( RFC 2616 ) uygulanabilir birkaç öneri vardır. İşte benim yorumum:
200 OK
Varolan bir kaynak için başarılı bir güncelleştirme PUT'u için HTTP durum kodu . Yanıt organına gerek yok. ( Bölüm 9.6 uyarınca , 204 No Content
daha da uygundur.)201 Created
Konum üstbilgisi alanında döndürülen yeni kaynak için en belirgin URI ve yanıt gövdesinde yankılanan kaynağın diğer ilgili URI'ları ve meta verileriyle yeni bir kaynağın başarılı PUT'u için HTTP durum kodu . ( RFC 2616 Bölüm 10.2.2 )409 Conflict
nedeniyle başarısız olan bir PUT için HTTP durum kodu . ( RFC 2616 Bölüm 10.4.10 )400 Bad Request
Yanıt gövdesinde PUT'un neden başarısız olduğunu açıklayan doğal dil metni (İngilizce gibi) olan başarısız bir PUT için HTTP durum kodu . ( RFC 2616 Bölüm 10.4 )No response body needed
200 ile ilgili olarak hiçbir yerde bahsedilmemektedir . Aslında tepki organı bir PUT ile ilgili olarak hiç belirtilmemiştir. Sadece devletlerIf an existing resource is modified, either the 200 (OK) or 204 (No Content) response codes SHOULD be sent to indicate successful completion of the request.
Buradaki cevapların çoğunun aksine, aslında PUT'un güncellenmiş kaynağı döndürmesi gerektiğini düşünüyorum (elbette HTTP koduna ek olarak).
Kaynağı PUT işlemi için bir yanıt olarak döndürmek istemenizin nedeni, sunucuya bir kaynak temsili gönderdiğinizde, sunucunun da bu kaynağa bazı işlemler uygulayabilmesidir, bu nedenle istemci bu kaynağın nasıl yapıldığını bilmek ister istek başarıyla tamamlandıktan sonra gibi görünebilir. (aksi takdirde başka bir GET isteği yayınlaması gerekir).
Sunucunun bir PUT yanıt olarak içerik döndürmek mümkün olduğunu düşünüyorum. Yandan yüklenen verilere izin veren bir yanıt zarfı biçimi kullanıyorsanız (kor verileri tarafından kullanılan biçim gibi), veritabanı tetikleyicileri vb. Yoluyla değiştirilmiş olabilecek diğer nesneleri de ekleyebilirsiniz (Yandan yüklenen veriler açıkça azaltmak içindir. istek sayısı ve bu, optimize etmek için iyi bir yer gibi görünüyor.)
Sadece PUT'u kabul edersem ve raporlayacak hiçbir şeyim yoksa, beden kodu olmadan 204 durum kodunu kullanırım. Bildirecek bir şeyim varsa, 200 durum kodunu kullanıyorum ve bir gövde ekliyorum.
HTTP / 1.1 spektrumu (bölüm 9.6) uygun bir cevap / hata kodları anlatılır. Ancak yanıt içeriğine değinmez.
Ne beklerdiniz? Basit bir HTTP yanıt kodu (200 vb.) Açık ve net görünüyor.
REST API'sinin arka ucu bir SQL ilişkisel veritabanı ise,
Kayıp güncellemeleri umursamıyorsanız veya müşterilerinizi bir PUT'dan hemen sonra bir GET yapmaya zorlamak istiyorsanız, PUT'tan hiçbir şey döndürmeyin.
İstemcinin yeni oluşturulan kaynağı nerede bulabileceğini göstermek için "Konum" üstbilgisi ile birlikte "Created" için Http yanıt kodu 201.
Hizmetlerimde RESTful API kullandım ve işte benim fikrim: Öncelikle ortak bir görüşe geçmeliyiz :PUT
oluşturma veya almayan bir kaynağı güncellemek için kullanılır.
Kaynakları: Stateless resource
ve ile tanımladım Stateful resource
:
Durumsuz kaynaklar Bu kaynaklar için, HttpCode'u boş bir gövdeyle iade edin, yeterlidir.
Durum bilgisi olan kaynaklar Örneğin: kaynağın sürümü. Bu tür kaynaklar için, değiştirmek istediğinizde sürümü sağlamanız gerekir, bu nedenle tam kaynağı döndürün veya sürümü istemciye geri gönderin, böylece istemcinin güncelleme eyleminden sonra bir alma isteği göndermesi gerekmez.
Ama , bir hizmet veya sistem için, bu tutmaksimple
,clearly
,easy to use and maintain
en önemli şeydir.
Boş bir İstek gövdesinin bir GET isteğinin asıl amacına uygun olması ve boş yanıt gövdesinin bir PUT talebinin asıl amacına uygun olması gibi.
Tamam görünüyor ... gerçi bir başarı / başarısızlık / gönderilen zaman / # bayt alınan / vb bir temel göstergesi düşünüyorum. tercih edilir.
edit: Veri bütünlüğü ve / veya kayıt tutma çizgileri boyunca düşünüyordum; MD5 karması veya alınan zaman için zaman damgası gibi meta veriler büyük veri dosyaları için yardımcı olabilir.
İdeal olarak bir başarı / başarısız yanıtı döndürür.
HTTP yanıtının başlığı ve gövdesi arasında bir fark vardır. PUT hiçbir zaman bir gövde döndürmemeli, ancak başlıkta bir yanıt kodu döndürmelidir. Başarılı olursa 200'ü, değilse 4xx'i seçin. Boş dönüş kodu diye bir şey yoktur. Bunu neden yapmak istiyorsun?
200
PUT, DELETE veya başka bir yöntem için kullanımı dışlayan hiçbir şey bulamadığım için Mozilla tarafında oldukça küstah görünüyor . Bir şey mi kaçırdım? Mozilla'nın W3 ve IETF'nin patronu olması gibi mi? ;) Ya da belki de Postel'in Sağlamlık İlkesini hiç duymamışlardır.