8.1 Cách tiếp cận API từ xa

Tất cả các lập trình viên đều mắc lỗi giống nhau khi xây dựng kiến ​​trúc máy khách-máy chủ. Họ bắt đầu xử lý các yêu cầu tới máy chủ như các cuộc gọi phương thức .

Bạn muốn bắt đầu quá trình tạo báo cáo trên máy chủ, tại sao không gửi cho nó một yêu cầu như:

http://server.com/startDocumentGeneration?params

Và làm cách nào để tải báo cáo sau khi hoàn thành? Để làm điều này, chúng ta sẽ viết một phương thức khác:

http://server.com/getDocument

Máy chủ HttpSessionlưu trữ thông tin trên tài liệu của chúng tôi và ngay sau khi tài liệu được tạo, máy chủ sẽ trả lại thông tin đó.

Cách tiếp cận tuyệt vời. Hay không?

Cách tiếp cận thực sự khủng khiếp. Vấn đề là máy chủ phải nhớ số tài liệu. Nói cách khác, để xử lý các cuộc gọi phương thức mới đúng cách, máy chủ phải nhớ kết quả của việc gọi các phương thức trước đó.

Trên web, đây là một vấn đề lớn. Internet có thể biến mất, trình duyệt có thể đóng. Trang có thể được tải lại hoặc vô tình nhấp vào một liên kết, v.v. Và máy chủ sẽ tiếp tục lưu trữ hàng megabyte dữ liệu từ các yêu cầu trước đó của người dùng ...

Để làm việc thoải mái với máy chủ, bạn không thể mong đợi rằng mình sẽ luôn có sẵn dữ liệu của các yêu cầu trước đó đối với máy chủ.

Làm thế nào để gọi các phương thức của máy chủ? Câu trả lời đúng sẽ rất tệ: không đời nào!

8.2 Phương pháp REST

Các lập trình viên quay lại vấn đề cơ bản và nhớ rằng ban đầu yêu cầu chứa đường dẫn đến tệp trên máy chủ:

http://server.com/path?params

Và chúng tôi quyết định sử dụng phương pháp này một cách tối đa.

Lúc này máy chủ được coi như một kho chứa dữ liệu hiển thị ra bên ngoài dưới dạng một cái cây .

Nếu bạn muốn lấy danh sách tất cả người dùng, hãy gọi truy vấn:

http://server.com/users

Nếu bạn muốn lấy dữ liệu về người dùng 113, hãy chạy truy vấn:

http://server.com/users/113

Và như vậy, tất cả trong cùng một tĩnh mạch.

Một lần nữa, máy chủ được xem như một kho lưu trữ dữ liệu có thể nhìn thấy bên ngoài dưới dạng cây.

Dữ liệu có thể được nhận - GET request , sửa đổi - POST request và xóa - DELETE request .

8.3 Không trạng thái

Giao thức REST của tương tác giữa máy khách và máy chủ yêu cầu điều kiện sau: trong khoảng thời gian giữa các yêu cầu từ máy khách, không có thông tin nào về trạng thái của máy khách được lưu trữ trên máy chủ.

Tất cả các yêu cầu từ máy khách phải được tạo theo cách sao cho máy chủ nhận được tất cả thông tin cần thiết để thực hiện yêu cầu mỗi lần . Trạng thái phiên được lưu ở phía máy khách.

Trong quá trình xử lý yêu cầu của khách hàng, khách hàng được coi là ở trạng thái chuyển tiếp. Mỗi trạng thái ứng dụng riêng lẻ được biểu thị bằng các liên kết có thể được gọi vào lần truy cập tiếp theo của máy khách.

8.4 Tính đồng nhất của giao diện

Tất cả các đường dẫn được sử dụng để truy xuất các đối tượng từ máy chủ đều được chuẩn hóa. Điều này rất thuận tiện, đặc biệt nếu bạn đang lấy dữ liệu từ các máy chủ REST khác.

Tất cả các giao diện đối tượng phải tuân theo ba điều kiện:

nhận dạng tài nguyên

Tất cả các tài nguyên được xác định trong các yêu cầu bằng URI. Các tài nguyên bên trong máy chủ tách biệt với các dạng xem được trả lại cho các máy khách. Ví dụ: một máy chủ có thể gửi dữ liệu từ cơ sở dữ liệu dưới dạng HTML, XML hoặc JSON, cả hai đều không phải là loại lưu trữ trong máy chủ.

Thao túng tài nguyên thông qua một chế độ xem

Nếu máy khách lưu trữ một đại diện của tài nguyên, bao gồm cả siêu dữ liệu, thì nó có đủ thông tin để sửa đổi hoặc xóa tài nguyên trên máy chủ.

Tin nhắn "tự mô tả"

Mỗi tin nhắn chứa đủ thông tin để hiểu cách xử lý nó. Ví dụ: nếu bạn cần thông tin về người dùng, thì máy chủ sẽ trả về cho bạn một đối tượng JSON, nơi sẽ có các trường tên, địa chỉ.

Không nên xảy ra trường hợp khách hàng cần biết rằng số đầu tiên trong phản hồi là tuổi và số thứ hai là ngày sinh.

8.5 Bộ nhớ đệm

Cách tiếp cận REST giả định rằng các yêu cầu dữ liệu được thực hiện thông qua giao thức HTTP. Do đó, các đối tượng được lấy bằng cách gọi một yêu cầu GET. Điều này có nghĩa là chúng, giống như tất cả các tài nguyên nhận được thông qua yêu cầu GET, phải tuân theo tất cả các quy tắc để lưu vào bộ nhớ cache các tài nguyên HTTP.

Nghĩa là, dữ liệu nhận được qua API REST được lưu vào bộ đệm giống như bất kỳ tài nguyên tĩnh nào trên máy chủ web. Sắc đẹp :)