(xin lỗi, lần đầu tiên tôi đã bỏ qua / chỉnh sửa / và / xóa / trong (2) ...)
Ý tưởng của URI là nó là một định danh của một tài nguyên có thể định địa chỉ , chứ không phải là một lời gọi phương thức . Vì vậy, URI nên trỏ đến một tài nguyên cụ thể. Và nếu bạn trì hoãn URI, bạn sẽ luôn nhận được cùng một tài nguyên.
Đó là, bạn nên nghĩ về các URI giống như cách bạn nghĩ về Khóa chính của một hàng trong cơ sở dữ liệu. Nó xác định duy nhất một cái gì đó: Mã định danh tài nguyên chung.
Vì vậy, cho dù bạn sử dụng số nhiều hay số ít, URI nên là một định danh chứ không phải là một lời gọi . Những gì bạn đang cố gắng thực hiện trong phương thức, cụ thể là: GET (get), PUT (tạo / cập nhật), DELETE (xóa) hoặc POST (mọi thứ khác).
Vì vậy, "/ item / xóa / 123" phá vỡ REST vì nó không trỏ đến tài nguyên, nó giống như một lời gọi phương thức.
(Ngoài ra, về mặt ngữ nghĩa, bạn sẽ có thể NHẬN một URI, quyết định nó đã lỗi thời và sau đó XÓA cùng một URI - bởi vì đó là một định danh. sau đó đi ngược lại với ngữ nghĩa HTTP. Bạn đang phát 2 hoặc nhiều URI cho mỗi tài nguyên trong đó 1 sẽ làm.)
Bây giờ, mánh gian lận là thế này: không có định nghĩa rõ ràng thực sự về tài nguyên là gì và không phải là tài nguyên, vì vậy, cách tránh phổ biến trong REST là định nghĩa một "danh từ xử lý" và trỏ URI tới đó. Đó là khá nhiều trò chơi chữ, nhưng nó đáp ứng ngữ nghĩa.
Vì vậy, nếu, ví dụ, bạn thực sự không thể sử dụng điều này vì một số lý do:
DELETE /items/123
bạn có thể tuyên bố với thế giới rằng bạn có tài nguyên xử lý "xóa" và sử dụng
POST /items/deletor { id: 123 }
Bây giờ, nó trông rất giống RPC (Cuộc gọi thủ tục từ xa), nhưng nó rơi vào lỗ hổng lớn của mệnh đề "xử lý dữ liệu" của đặc tả POST có tên trong thông số HTTP.
Tuy nhiên, việc đó là một điều đặc biệt và nếu bạn có thể sử dụng PUT chung để tạo / cập nhật, XÓA để xóa và POST để chắp thêm, tạo và mọi thứ khác, thì bạn nên sử dụng HTTP theo tiêu chuẩn hơn. Nhưng nếu bạn có một trường hợp khó khăn như "cam kết" hoặc "xuất bản" hoặc "tái cấu trúc", thì trường hợp sử dụng danh từ bộ xử lý đáp ứng các trình lọc REST và vẫn cung cấp cho bạn ngữ nghĩa bạn cần.
PUT
vàDELETE
, tôi sẽ ưu tiên thêm nó vào đường dẫn, không phân biệt nó với một chuỗi truy vấn. Đây không phải là một sửa đổi chuỗi truy vấn cho một hoạt động hiện có; đó là một hoạt động riêng biệt.