2013-04-05 22 views
20

GET, POST, PUT ve DELETE işlevlerini kullandığım bir RESTful webapp oluşturmaya çalışıyorum. Ancak bu uygulamada DELETE kullanımı hakkında bir sorum vardı.RESTful Soft Sil

ilk Biraz arka plan:

Benim Webapp başka bir sistemde (her zaman oluşturulan, olur, ve benzeri) de yönetilir jenerik varlıkları yönetir. Dolayısıyla, web sunucumda, her varlık veritabanında benzersiz bir anahtarla depolanacaktır. Ancak, URL'ler aracılığıyla onlara erişme şeklimiz, diğer sisteminin benzersiz anahtarıdır.

Basit bir örnek bunu açıklığa kavuşturacaktır, bence. /entity/1 URL'sini alın. Bu, diğer sistemde numaralı ID 1 numaralı varlık ile ilgili bilgileri görüntüleyecektir ve kendi sistemim değil. Aslında sistemimdeki kimlikler tamamen gizlenecek. Kendi sistemimde 1 kimliğine sahip varlıklara erişmek için hiçbir URL şeması olmayacaktır.

Pekala, şimdi web günlüğümün nasıl yapılandırıldığını biliyoruz, şimdi bu varlıkları silmeye dönelim.

Sistemimdeki varlıkların "silinmesi" için bir yol olacak, ancak ben bunları veritabanından silmeyeceği için tırnak içine aldım. Daha ziyade, onları /entity/1'a gittiğinizde görünmesini engelleyen bir özellik ile onları işaretleyecektir.

Bu nedenle, PUT kullanıyorum gibi hissediyorum ('bu şekilde silme' idempotent olacaktır), çünkü veri perspektifinden, sadece bir özellik belirliyorum.

Yani, soru: RESTful yaklaşımın verilere sadakati var (bu durumda PUT ing olduğum açıkça anlaşılıyor) veya uygulamadaki verilerin gösterimi (ki bu durumda benim gibi görünüyor) DELETE ing)?

cevap

31

DELETE kullanmalısınız.

Verileriniz ile ne yapmak istediğinizi "yumuşak silme" olarak adlandırırsınız: bir bayrak ayarlarsınız ve bayrakların görünmesini önlersiniz. Bu web sunucunuzun içindedir ve kullanıcının silmek yerine veya silmek istediğinizde yumuşak silme yaptığınızı bilmesi gerekmez. Bu yüzden DELETE fiilini kullanmalısınız.

+1

Evet - Ne yapmak istediğinizi açıklayan fiili/yöntemi kullanmalısınız. DELETE daha iyi bir seçenek –

+0

Ben de alestanis ile aynı fikirde. –

+0

Cevabınız için teşekkür ederiz, alestanis! Senin mantığına katılıyorum; Kabul etmeden önce her iki yönde başka çekici cevapların olup olmadığını görmek için birkaç gün bekliyorum. – jmeas