Uyumlu php mvc framework Agavi kullanımı REZİL REST mu?

4 Cevap php

Agavi çerçeve bilgilerini güncellemek için oluşturmak ve POST için PUT isteği kullanır. Genellikle REST bu etrafında başka bir yol (genellikle PUT tüm veri kaydını değiştirirken POST bilgilerini ekleyerek atıfta) kullanılır.

Ben bunu doğru anlamak, önemli konu POST bu şartı yok iken PUT, idempotent gerektiğidir. Bu nedenle, nasıl yeni bir kayıt oluştururken genellikle ORM bir birincil anahtar ve bir yeni kaydın kimliği bilinen olmaz gibi bir kimliği kullandığı zaman, özellikle (yani birden çok istek bir kaydın birden fazla kreasyonlar yol açmayan) idempotent edilebilir wounder istemciye (bu veritabanında autocreated beri), dolayısıyla istek parçası olamaz. Nasıl Agavi PUT isteği için bu ışığında idempotence gereksinimi korumak gelmez.

Teşekkürler.

4 Cevap

PUT oluşturulması için ve tam kayıtları güncellemek için de kullanılabilir. / Makaleler: POST genellikle kısmi güncellemeleri ve ilgili işlemleri yanı sıra articles/23/comments / için (kaynak için, örneğin POST URL belirtmeden sunucu üzerinde kaydın yeni bir tür oluşturmak için kullanılan bir 201 statü ve Yer döndürür / 23/comments/283136 başlığı). Yani sizin durumunuzda (dizisi / değiştirmemesi kimliği ile), bu yaklaşımı kullanmak istiyorsunuz.

Ancak HTML (ve böylece web formları) farklıdır. Sadece GET ve POST, DELETE ve PUT bilmiyor. Silme ve güncelleme işlemleri için, POST yöntemi aşırı.

Onlar güvenliğini temsil şekilde de nispeten nötr ve çünkü o en yaygın kullanımı durumda bulunuyor ve "yazma", "okumak" ve seçildi - Agavi, varsayılan olarak, "yazma" ve "okuma" GET POST eşler bu yüzden POST ("yan etkisi olmadan denebilecek GET" ve falan gibi güvenlik) vs GET yönleri.

Siz factories.xml yılında AgaviWebRequest uygulanması için fiilleri haritalama değiştirebilir; size bu konuda yardımcı (ya da burada uzak sormak) gerekirse Agavi kullanıcıların posta listesi veya IRC kanalında bakın. IRC kanalında bir sürü insan da oldukça size API güzel yapma ile daha fazla yardıma ihtiyaç halinde URL şeması tasarımı ile deneyimlidir.

Bunun yerine oluşturma gibi PUT düşünme, "koyarak" olarak düşünüyorum. Sen bir URI (yani bir URI için bütün bir kaynak göndermek) bir kaynak koymak.

PUT http://example.com/articles/1

Eğer (aynı URI aynı özkaynağın tamamını göndermek) bu tekrarlayın Eğer aynı sonucu almak ve bu URI kaynak değişmedi, o kadar İdempotent kılan.

Bir Agavi'nin uygulanması PUT İdempotent ise o PUT doğru uygulamaktadır. Aksi halde değil.

PUT kaynak zaten var (ya da zaten bir önceki PUT tarafından yaratılmış olan) sadece bunu güncellemek eğer dışında, bir kaynak oluşturmak için kullanılabilir. Bu basit CRUD ise POST, ancak, kaynak güncelleştirmek gerekir. Onlar sadece CRUD çok daha yararlı konum beri HTTP fiilleri, mutlaka belirli eylemler için bir tanımlı eşleme yok unutmayın.

Sadece uygun HTTP kullanımı - Ayrıca bu soru REST ile ilgisi olduğunu unutmayın. Yani DİNLENME etiketini kaldırın lütfen.

Ben daha önce bu sorunu yaşadım. Bu changing the factories.xml çözülebilir