2015-07-29 32 views
22

Vài tháng trước, HTTP/2 đã được xuất bản dưới dạng RFC7540. Điều này sẽ ảnh hưởng như thế nào đến API REST hiện có được xây dựng trên HTTP/1.1API REST với HTTP/2

Theo wikipedia, HTTP/2 đã thêm các tính năng mới. Làm thế nào chúng ta có thể tận dụng lợi thế của các tính năng mới này?

Hãy thoải mái cải thiện câu hỏi này.

Cảm ơn.

Trả lời

18

Ngữ nghĩa chính của HTTP đã được giữ lại trong HTTP/2. Điều này có nghĩa là nó vẫn có HTTP methods chẳng hạn như GET, POST, v.v. HTTP headersURIs để xác định tài nguyên.

Điều gì đã thay đổi trong HTTP/2 đối với HTTP/1.1 là cách ngữ nghĩa HTTP (ví dụ: "Tôi muốn PUT tài nguyên /foo trên máy chủ domain.com") được vận chuyển qua dây.

Trong ánh sáng này, các API REST được xây dựng trên HTTP/1.1 sẽ tiếp tục hoạt động một cách minh bạch như trước đây, không có thay đổi nào được thực hiện đối với các ứng dụng. Thùng chứa web chạy các ứng dụng sẽ chăm sóc dịch định dạng dây mới thành ngữ nghĩa HTTP thông thường thay mặt cho các ứng dụng và ứng dụng chỉ thấy ngữ nghĩa HTTP cấp cao hơn, cho dù nó được chuyển qua HTTP/1.1 hay HTTP/2 trên dây.

Bởi vì định dạng dây HTTP/2 hiệu quả hơn (đặc biệt là do ghép kênh và nén), các API REST ở trên cùng của HTTP/2 cũng sẽ có lợi cho việc này.

Cải tiến chính khác trong HTTP/2, HTTP/2 Push, nhắm mục tiêu tải xuống hiệu quả các tài nguyên tương quan và có thể không hữu ích trong REST usecase.

Yêu cầu điển hình của HTTP/2 sẽ được triển khai trên TLS. Điều này yêu cầu người triển khai di chuyển từ http đến https và thiết lập cơ sở hạ tầng cần thiết để hỗ trợ (mua chứng chỉ từ cơ quan đáng tin cậy, gia hạn chúng, v.v.).

+0

Vì vậy, bạn không phải thay đổi bất kỳ điều gì liên quan đến ứng dụng web/api?Chỉ cần cấu hình nó trên máy chủ (bao gồm TLS) và nó hoạt động đúng không? – greenhoorn

+0

Chính xác. Tôi không thể nói cho tất cả các máy chủ web ra khỏi đó, nhưng đối với Jetty (tôi là một người gửi) bạn chỉ cần cấu hình Jetty với mô-đun 'http2' và bạn tốt để đi. – sbordet

4

Thông số HTTP/2 cố ý không đưa ra ngữ nghĩa mới cho lập trình viên ứng dụng. Trong thực tế, các thư viện phía máy khách lớn (NSUrlSession trên iOS, OkHttp trên Android, React Native, JS trong môi trường trình duyệt) hỗ trợ HTTP/2 một cách minh bạch cho bạn với tư cách là một nhà phát triển.

Do khả năng ghép nối HTTP/2 nhiều yêu cầu qua kết nối TCP đơn, một số nhà phát triển ứng dụng tối ưu được triển khai trong quá khứ, chẳng hạn như request batching sẽ trở nên lỗi thời và thậm chí phản tác dụng.

Tính năng đẩy có thể sẽ được sử dụng để phân phối các sự kiện và sẽ có thể thay thế bỏ phiếu và có thể là các ổ cắm web trong một số ứng dụng. Một ứng dụng có thể có của tính năng đẩy máy chủ trong HTTP/2 đến REST API là khả năng tăng tốc các ứng dụng cũ trên mức proxy ngược bằng cách đẩy các yêu cầu dự đoán trước thời hạn cho khách hàng, thay vì chờ chúng đến. I E. đẩy câu trả lời cho hồ sơ người dùng và các cuộc gọi API phổ biến khác ngay sau khi yêu cầu đăng nhập hoàn tất.

Tuy nhiên, việc đẩy chưa được triển khai rộng rãi trên toàn bộ máy chủ và cơ sở hạ tầng khách hàng.

+0

Tôi đoán HTTP/2 giới thiệu một số ngữ nghĩa mới (chẳng hạn như Server Push), nhưng nó không thay đổi bất kỳ ngữ nghĩa HTTP/1.x hiện có nào, do đó nó tương thích ngược. Do đó các ứng dụng web có thể được nâng cấp một cách minh bạch lên HTTP/2. – zeronone