Xem xét tình huống.Có thể REST trong thực tế thực sự là phi trạng thái?
Tôi đang viết một ứng dụng phân tích thống kê. Ứng dụng có nhiều tầng.
- Giao diện người dùng giao diện được viết cho nhiều loại thiết bị, máy tính để bàn, trình duyệt, thiết bị di động.
- servlet hạng trung cung cấp dịch vụ REST được gọi là các giao diện người dùng này.
- Phụ trợ thực hiện tính toán cực đoan của việc xử lý thống kê .
- nào giao tiếp với một cơ sở dữ liệu phụ trợ thêm
Do lý do mà phân tích thống kê đòi hỏi số lượng lớn sức mạnh xử lý, bạn sẽ không bao giờ mơ về ủy thác chế biến đó cho front-end.
Phân tích thống kê bao gồm các quy trình hoặc chuỗi các bước luồng công việc.
Một số bước có thể yêu cầu quá nhiều sức mạnh xử lý, bạn sẽ không muốn lặp lại chúng.
Nếu bạn có quy trình 20 bước, bạn không thể thực hiện bước 20 mà không thực hiện bước 19 đầu tiên, không thể thực hiện được mà không cần bước thực hiện đầu tiên 18, v.v.
Có các điểm quan sát, ví dụ: thống kê phải kiểm tra kết quả của các bước 3, 7, 9, 14, 19 trước khi yêu cầu phía máy khách tiến hành bước tiếp theo.
Mỗi bước trong số này là một yêu cầu được gọi là dịch vụ REST, để thông báo cho siêu máy tính phụ trợ để thiết lập dần mô hình thống kê trong bộ nhớ.
Có nhiều quy trình công việc. Một số quy trình công việc có thể tình cờ chia sẻ các kết quả bước . ví dụ: Flow [dry]: Step [7] có thể chia sẻ Flow [wet]: Step [10]. Do với số lượng xử lý liên quan, chúng tôi hoàn toàn ngăn chặn lặp lại một bước có thể xảy ra một cách tình cờ đã là được thực hiện bởi một luồng khác.
Do đó, bạn có thể thấy rằng trong dịch vụ REST được thiết kế, không thể yêu cầu được độc lập với bất kỳ yêu cầu nào trước đó.
Do đó, câu lệnh sau có thể đúng như thế nào?
Tất cả tương tác REST là không trạng thái. Tức là, mỗi yêu cầu có chứa tất cả thông tin cần thiết cho trình kết nối để hiểu yêu cầu , không phụ thuộc vào bất kỳ yêu cầu nào có thể có trước đó.
Rõ ràng, ứng dụng tôi mô tả, yêu cầu yêu cầu đó phải phụ thuộc vào yêu cầu trước đó. Có ba khả năng mà tôi có thể thấy liên quan đến ứng dụng này.
- Ứng dụng của tôi không tuân thủ REST vì ứng dụng không tuân thủ yêu cầu không quốc tịch. Nó có thể sử dụng khung công tác JAX-RS, nhưng sử dụng JAX-RS và tất cả các bẫy của REST không làm cho nó trở thành REST, đơn giản chỉ vì nó không đạt được các tiêu chuẩn không trạng thái.
- Ứng dụng của tôi bị thiết kế tồi tệ - tôi nên bỏ qua cố gắng tránh chi phí tài chính và thời gian khôi phục mô hình thống kê ngay cả khi mất từ 5 - 15 phút cho luồng công việc. Chỉ cần đảm bảo không có sự phụ thuộc vào các yêu cầu trước đó. Lặp lại các bước tốn kém khi cần thiết.
- Tiêu chí không trạng thái là lỗi thời. Sự hiểu biết của tôi về REST là lỗi thời/lỗi trong cộng đồng REST đã liên tục bỏ qua tiêu chí này.
Ứng dụng của tôi có được coi là RESTful không?
Câu hỏi mới: ISO 9000
Cuối cùng, trong trường hợp ứng dụng của tôi không hoàn toàn coi RESTful, sẽ tất cả các tài liệu tham khảo để "nghỉ ngơi" cần phải được bỏ qua để vượt qua chứng chỉ ISO 9000?
chỉnh sửa mới:
REST trong mảnh
OK, đồng nghiệp của tôi và tôi đã thảo luận này và quyết định gọi như một kiến trúc/mẫu REST trong mảnh = REST trong giai đoạn từng phần .
định nghĩa của bạn về "trạng thái" là gì? –
Dmitry - chính xác là câu hỏi của tôi. Chúng ta phải hỏi những bậc thầy định nghĩa REST. –
cơ sở dữ liệu chứa trạng thái nhưng có rất nhiều ứng dụng web được cơ sở dữ liệu hỗ trợ được xem là RESTful. Điều gì xảy ra nếu cơ sở dữ liệu hoặc một phần của nó nằm trong bộ nhớ? Về cơ bản, tôi tin rằng "trạng thái" mà kiến trúc ReST không nên duy trì là trạng thái phiên (dễ bay hơi), không phải trạng thái ứng dụng (doanh nghiệp). –