Tôi đang viết một tài liệu YAML bằng cách sử dụng công cụ chuyển đổi để thiết kế một phương thức RESTful API để nhân bản một tài nguyên. Tôi có một vài lựa chọn và không biết cái nào là tốt nhất. Xin vui lòng ai đó có thể tư vấn cho?Thiết kế REST API để sao chép tài nguyên
Options:
- từ bỏ trách nhiệm của nhân bản đối tượng tài nguyên cho người tiêu dùng (nơi người tiêu dùng gán giá trị cho các thuộc tính trên một đối tượng mới và sau đó tạo ra một đối tượng mới), quá trình này sẽ cần phải bao gồm hai yêu cầu đối với API: một GET đối với tài nguyên cho đối tượng nguồn và sau đó là POST cho tài nguyên đó để tạo tài nguyên mới. Điều này giống như người tiêu dùng có quá nhiều trách nhiệm.
- Sử dụng tiện ích mở rộng HTTP WebDAV cung cấp phương thức COPY (see here). Nó sẽ xuất hiện rằng đây là chính xác những gì tôi muốn cho nhân bản. Tuy nhiên, tôi muốn tuân thủ các phương pháp tiêu chuẩn càng nhiều càng tốt
- Đăng lên/{resource}? ResourceIdToClone = {id} trong đó resourceIdToClone là tham số tùy chọn. Điều này sẽ xung đột với một đường dẫn API mà tôi đã có để tạo tài nguyên, nơi tôi thêm một lược đồ vào cơ thể POST. Điều đó có nghĩa là sử dụng POST tới/{resource}/để tạo và nhân bản và điều đó sẽ vi phạm SRP.
- Thêm tài nguyên mới có tên 'CloneableResource' và thực hiện POST đến/CloneableResource/{resource_type}/{resource_source_id}. Ví dụ về nhân bản một con cừu, bạn sẽ tạo một POST tới/CloneableResource/Sheep/10. Bằng cách này, nó sẽ có thể dính vào việc sử dụng các phương thức HTTP tiêu chuẩn, sẽ không có xung đột với bất kỳ đường dẫn tài nguyên nào khác (hoặc vi phạm SRP). Tuy nhiên, tôi sẽ thêm một loại mới và có khả năng thừa cho miền. Tôi cũng không thể nghĩ ra một kịch bản khi người tiêu dùng muốn thực hiện bất kỳ điều gì khác ngoài POST cho tài nguyên này, do đó, nó có vẻ như một mùi mã với tôi.
- Phương thức GET/resources/{id}? = Clone. Một trong những lợi thế ở đây là không có tài nguyên bổ sung nào được yêu cầu và nó có thể được xác định bởi tham số truy vấn tùy chọn đơn giản. Tôi biết rằng một trong những rủi ro ở đây là có thể nguy hiểm khi cung cấp khả năng đăng bài hoặc xóa bằng phương thức GET nếu URL nằm trong trang web vì nó có thể được công cụ tìm kiếm thu thập thông tin.
Cảm ơn bạn đã được trợ giúp!
Cảm ơn bạn đã trả lời Julian. Đây là một lựa chọn thuận tiện và không có nghi ngờ về những gì phương pháp cho phép người tiêu dùng làm. Tuy nhiên, tôi tin rằng gắn bó với các phương thức HTTP chuẩn là cách tốt nhất để chuyển tiếp vì nó sẽ đơn giản hóa API của tôi và tránh trường hợp có thể đạt được kết quả tương tự theo hai cách khác nhau (nhân bản tài nguyên bằng cách sử dụng COPY hoặc thực hiện GET với tài nguyên rồi POST). Tôi muốn hạn chế người tiêu dùng chỉ có một phương pháp duy nhất, nhất quán để đạt được một bản sao tài nguyên qua API của tôi –