Câu trả lời ngắn gọn, trực tiếp
Kể từ khi yêu cầu nói về thực hiện danh sách các nhiệm vụ (nhiệm vụ là nguồn lực mà chúng ta đang nói về ở đây), sau đó nếu nhóm nhiệm vụ đã được di chuyển về phía trước để thực hiện (có nghĩa là, bất kể kết quả thực hiện), sau đó nó sẽ là hợp lý rằng trạng thái phản hồi sẽ là 200 OK
. Mặt khác, nếu có một vấn đề sẽ ngăn việc thực thi nhóm tác vụ, chẳng hạn như không xác thực các đối tượng tác vụ hoặc một số dịch vụ được yêu cầu không có sẵn, ví dụ, trạng thái phản hồi sẽ biểu thị lỗi đó. Trước đó, khi việc thực thi các nhiệm vụ bắt đầu, được xem là các nhiệm vụ cần thực hiện được liệt kê trong phần yêu cầu, thì tôi sẽ mong rằng các kết quả thực hiện sẽ được liệt kê trong phần phản hồi.
Câu trả lời dài, đầy triết lý
Bạn đang gặp vấn đề nan giải này bởi vì bạn đang chuyển hướng từ những gì HTTP được thiết kế cho. Bạn không tương tác với nó để quản lý tài nguyên, thay vào đó, bạn đang sử dụng nó như là phương tiện của việc gọi phương thức từ xa (không phải là rất kỳ quặc, tuy nhiên hoạt động kém mà không có sơ đồ định sẵn).
Với những điều đã nói ở trên và không có can đảm để biến câu trả lời này thành một hướng dẫn dài dòng, sau đây là sơ đồ URI phù hợp với phương pháp quản lý tài nguyên:
/tasks
GET
liệt kê tất cả các nhiệm vụ, phân trang
POST
thêm một nhiệm vụ
/tasks/task/[id]
GET
đáp ứng với một đối tượng trạng thái của một nhiệm vụ
DELETE
hủy bỏ / xóa một tác vụ
/tasks/groups
GET
liệt kê tất cả các nhóm nhiệm vụ, phân trang
POST
thêm một nhóm nhiệm vụ
/tasks/groups/group/[id]
GET
đáp ứng với trạng thái của một nhóm nhiệm vụ
DELETE
hủy bỏ / xóa nhóm nhiệm vụ
Cấu trúc này nói về tài nguyên, không phải làm gì với chúng. Những gì đang được thực hiện với các nguồn lực là mối quan tâm của một dịch vụ khác.
Một điểm quan trọng khác cần thực hiện là không nên chặn quá lâu trong trình xử lý yêu cầu HTTP. Giống như UI, giao diện HTTP phải phản hồi nhanh - trong một khoảng thời gian chậm hơn một vài bậc (vì lớp này xử lý IO).
Việc chuyển sang thiết kế giao diện HTTP quản lý chặt chẽ các tài nguyên có thể khó như việc di chuyển khỏi luồng UI khi nhấn nút. Nó yêu cầu máy chủ HTTP giao tiếp với các dịch vụ khác để thực thi các tác vụ thay vì thực thi chúng trong trình xử lý yêu cầu. Đây không phải là một triển khai nông cạn, nó là một sự thay đổi theo hướng.
Một số ví dụ về cách sử dụng lược đồ URI như vậy
Thực hiện một nhiệm vụ duy nhất và theo dõi tiến trình:
POST /tasks
với nhiệm vụ thực thi
GET /tasks/task/[id]
cho đến khi đối tượng phản hồi completed
có giá trị dương trong khi hiển thị trạng thái / tiến trình hiện tại
Thực hiện một nhiệm vụ duy nhất và chờ hoàn thành:
POST /tasks
với nhiệm vụ thực thi
GET /tasks/task/[id]?awaitCompletion=true
cho đến khi completed
có giá trị dương (có thể có thời gian chờ, đó là lý do tại sao điều này nên được lặp lại)
Thực hiện một nhóm nhiệm vụ và theo dõi tiến trình:
POST /tasks/groups
với nhóm các nhiệm vụ để thực hiện
GET /tasks/groups/group/[groupId]
cho đến khi thuộc tính đối tượng phản hồi completed
có giá trị, hiển thị trạng thái nhiệm vụ riêng lẻ (ví dụ 3 nhiệm vụ hoàn thành trong số 5)
Yêu cầu thực hiện cho một nhóm nhiệm vụ và chờ hoàn thành:
POST /tasks/groups
với nhóm các nhiệm vụ để thực hiện
GET /tasks/groups/group/[groupId]?awaitCompletion=true
cho đến khi trả lời với kết quả biểu thị sự hoàn thành (có thể có thời gian chờ, đó là lý do tại sao nên lặp lại)