OK, tôi đã biết tất cả những lý do trên giấy tại sao tôi nên không sử dụng một HTTP GET khi thực hiện cuộc gọi RESTful để cập nhật trạng thái của một cái gì đó trên máy chủ. Vì vậy, có thể trả về dữ liệu khác nhau mỗi lần. Và tôi biết điều này là sai cho sau này 'trên giấy' lý do:Tại sao sử dụng HTTP GET để cập nhật trạng thái trên máy chủ trong một cuộc gọi RESTful không chính xác?
- HTTP GET cuộc gọi nên được idempotent
- N> 0 cuộc gọi nên luôn luôn GET cùng một dữ liệu trở lại
- Vi phạm HTTP đặc tả
- Cuộc gọi HTTP GET thường chỉ đọc
Và tôi chắc chắn có nhiều lý do hơn. Nhưng tôi cần một ví dụ đơn giản cụ thể để biện minh khác hơn là "Vâng, điều đó vi phạm HTTP Spec!". ... hoặc ít nhất tôi đang hy vọng một. Tôi có cũng đã đọc những điều sau đây mà có nhiều dọc theo dòng của danh sách trên: Does it violate the RESTful when I write stuff to the server on a GET call? & HTTP POST with URL query parameters -- good idea or not?
Ví dụ, ai đó có thể biện minh cho việc nêu trên và tại sao nó là sai/thực hành xấu/không chính xác để sử dụng một HTTP GET nói với các cuộc gọi RESTful sau đây
"MyRESTService/GetCurrentRecords?UpdateRecordID=5&AddToTotalAmount=10"
Tôi biết điều đó sai, nhưng hy vọng nó sẽ giúp cung cấp một ví dụ để trả lời câu hỏi ban đầu của tôi. Vì vậy, ở trên sẽ cập nhật recordID = 5 với AddToTotalAmount = 10 và sau đó trả về các bản ghi được cập nhật. Tôi biết một POST nên được sử dụng, nhưng giả sử tôi đã sử dụng GET.
Cách chính xác và trả lời câu hỏi của tôi hoặc điều này có gây ra sự cố thực tế không? Ngoài tất cả các vi phạm từ danh sách dấu đầu dòng ở trên, làm cách nào để sử dụng HTTP GET để thực hiện việc trên gây ra một số vấn đề thực sự? Quá nhiều lần tôi đi vào một kịch bản mà tôi có thể biện minh cho mọi việc bằng "Bởi vì tài liệu đã nói như vậy", nhưng tôi cần biện minh và hiểu rõ hơn về điều này.
Cảm ơn!
Nó không gây ra vấn đề thực sự nếu bạn đồng ý với việc truy vấn cập nhật của bạn có thể được kích hoạt lại bất kỳ lúc nào (truy vấn bộ nhớ cache, bot, v.v.). Kết luận của tôi là nếu một người trong nhóm của tôi, biết vấn đề bởi vì anh ấy đã đọc các câu hỏi SO mà bạn đã liên kết, sử dụng GET cho một truy vấn cập nhật, thì tôi nên xem xét một biện pháp kỷ luật. –
bạn sẽ nói gì nếu ai đó đã viết phương thức có tên GetSomething (id, giá trị) trong một số API của bên thứ ba và bạn phải sử dụng nó? –
Đó là một chút giống như hỏi tại sao một chức năng gọi là "GetSomeResource" không thể trong thực tế đặt tài nguyên. Về mặt kỹ thuật, bạn có thể làm điều đó nhưng sau đó may mắn duy trì API và chúc may mắn cho bất kỳ ai phải sử dụng nó. –