Oyuna geç belki ama bir REST API yapmaya çalışırken bu anlambilim sorunu tökezledi.
Wrikken'in cevabını biraz genişletmek için, duruma göre 409 Conflict
veya 403 Forbidden
duruma bağlı olarak kullanabileceğinizi düşünüyorum - kısaca, kullanıcı çakışmayı çözmek ve isteği tamamlamak için kesinlikle hiçbir şey yapamadığında 403 hatası kullanın (örn. DELETE
kaynağı açıkça kaldırma isteğinde bulunabilirsiniz) veya bir şey yapılabilirse 409 kullanın.
Sunucu isteği anladı, ancak yerine getirmeyi reddediyor. Yetkilendirme yardımcı olmaz ve istek tekrarlanmamalıdır. İstek yöntemi HEAD değilse ve sunucu, isteğin neden yerine getirilmediğini halka duyurmak istiyorsa, kuruluştaki ret nedenini açıklamalıdır. Sunucu bu bilgileri istemcinin kullanımına sunmak istemiyorsa, bunun yerine 404 (Bulunamadı) durum kodu kullanılabilir.
Günümüzde, birisi "403" diyor ve bir izin veya kimlik doğrulama sorunu akla geliyor, ancak spesifikasyon, temelde sunucunun istemciye bunu yapmayacağını söyleyen, tekrar sormadığını ve istemcinin neden istememesi gerektiğini söylüyor 't.
Gelince PUT
vs. POST
... POST
kullanıcı için hiçbir araca sahip olduğunda bir kaynağın yeni bir örneğini oluşturmak için kullanılması gerektiğini ya da kaynak için bir tanımlayıcı oluşturmamalıdır. PUT
kaynağın kimliği bilindiğinde kullanılır.
...
POST ve PUT istekleri arasındaki temel fark, İstek-URI'sinin farklı anlamına yansır. Bir POST isteğindeki URI, ekteki varlığı işleyecek kaynağı tanımlar. Bu kaynak veri kabul eden bir süreç, başka bir protokole açılan bir geçit veya ek açıklamaları kabul eden ayrı bir varlık olabilir. Buna karşılık, bir PUT isteğindeki URI, istekle birlikte gelen varlığı tanımlar - kullanıcı aracısı, URI'nin amaçlandığını bilir ve sunucunun, isteği başka bir kaynağa uygulamaması GEREKİR. Sunucu, isteğin farklı bir URI'ye uygulanmasını istiyorsa,
301 (Kalıcı Olarak Taşındı) yanıtı göndermelidir ZORUNLU; kullanıcı aracısı daha sonra isteği yeniden yönlendirip yönlendirmemeye ilişkin kendi kararını verebilir.