RPC và REST khác nhau ở điểm nào?

Remote Procedure Call (RPC) và REST là hai kiểu kiến trúc trong thiết kế API. API là cơ chế cho phép 2 thành phần phần mềm giao tiếp với nhau bằng một tập hợp các định nghĩa và giao thức. Các nhà phát triển phần mềm sử dụng các thành phần được phát triển trước đó hoặc của bên thứ ba để thực hiện các hàm, vì vậy họ không phải viết mọi thứ từ đầu. RPC API cho phép nhà phát triển gọi các hàm từ xa trong các máy chủ bên ngoài như thể những chức năng đó nằm trong phần mềm của họ. Ví dụ: Bạn có thể thêm chức năng trò chuyện vào ứng dụng bằng cách gọi từ xa các hàm nhắn tin trên một ứng dụng trò chuyện khác. Ngược lại, API REST cho phép bạn thực hiện các hoạt động dữ liệu cụ thể trên một máy chủ từ xa. Ví dụ: Ứng dụng của bạn có thể chèn hoặc sửa đổi dữ liệu nhân viên trên máy chủ từ xa bằng API REST.

Tìm hiểu về API »

Tìm hiểu về API RESTful »

Những điểm tương đồng giữa RPC và REST là gì?

Remote Procedure Call (RPC) và REST là cả hai cách thiết kế API. API rất cần thiết trong thiết kế web hiện đại và các hệ thống phân phối khác. Chúng cho phép hai ứng dụng hoặc dịch vụ phân phối, riêng biệt giao tiếp mà không cần biết chi tiết nội bộ về cách thức hoạt động của bên kia. Hai ứng dụng hoặc dịch vụ này có thể ít liên quan đến nhau ngoại trừ việc trao đổi dữ liệu ít. 

API cũng là một cơ chế chung cho thành phần phụ trợ của một chương trình (thành phần logic) để giao tiếp với thành phần trước của một chương trình (thành phần hiển thị). Khi bạn thiết kế các trang web và ứng dụng web với API thay vì liên kết phụ thuộc, bạn đảm bảo chúng có thể điều chỉnh quy mô và thay đổi với việc ghi lại mã ít hơn.

Tiếp theo, chúng ta sẽ thảo luận về những điểm tương đồng khác giữa RPC và API REST.

Tính trừu tượng

Mặc dù giao tiếp mạng là mục đích chính của API nhưng chính các giao tiếp cấp thấp hơn gây khó hiểu cho các nhà phát triển API. Điều này cho phép các nhà phát triển tập trung vào hàm hơn là triển khai kỹ thuật.

Môi trường truyền thông

Cả REST và RPC đều sử dụng HTTP làm giao thức cơ bản. Các định dạng tin nhắn phổ biến nhất trong RPC và REST là JSON và XML. JSON được ưa chuộng do tính dễ đọc và linh hoạt của nó.

Khả năng tương thích đa ngôn ngữ

Các nhà phát triển có thể triển khai API RESTful hoặc RPC API bằng bất kỳ ngôn ngữ nào do họ chọn. Miễn là phần tử giao tiếp mạng của API phù hợp với tiêu chuẩn giao diện RESTful hoặc RPC, bạn có thể ghi phần còn lại của mã bằng bất kỳ ngôn ngữ lập trình nào.

Nguyên tắc kiến trúc: RPC so với REST

Trong Remote Procedure Call (RPC), máy khách thực hiện lệnh gọi hàm từ xa (còn được gọi là phương thức hoặc thủ tục) trên máy chủ. Thông thường, một hoặc nhiều giá trị dữ liệu được truyền đến máy chủ trong khi gọi.

Ngược lại, máy khách REST yêu cầu máy chủ thực hiện một thao tác trên một tài nguyên máy chủ cụ thể. Các thao tác chỉ được giới hạn ở việc tạo, đọc, cập nhật và xóa (CRUD) và được chuyển tải dưới dạng động từ HTTP hoặc phương thức HTTP.

RPC tập trung vào các hàm hoặc hành động, trong khi REST tập trung vào tài nguyên hoặc đối tượng.

Nguyên tắc RPC

Tiếp theo, chúng tôi thảo luận một số nguyên tắc mà các hệ thống RPC thường tuân theo. Tuy nhiên, những nguyên tắc này không được tiêu chuẩn hóa như REST.

Gọi từ xa

Một lệnh gọi RPC được thực hiện bởi một máy khách đến một hàm trên máy chủ từ xa như thể được gọi cục bộ đến máy khách.

Truyền tham số

Máy khách thường gửi các tham số đến một hàm máy chủ, giống như một hàm cục bộ.

Giả lập

Các giả lập hàm tồn tại trên cả máy khách và máy chủ. Về phía máy khách, nó thực hiện lệnh gọi hàm. Trên máy chủ, nó gọi hàm thực tế.

Nguyên tắc REST

Các nguyên tắc REST được tiêu chuẩn hóa. API REST phải tuân theo các nguyên tắc này để được phân loại là RESTful.

Máy khách-máy chủ

Kiến trúc máy khách-máy chủ của REST tách các máy khách và máy chủ. Xử lý như những hệ thống độc lập.

Phi trạng thái

Máy chủ không lưu giữ bản ghi về trạng thái của máy khách giữa các yêu cầu của máy khách.

Có thể lưu trữ trong bộ nhớ đệm 

Các hệ thống máy khách hoặc trung gian có thể lưu trữ trong bộ nhớ đệm các phản hồi của máy chủ dựa trên việc một máy khách chỉ định rằng phản hồi có thể được lưu trong bộ nhớ đệm hay không.

Hệ thống phân lớp

Các trung gian có thể tồn tại giữa máy khách và máy chủ. Cả máy khách và máy chủ đều không biết về nhau và hoạt động như thể chúng được kết nối trực tiếp.

Giao diện thống nhất

Máy khách và máy chủ giao tiếp thông qua một tập hợp các hướng dẫn và định dạng nhắn tin được chuẩn hóa với API REST. Tài nguyên được xác định bằng URL của chúng và URL này được gọi là điểm cuối API REST.

Cách thức hoạt động: RPC so với REST

Trong Remote Procedure Call (RPC), máy khách sử dụng HTTP POST để gọi một hàm cụ thể theo tên. Các nhà phát triển phía máy khách phải biết trước tên hàm và các tham số để RPC hoạt động.

Trong REST, máy khách và máy chủ sử dụng các động từ HTTP như GET, POST, PATCH, PUT, DELETE và OPTIONS để thực hiện các tùy chọn. Các nhà phát triển chỉ cần biết URL tài nguyên máy chủ và không phải quan tâm đến các tên hàm riêng lẻ.

Bảng sau đây hiển thị loại mã mà máy khách sử dụng để thực hiện các hành động tương tự trong RPC và REST.

Hành động

RPC

REST

Nhận xét

Thêm sản phẩm mới vào danh sách sản phẩm

POST /addProduct HTTP/1.1

HOST: api.example.com

Content-Type: application/json

{"name": "T-Shirt", "price": "22.00", "category": "Clothes"}

POST /products HTTP/1.1

HOST: api.example.com

Content-Type: application/json

{"name": "T-Shirt", "price": "22.00", "category": "Clothes"}

RPC sử dụng POST trên hàm và REST sử dụng POST trên URL.

Truy xuất thông tin chi tiết của sản phẩm

POST /getProduct HTTP/1.1

HOST: api.example.com

Content-Type: application/json

{"productID": "123”}

GET /products/123 HTTP/1.1

HOST: api.example.com

RPC sử dụng POST trên hàm và truyền tham số làm đối tượng JSON. REST sử dụng GET trên URL và truyền tham số trong URL.

Cập nhật giá của sản phẩm

POST /updateProductPrice HTTP/1.1

HOST: api.example.com

Content-Type: application/json

{"productId": "123", "newPrice": "20.00"}

PUT /products/123 HTTP/1.1

HOST: api.example.com

Content-Type: application/json

{"price": "20.00"}

RPC sử dụng POST trên hàm và truyền tham số làm đối tượng JSON. REST sử dụng PUT trên URL và truyền tham số trong URL và làm đối tượng JSON.

Xóa một sản phẩm

POST /deleteProduct HTTP/1.1

HOST: api.example.com

Content-Type: application/json

{"productId": "123""}

DELETE /products/123 HTTP/1.1

HOST: api.example.com

RPC sử dụng POST trên hàm và truyền tham số làm đối tượng JSON. REST sử dụng DELETE trên URL và truyền tham số trong URL.

Những điểm khác biệt chính: so với REST

Remote Procedure Call (RPC) và REST là hai cách thiết kế giao diện hệ thống máy khách và máy chủ tương ứng để giao tiếp qua Internet. Tuy nhiên, cấu trúc, cách thực hiện và các nguyên tắc cơ bản khác nhau. Các hệ thống được thiết kế với REST được gọi là API RESTful, trong khi các hệ thống được thiết kế với RPC chỉ đơn giản là RPC API.

Tiếp theo, chúng tôi sẽ chỉ ra thêm một số điểm khác biệt nữa.

Thời gian phát triển

RPC được phát triển vào cuối những năm 1970 và đầu những năm 1980, trong khi REST là thuật ngữ đầu tiên được đặt ra bởi nhà khoa học máy tính Roy Fielding vào năm 2000.

Định dạng hoạt động

API REST có một tập hợp các thao tác máy chủ được tiêu chuẩn hóa vì các phương thức HTTP, nhưng RPC API thì không. Một số cách thực hiện RPC cung cấp khuôn khổ cho các thao tác tiêu chuẩn hóa.

Định dạng truyền dữ liệu

REST có thể truyền bất kỳ định dạng dữ liệu và nhiều định dạng, như JSON và XML, trong cùng một API.

Tuy nhiên, với RPC API, định dạng dữ liệu được chọn bởi máy chủ và cố định trong quá trình thực hiện. Bạn có thể triển khai JSON RPC hoặc XML RPC cụ thể và máy khách không có tính linh hoạt.

Tiểu bang

Trong ngữ cảnh của API, phi trạng thái đề cập đến một nguyên tắc thiết kế trong đó máy chủ không lưu trữ bất kỳ thông tin nào về các tương tác trước đó của máy khách. Mỗi yêu cầu API được xử lý độc lập và máy chủ không dựa vào bất kỳ trạng thái máy khách được lưu trữ nào để xử lý yêu cầu.

Các hệ thống REST phải luôn phi trạng thái, nhưng các hệ thống RPC có thể có trạng thái hoặc phi trạng thái, tùy thuộc vào thiết kế.

Thời điểm sử dụng: RPC so với REST

Remote Procedure Call (RPC) thường được sử dụng để gọi các hàm từ xa trên máy chủ yêu cầu kết quả hành động. Bạn có thể sử dụng khi bạn yêu cầu tính toán phức tạp hoặc muốn kích hoạt một thủ tục từ xa trên máy chủ, với quá trình ẩn khỏi máy khách.

Dưới đây là các thao tác mà RPC là một lựa chọn phù hợp:

  • Chụp ảnh bằng máy ảnh của thiết bị từ xa
  • Sử dụng thuật toán máy học trên máy chủ để xác định gian lận
  • Chuyển tiền từ tài khoản này sang tài khoản khác trên hệ thống ngân hàng từ xa
  • Khởi động lại máy chủ từ xa

API REST thường được sử dụng để thực hiện các thao tác tạo, đọc, cập nhật và xóa (CRUD) trên một đối tượng dữ liệu trên máy chủ. Điều này làm cho API REST phù hợp với các trường hợp khi dữ liệu máy chủ và cấu trúc dữ liệu cần được hiển thị đồng nhất.

Dưới đây là các thao tác mà API REST là một lựa chọn phù hợp:

  • Thêm sản phẩm vào cơ sở dữ liệu
  • Truy xuất nội dung của danh sách phát nhạc
  • Cập nhật địa chỉ của một người
  • Xóa bài đăng trên blog

Tại sao REST thay thế RPC?

Mặc dù các API web REST là tiêu chuẩn ngày nay nhưng Remote Procedure Call (RPC) vẫn chưa biến mất. API REST thường được sử dụng trong các ứng dụng vì các nhà phát triển có thể dễ hiểu và triển khai hơn. Tuy nhiên, RPC vẫn tồn tại và được sử dụng khi phù hợp với trường hợp sử dụng tốt hơn.

Các triển khai RPC hiện đại, chẳng hạn như gRPC, hiện đang phổ biến hơn. Đối với một số trường hợp sử dụng, gRPC hoạt động tốt hơn RPC và REST. gRPC cho phép truyền phát trực tuyến thông tin liên lạc giữa máy khách-máy chủ thay vì mô hình trao đổi dữ liệu yêu cầu và phản hồi.

Tóm tắt các điểm khác biệt giữa RPC và REST

 

RPC

REST

Đó là gì?

Một hệ thống cho phép máy khách từ xa gọi thủ tục trên máy chủ dưới dạng cục bộ. 

Một tập hợp các quy tắc định hình quá trình trao đổi dữ liệu có cấu trúc giữa một máy khách và một máy chủ.

Trường hợp sử dụng

Thực hiện các hành động trên máy chủ từ xa.

Các thao tác tạo, đọc, cập nhật và xóa (CRUD) trên các đối tượng từ xa.

Phù hợp nhất

Khi yêu cầu tính toán phức tạp hoặc kích hoạt quy trình từ xa trên máy chủ.

Khi dữ liệu máy chủ và cấu trúc dữ liệu cần được trình bày thống nhất.

Có trạng thái

Phi trạng thái hoặc có trạng thái.

Phi trạng thái.

Định dạng truyền dữ liệu

Trong một cấu trúc nhất quán được xác định bởi máy chủ và được thực thi trên máy khách.

Trong một cấu trúc được xác định độc lập bởi máy chủ. Nhiều định dạng khác nhau có thể được truyền trong cùng một API.

AWS có thể hỗ trợ các yêu cầu của bạn về API như thế nào?

Amazon Web Services (AWS) có một loạt các dịch vụ và công cụ để giúp các nhà thiết kế API xây dựng, chạy và quản lý các ứng dụng và dịch vụ hiện đại dựa trên API. Để biết thêm thông tin, hãy đọc về cách xây dựng các ứng dụng hiện đại trên AWS.

Dưới đây là các ví dụ về các dịch vụ AWS có thể hỗ trợ đáp ứng các yêu cầu API của bạn:

  • Cổng API Amazon cho phép các nhà phát triển tạo, xuất bản và quản lý API trên quy mô lớn. Với Cổng API, bạn có thể xây dựng các API REST được tối ưu hóa cho các kiến trúc dịch vụ vi mô và ứng dụng web được container hóa.
  • Cân bằng tải linh hoạt (ELB) phân phối lưu lượng mạng để cải thiện khả năng điều chỉnh quy mô ứng dụng. Dịch vụ này có thể định tuyến và cân bằng tải lưu lượng gRPC giữa các dịch vụ vi mô hoặc giữa các máy khách và dịch vụ hỗ trợ gRPC. Điều này cho phép quản lý lưu lượng truy cập gRPC liền mạch trong các kiến trúc phần mềm mà không làm thay đổi bất kỳ cơ sở hạ tầng cơ bản nào cho máy khách hoặc dịch vụ của khách hàng.
  • Mạng Đám mây riêng ảo của Amazon (Amazon VPC) là một dịch vụ mạng ứng dụng liên tục kết nối, giám sát và bảo mật thông tin liên lạc giữa các dịch vụ của bạn. Tự động điều chỉnh quy mô tài nguyên mạng và điện toán để hỗ trợ khối lượng công việc HTTP, HTTPS và gRPC băng thông cao.

Bắt đầu sử dụng API REST và API Remote Procedure Call (RPC) trên AWS bằng cách tạo tài khoản ngay hôm nay.