öğelerin bir demet silinmesi için huzurlu bir yoldur

5 Cevap php

In wiki article for REST

Eğer tüm koleksiyonu silinmesi demektir ki, siz kullanırsanız http://example.com/resources SİL belirtilmektedir.

Eğer kullanırsanız http://example.com/resources/7HOU57Y bunu eleman silme anlamına gelir ki, DELETE.

Ben bir WEB SİTESİ, not DEĞİL WEB SERVİSİ yapıyorum.

Ben listede her madde için 1 onay olan bir liste var. I silinmesi için birden çok öğe seçtiğinizde, ben kullanıcıların DELETE SEÇİMİ adında bir düğmeye basmak için izin verecektir. Kullanıcı düğmeye basarsa, bir js iletişim kutusu silme işlemini onaylamak için kullanıcı soran penceresini açar. kullanıcı onaylaması halinde, tüm öğeler silinir.

Peki nasıl ben bir RESTFUL şekilde birden fazla öğe silme karşılamak gerekir?

NOT şu anda bir web sayfası DELETE için, ne yapmam i eylem olarak POST ile FORM etiketi kullanın ama this is what was indicated by others in SO on how to do RESTful delete for webpage beri SİL değeri ile bir _method içermeleridir.

5 Cevap

I rojoca's answer kadar iyi olduğunu düşünüyorum. Hafif bir varyasyon aynı sayfada javascript ile Onayla uzakta yapmak, olmak, ve yerine, seçim oluşturmak ve buna yönlendirmek, bu sayfada bir onaylama mesajı gösteren olabilir. Başka bir deyişle:

From:
http://example.com/resources/

do a

POST with a selection of the ID's to:
http://example.com/resources/selections

hangi eğer başarılı olursa, yanıt olmalıdır:

HTTP/1.1 201 created, and a Location header to:
http://example.com/resources/selections/DF4XY7

: Bu sayfada o zaman teyit eğer bir istek yapacak (javascript) onaylamak kutusunu göreceksiniz

SİL http://example.com/resources/selections/DF4XY7

hangi eğer başarılı olursa, yanıt olmalıdır: HTTP/1.1 200 Ok (or whatever is appropriate for a successful delete)

Bir seçenek silme "işlem" yaratmaktır. Yani POST silinecek kaynakların bir listeden oluşan http://example.com/resources/deletes yeni bir kaynak gibi bir şey. Sonra uygulama sadece silme yapmak. Eğer yazı yaptığınızda size oluşturulan işlem örneğin bir konuma dönmek http://example.com/resources/deletes/DF4XY7. Gerekir A GET bu konuda (tam veya ilerleme) ve / veya silinecek kaynakların bir listesi işlemin durumunu geri dönebilirler.

Ben SİL söylemek http://example.com/resources/id1,id2,id3,id4 veya SİL olurdu http://example.com/resources/id1+id2+id3+id4. Bunu yapmanın tek bir yolu, ben inanıyoruz, orada bu wikipedia makalesinden alıntı "DİNLENME bir mimari (...) [değil] protokoldür" gibi.

Yukarıdaki HTML ile JS olmadan mümkün olmadığının farkında değilim ama REST oldu duygu olsun:

  • Işlemleri gibi küçük ayrıntılar düşünmeden düzenlendi. Kim tek bir öğe daha sonra ameliyat gerekir? Bunun üzerinden başka bir şey daha sonra diğer statik web sayfaları hizmet amaçlanmıştır değildi bu şekilde HTTP protokolü haklı.
  • Gerekli değil de mevcut modellerin içine ayarlama - hatta saf HTML.

Bunu yapmak için hiçbir 'doğru' yolu var gibi, ne geçmişte yapmış olduğu:

xml veya vücutta json kodlanmış veri ile http://example.com/something DELETE gönderebilirsiniz.

Eğer isteği aldığınızda, eğer doğruysa, o zaman silinecek olanlar için vücut okumak, DELETE kontrol edin.

İlginçtir, ben aynı yöntem birden çok varlık yama olarak geçerlidir, ve bizim URL parametreleri ve DİNLENME yöntemi ile ne demek düşünmeye gerektirir düşünüyorum.

  1. Tüm 'foo' öğelerini geri:

    [GET] api/foo

  2. Belirli kimlikleri filtreleme ile 'foo' öğeleri döndürür:

    [GET] api/foo?ids=3,5,9

Anlamda "? Biz ile ilgili ne elemanları" URL ve filtre belirlemek ve DİNLENME yöntemi (bu durumda "GET") diyor burada, "bu elemanlar ile ne?"

  1. Okurken dolayısıyla onları işaretlemek için birden fazla kayıt PATCH

    [PATCH] api/foo?ids=3,5,9

.. Veri ett [okuma] = 1

  1. Son olarak birden fazla kayıt silmek için, bu uç en mantıklı:

    [DELETE] api/foo?ids=3,5,9

Bu konuda herhangi bir "kurallar" vardır inanmıyorum Lütfen anlayın - Bana sadece "mantıklı"