Saya telah memikirkan tentang pembacaan dan penulisan batch dalam lingkungan yang tenang, dan saya rasa saya menyadari bahwa saya memiliki pertanyaan yang lebih luas tentang cache HTTP. (Di bawah ini saya menggunakan koma (",") untuk membatasi beberapa ID rekaman, namun detail tersebut tidak khusus untuk diskusi.)
Saya mulai dengan masalah ini:
1. Tunggal GET
tidak valid karena pembaruan batch
GET /farms/123 # get info about Old MacDonald's Farm
PUT /farms/123,234,345 # update info on Old MacDonald's Farm and some others
GET /farms/123
Bagaimana server cache di antara klien dan server Farms mengetahui untuk membatalkan cache /farms/123
ketika melihat PUT
?
Kemudian saya menyadari ini juga merupakan masalah:
2. Batch GET
tidak valid karena pembaruan tunggal (atau batch).
GET /farms/123,234,345 # get info about a few farms
PUT /farms/123 # update Old MacDonald's Farm
GET /farms/123,234,345
Bagaimana cache mengetahui untuk membatalkan validitas multi-pertanian GET
ketika melihat PUT berlalu?
Jadi saya pikir masalahnya sebenarnya hanya pada operasi batch. Kemudian saya menyadari bahwa hubungan apa pun dapat menyebabkan masalah serupa. Katakanlah sebuah peternakan mempunyai nol atau satu pemilik, dan seorang pemilik dapat memiliki nol atau satu peternakan.
3. Tunggal GET
tidak valid karena memperbarui catatan terkait
GET /farms/123 # get info about Old MacDonald's Farm
PUT /farmers/987 # Old MacDonald sells his farm and buys another one
GET /farms/123
Bagaimana cache mengetahui untuk membatalkan GET tunggal ketika ia melihat PUT berlalu?
Bahkan jika Anda mengubah model menjadi lebih RESTful, dengan menggunakan model hubungan, Anda mendapatkan masalah yang sama:
GET /farms/123 # get info about Old MacDonald's Farm
DELETE /farm_ownerships/456 # Old MacDonald sells his farm...
POST /farm_ownerships # and buys another one
GET /farms/123
Di kedua versi #3, GET pertama harus mengembalikan sesuatu seperti (dalam JSON):
farm: {
id: 123,
name: "Shady Acres",
size: "60 acres",
farmer_id: 987
}
Dan GET kedua akan mengembalikan sesuatu seperti:
farm: {
id: 123,
name: "Shady Acres",
size: "60 acres",
farmer_id: null
}
Tapi itu tidak bisa! Bahkan jika Anda menggunakan ETag
s dengan tepat. Anda tidak dapat mengharapkan server cache memeriksa konten ETag
s -- konten dapat dienkripsi. Dan Anda tidak dapat mengharapkan server memberi tahu cache bahwa catatan harus dibatalkan -- cache tidak mendaftarkan dirinya ke server.
Jadi, apakah ada header yang saya lewatkan? Hal-hal yang menunjukkan bahwa cache harus melakukan HEAD
sebelum GET
s untuk sumber daya tertentu? Saya kira saya dapat menerima permintaan ganda untuk setiap sumber daya jika saya dapat memberi tahu cache sumber daya mana yang mungkin sering diperbarui.
Dan bagaimana dengan masalah satu cache menerima PUT
dan mengetahui untuk membatalkan cache-nya dan cache lainnya tidak melihatnya?
pathInfo
, jadi masalahnya tidak ada. +++Invalidates-Other
adalah hal yang membuat saya kesulitan merumuskan pertanyaan sebelum saya menemukan pertanyaan bagus Anda. - person maaartinus   schedule 22.10.2016