2010-06-06 36 views
6

Trình tạo số ngẫu nhiên nên được triển khai đúng cách như thế nào trong REST?REST - nhận số ngẫu nhiên GET hoặc POST?

GET RANDOM/ 

hoặc ..

POST RANDOM/ 

Máy chủ trả về một số ngẫu nhiên khác nhau mỗi lần.

Tôi có thể xem đối số cho cả hai cách.

+2

tôi nói GET, những gì đối số nào bạn có cho POST? Bắt một số ngẫu nhiên không tạo ra bất cứ điều gì phía máy chủ, cũng không phải bất kỳ tác dụng phụ? – Mic

+0

Về mặt kỹ thuật, nó sửa đổi trạng thái máy chủ .. Nhưng nếu bạn nhìn nó theo cách đó, mọi yêu cầu của bất kỳ loại nào đều phải ở phía sau POST, vì chúng đều sửa đổi một thứ gì đó, tầm thường hay không: P (Tôi không khuyến nghị điều này) – Jeriko

Trả lời

7

tôi muốn nói điều này cũng giống như cho một trang được trả lại có chứa thời gian hiện tại - và nhiều trang trong số này được thực hiện bằng GET. Tóm lại, tìm nạp một số ngẫu nhiên (hoặc thời gian) trạng thái của máy chủ không thay đổi - cả thời gian và số ngẫu nhiên có thể được mô tả như là một sự quan sát của một sự kiện bên ngoài. Ví dụ. http://random.org sử dụng tiếng ồn khí quyển.

GET có vẻ phù hợp nhất, mặc dù bộ nhớ đệm sẽ cần phải bị vô hiệu hóa thông qua các tiêu đề thích hợp, ví dụ:

Expires: <Current Time> 
Last-Modified: <Current Time> 
Cache-Control: no-cache, must-revalidate 
Pragma: no-cache 

Nếu bạn muốn đảm bảo rằng các nội dung phục vụ đã hết hạn:

Để đánh dấu một câu trả lời là "đã hết hạn", một máy chủ gốc sẽ gửi một Hết hạn ngày đó là tương đương với Ngày giá trị tiêu đề. (Xem các quy tắc cho tính toán hết hạn trong phần 13.2.4.)

+2

Bạn có thể đặt ngày hết hạn trước thời điểm hiện tại không? –

2

Chắc chắn GET. Mặc dù nó có thể sửa đổi trạng thái phía máy chủ (nếu nó sử dụng một RNG giả), đó chỉ là một chi tiết triển khai mà máy khách không quan tâm.

-3
  • định nghĩa của REST-gọi với GET: kết quả phải giống nhau -> không GET.
  • định nghĩa của REST cuộc gọi với PUT: kết quả của các cuộc gọi có thể được lặp lại, máy chủ không nên có vấn đề với nó -> sử dụng PUT

POST là phương pháp yếu nhất và có thể sử dụng nếu khác không hữu ích.

Tại sao không GET: kết quả của GET-cuộc gọi có thể được dấu ấn (cache-header, etag oder proxy trong suốt) và bạn không sẽ nhận được kết quả ngẫu nhiên ...

+0

Nhưng bạn có thể tắt bộ nhớ đệm bằng các tiêu đề thích hợp. – erikkallen

+4

REST không nói rằng GET phải luôn đáp ứng với cùng một phản hồi từ cùng một URI. Phản hồi phải thể hiện cùng một tài nguyên, nhưng nội dung có thể thay đổi theo thời gian. –

+0

@ Darrel: Bạn nói đúng. Một GET-yêu cầu không sửa đổi tài nguyên anyway, trong thời gian sống reosource có thể thay đổi! –