Kısa, doğrudan cevap
Talep, görev listesini yürütmekten bahsettiğinden (görevler burada bahsettiğimiz kaynaktır), o zaman görev grubu yürütmeye ileri götürülmüşse (yani, yürütme sonucundan bağımsız olarak), o zaman mantıklı olur. Cevap statüsü olacak 200 OK
. Aksi takdirde, görev grubunun yürütülmesini engelleyebilecek bir sorun varsa, örneğin görev nesnelerinin doğrulanamaması veya bazı gerekli servisler mevcut değilse, yanıt durumu bu hatayı belirtmelidir. Geçmişte, görevlerin yerine getirilmesi başladığında, yapılacak görevlerin istek gövdesinde listelendiğini görmek, yürütme sonuçlarının cevap gövdesinde listelenmesini beklerdim.
Uzun, felsefi cevap
Bu ikilemi deneyimliyorsunuz çünkü HTTP'nin ne için tasarlandığından sapıyorsunuz. Kaynakları yönetmek için etkileşime girmiyorsunuz, bunun yerine, uzaktan yöntem çağırma aracı olarak kullanıyorsunuz (ki bu çok garip değil, ancak önceden tasarlanmış bir program olmadan zayıf çalışıyor).
Yukarıdakilerin söylenmesi ve bu cevabı uzun bir görüşlü rehber haline getirme cesareti olmadan, aşağıdakiler kaynak yönetimi yaklaşımına uygun bir URI şemasıdır:
/tasks
GET
sayfalandırılmış tüm görevleri listeler
POST
tek bir görev ekler
/tasks/task/[id]
GET
tek bir görevin durum nesnesiyle yanıt verir
DELETE
görevi iptal eder / siler
/tasks/groups
GET
sayfalandırılmış tüm görev gruplarını listeler
POST
bir grup görev ekler
/tasks/groups/group/[id]
GET
görev grubunun durumuna cevap verir
DELETE
görev grubunu iptal eder / siler
Bu yapı, onlarla ne yapılacağı hakkında değil, kaynaklar hakkında konuşuyor. Kaynaklarla yapılan başka bir hizmetin endişesidir.
Dikkat edilmesi gereken bir diğer önemli nokta ise, bir HTTP istek işleyicisinde çok uzun süre engellenmemesi tavsiye edilir. UI'ye benzer şekilde, bir HTTP arayüzünün yanıt vermesi gerekir - bir kaç büyüklük derecesinde daha yavaş olan bir zaman çizelgesinde (çünkü bu katman IO ile ilgilidir).
Kaynakları sıkı bir şekilde yöneten bir HTTP arayüzü tasarlama yolunda ilerlemek, bir düğme tıklatıldığında çalışmanın bir UI iş parçasından uzağa taşınması kadar muhtemeldir. HTTP sunucusunun, istek işleyicide yerine yürütmek yerine görevleri yürütmek için diğer hizmetlerle iletişim kurmasını gerektirir. Bu sığ bir uygulama değil, yön değişikliği.
Böyle bir URI planının nasıl kullanılacağına dair bazı örnekler
Tek bir görevi yerine getirmek ve ilerlemeyi izlemek:
POST /tasks
yürütülmesi gereken görevle
GET /tasks/task/[id]
completed
Mevcut durum / ilerlemeyi gösterirken, cevap nesnesi pozitif değere kadar
Tek bir görevi yerine getirmek ve tamamlanmasını beklemek:
POST /tasks
yürütülmesi gereken görevle
GET /tasks/task/[id]?awaitCompletion=true
completed
pozitif olana kadar (muhtemelen zaman aşımına uğradı, bu yüzden bunun döngüsel olması gerekiyor)
Bir görev grubunun yürütülmesi ve ilerlemenin izlenmesi:
POST /tasks/groups
Yürütülecek görevler grubu ile
GET /tasks/groups/group/[groupId]
Cevap nesnesi completed
özelliği değere sahip olana kadar bireysel görev durumunu gösterir (örneğin 5 üzerinden tamamlanan 3 görev)
Bir görev grubu için yürütme istemek ve tamamlanmasını beklemek:
POST /tasks/groups
Yürütülecek görevler grubu ile
GET /tasks/groups/group/[groupId]?awaitCompletion=true
Tamamlanmayı belirten sonuçla cevap verene kadar (büyük olasılıkla zaman aşımına uğramıştır, bu yüzden ilmek gerekir)