Menghapus beberapa catatan menggunakan SISA

Apa SISA-ful cara menghapus beberapa item?

Saya menggunakan hal adalah bahwa saya memiliki Backbone Koleksi dimana saya harus mampu untuk menghapus beberapa item sekaligus. Pilihan tampaknya akan:

  1. Mengirim permintaan untuk MENGHAPUS setiap record (yang tampaknya seperti ide yang buruk jika ada yang berpotensi puluhan item);
  2. Kirim MENGHAPUS dimana ID's untuk menghapus dirangkai dalam URL (yaitu, "/catatan/1;2;3");
  3. Di non-SISA cara, mengirim kustom objek JSON yang berisi ID's ditandai untuk penghapusan.

Semua pilihan yang kurang dari ideal.

Hal ini tampaknya seperti sebuah wilayah abu-abu dari SISA konvensi.

Mengomentari pertanyaan (1)
Larutan
  1. Adalah layak Tenang pilihan, tapi jelas memiliki keterbatasan yang telah dijelaskan.
  2. Don't melakukan hal ini. Itu akan ditafsirkan oleh perantara seperti berarti "MENGHAPUS (satu) sumber daya di /catatan/1;2;3" — Jadi 2xx menanggapi hal ini dapat menyebabkan mereka untuk membersihkan cache dari /catatan/1;2;3; tidak purge /catatan/1, /catatan/2 atau /catatan/3; proxy 410 respon untuk /catatan/1;2;3, atau hal-hal lain yang don't masuk akal dari sudut pandang anda.
  3. Pilihan ini adalah yang terbaik, dan dapat dilakukan RESTfully. Jika anda membuat sebuah API dan anda ingin untuk memungkinkan perubahan massa untuk sumber daya, anda dapat menggunakan SISANYA untuk melakukannya, tapi persis bagaimana tidak segera jelas bagi banyak orang. Salah satu metode adalah untuk membuat 'perubahan permintaan' sumber daya (misalnya dengan POSTing tubuh seperti catatan=[1,2,3] ke /menghapus-permintaan) dan jajak pendapat yang dibuat sumber daya (ditentukan oleh Lokasi header response) untuk mengetahui apakah permintaan anda telah diterima, ditolak, sedang berlangsung atau telah selesai. Hal ini berguna untuk operasi berjalan lama. Cara lain adalah dengan kirim PATCH permintaan untuk daftar sumber daya, /catatan, tubuh yang berisi daftar sumber daya dan tindakan yang harus dilakukan pada sumber-sumber tersebut (dalam format apapun yang anda ingin mendukung). Hal ini berguna untuk operasi cepat di mana kode respon untuk permintaan dapat menunjukkan hasil operasi.

Segala sesuatu dapat dicapai sementara menjaga dalam batasan ISTIRAHAT, dan biasanya jawabannya adalah untuk membuat "masalah" ke sumber daya, dan memberikan sebuah URL. Jadi, operasi batch, seperti menghapus sini, atau POSTing beberapa item ke daftar, atau membuat edit yang sama untuk balutan sumber daya, semua bisa ditangani dengan menciptakan "operasi batch" daftar dan POSTing baru operasi untuk itu.

Don't lupa, ISTIRAHAT isn't satu-satunya cara untuk memecahkan masalah. "BERISTIRAHAT" hanya sebuah gaya arsitektur dan anda don't memiliki untuk mematuhi itu (tapi anda kehilangan manfaat tertentu dari internet jika anda don't). Saya sarankan anda melihat ke bawah daftar ini HTTP API arsitektur dan memilih salah satu yang cocok untuk anda. Hanya membuat diri anda menyadari apa yang anda kehilangan jika anda memilih yang lain arsitektur, dan membuat keputusan berdasarkan kasus penggunaan anda.

Ada beberapa jawaban untuk pertanyaan ini di https://stackoverflow.com/questions/511281/patterns-for-handling-batch-operations-in-rest-web-services yang memiliki terlalu banyak upvotes, tapi harus baca juga.

Komentar (18)

Jika DAPATKAN /catatan?filteringCriteria mengembalikan array dari semua catatan yang sesuai dengan kriteria, kemudian HAPUS /catatan?filteringCriteria bisa menghapus semua catatan tersebut.

Dalam hal ini jawaban atas pertanyaan anda akan MENGHAPUS /catatan?id=1&id=2&id=3.

Komentar (10)

Saya pikir Mozilla Layanan Penyimpanan SyncStorage API v1.5 adalah cara yang baik untuk menghapus beberapa catatan menggunakan SISANYA.

Menghapus seluruh koleksi.

DELETE https:///storage/

Menghapus beberapa BSOs dari koleksi dengan satu permintaan.

DELETE https:///storage/?ids=

id: menghapus BSOs dari koleksi dan id yang di berikan daftar dipisahkan koma. Maksimum 100 ids dapat diberikan.

Menghapus BSO di lokasi tertentu.

DELETE https:///storage//

http://moz-services-docs.readthedocs.io/en/latest/storage/apis-1.5.html#api-instructions

Komentar (1)

hal Ini tampaknya seperti sebuah wilayah abu-abu dari SISA konvensi.

Ya, sejauh ini saya hanya datang di salah satu REST API panduan desain yang menyebutkan operasi batch (seperti batch menghapus): google api panduan desain.

Panduan ini menyebut penciptaan "kustom" metode yang dapat dikaitkan melalui sumber daya dengan menggunakan usus besar, misal https://service.name/v1/some/resource/name:customVerb itu juga menyebutkan secara eksplisit operasi batch sebagai use case:

Sebuah metode khusus yang dapat dikaitkan dengan sumber daya, koleksi, atau layanan. Mungkin diperlukan sewenang-wenang permintaan dan kembali sewenang-wenang respon, dan juga mendukung streaming permintaan dan respon. [...] Metode kustom harus menggunakan HTTP POST verba karena memiliki paling fleksibel semantik [...] Untuk kinerja kritis metode-metode ini mungkin berguna untuk memberikan kustom batch metode untuk mengurangi per-permintaan overhead.

Jadi anda bisa melakukan hal berikut menurut google's panduan api:

POST /api/path/to/your/collection:batchDelete

...untuk menghapus sekelompok item dari koleksi sumber daya.

Komentar (5)

I've yang diperbolehkan untuk penggantian grosir koleksi, misal MENEMPATKAN ~/orang/123/sepatu di mana tubuh adalah seluruh koleksi representasi.

Ini bekerja untuk anak kecil koleksi barang-barang mana yang diinginkan klien untuk meninjau item dan prune-beberapa dan menambahkan beberapa orang lain dan kemudian memperbarui server. Mereka bisa MENEMPATKAN kosong koleksi untuk menghapus semua.

Ini akan berarti GET ~/orang/123/sepatu/9 masih akan tetap di cache meskipun MENEMPATKAN dihapus, tapi yang's hanya masalah caching dan akan menjadi masalah jika beberapa orang lainnya dihapus sepatu.

Data saya/sistem Api selalu menggunakan ETags sebagai lawan untuk kali kadaluwarsa sehingga server memukul pada setiap permintaan, dan saya memerlukan versi yang benar/concurrency header untuk bermutasi data. Untuk Api yang bersifat hanya-baca dan lihat/laporan selaras, saya menggunakan waktu kadaluwarsa untuk mengurangi hits di negara asal, misalnya leaderboard dapat menjadi baik selama 10 menit.

Untuk koleksi yang lebih besar, seperti ~/orang, saya cenderung untuk tidak perlu menghapus beberapa, penggunaan-kasus cenderung untuk tidak begitu saja muncul dan jadi single MENGHAPUS bekerja dengan baik.

Di masa depan, dan dari pengalaman dengan bangunan REST Api dan memukul masalah yang sama dan persyaratan, seperti audit, I'd cenderung untuk hanya menggunakan GET dan POST verba dan desain di sekitar kejadian, misalnya PASCA perubahan alamat peristiwa, meskipun saya menduga bahwa'll datang dengan mengatur sendiri masalah :)

I'd juga memungkinkan front-end developer untuk membangun mereka sendiri Api yang mengkonsumsi lebih ketat back-end Api karena ada's sering praktis, valid client-side alasan mengapa mereka don't seperti yang ketat "Tangkas fanatik" SISA API desain, dan untuk produktivitas dan cache layering alasan.

Komentar (5)