Tin tức và phân tích của tất cả các thiết bị di động

Chọn cái nào cho dự án tiếp theo của bạn [2023]

Bạn sẽ thường xuyên gặp phải REST và gRPC khi làm việc với API. Mặc dù Rest đã thống trị lĩnh vực này trong nhiều năm nhưng gRPC vẫn là một đối thủ xứng tầm.

Rest và gPRC là hai cách khác nhau để thiết kế API. API hoạt động như cầu nối giao tiếp giữa các dịch vụ, có thể đại diện cho các hệ thống phức tạp nằm trên các máy tính khác nhau hoặc được viết bằng các ngôn ngữ khác nhau.

Bài viết này giới thiệu cả Rest và gRPC, chia sẻ những điểm tương đồng và khác biệt của chúng cũng như nơi chúng được sử dụng.

Nghỉ ngơi là gì?

Chuyển giao trạng thái đại diện là một cách tiếp cận kiến ​​trúc đối với phần mềm đưa ra các quy tắc trao đổi dữ liệu giữa các thành phần phần mềm. Phần còn lại dựa trên giao thức truyền thông mạng tiêu chuẩn, HTTP.

Tất cả các API dựa trên REST được gọi là API RESTful. Mặt khác, các dịch vụ web tuân theo thiết kế kiến ​​trúc REST được gọi là dịch vụ web RESTful.

Phong cách kiến ​​trúc REST tuân theo các nguyên tắc này;

  • Giao diện thống nhất: Máy chủ phải truyền dữ liệu ở định dạng chuẩn. Tuy nhiên, dữ liệu được truyền có thể ở định dạng khác với biểu diễn tài nguyên nội bộ của ứng dụng máy chủ.
  • Không trạng thái: Máy chủ phải thực hiện từng yêu cầu của khách hàng một cách độc lập, bất kể các yêu cầu trước đó. Các yêu cầu của khách hàng về tài nguyên có thể theo bất kỳ thứ tự nào và mỗi yêu cầu được tách biệt khỏi các yêu cầu khác.
  • Hệ thống theo cấp: Đại diện cho một lớp trung gian được ủy quyền giữa máy chủ và máy khách. Máy khách có thể kết nối với các trung gian được ủy quyền này và vẫn nhận được phản hồi từ máy chủ.
  • Bộ nhớ đệm: Một số phản hồi được lưu trữ cùng với tổng đài viên hoặc khách hàng để giảm thời gian phản hồi.
  • Mã theo yêu cầu: Máy chủ tạm thời điều chỉnh hoặc mở rộng chức năng của máy khách bằng cách gửi mã phần mềm cho máy khách.

Lợi ích của REST

  • Khả năng mở rộng: API REST được biết đến với khả năng mở rộng vì chúng tối ưu hóa các tương tác giữa máy khách và máy chủ. Bộ nhớ đệm và trạng thái không trạng thái là những tính năng chính để giảm tải máy chủ.
  • Tính linh hoạt: API RESTful cung cấp sự phân tách hoàn toàn giữa máy khách và máy chủ. Các dịch vụ như vậy sẽ tách rời và đơn giản hóa các thành phần khác nhau của máy chủ, có thể phát triển độc lập.
  • Tính độc lập: Các ứng dụng máy chủ và máy khách có thể được viết bằng các ngôn ngữ lập trình khác nhau mà không ảnh hưởng đến thiết kế API.

Các trường hợp sử dụng còn lại

  • API web
  • dịch vụ internet
  • Kiến trúc microservice

gRPC là gì?

gRPC là nền tảng gọi thủ tục từ xa (RPC) có thể chạy trong mọi môi trường. Nền tảng nguồn mở này được thiết kế như một giao thức hiệu suất cao có thể kết nối hiệu quả các dịch vụ của trung tâm dữ liệu và trung tâm dữ liệu.

Ứng dụng khách có thể gọi một phương thức trong ứng dụng máy chủ trên một máy khác như thể nó là một đối tượng cục bộ. Với gRPC, bạn xác định một dịch vụ và chỉ định các phương thức bạn có thể gọi từ xa cùng với các tham số và kiểu trả về của chúng.

gRPC có khả năng hỗ trợ kiểm tra, xác thực, cân bằng tải và theo dõi tình trạng có thể cắm được. Cấu trúc này sử dụng HTTP 2 và bộ đệm giao thức để truyền dữ liệu. Trong quá trình trao đổi dữ liệu, một thủ tục được gọi thay vì URL của tài nguyên

Lợi ích của gRPC

  • Khả năng mở rộng: gRPC cho phép bạn cài đặt thời gian chạy bằng một lệnh duy nhất và bắt đầu mở rộng hàng triệu lệnh gọi RPC mỗi giây.
  • Định nghĩa dịch vụ đơn giản: Sử dụng bộ đệm giao thức để xác định dịch vụ của bạn và chạy chúng.
  • Đa nền tảng: Khung này tạo ra các sơ khai máy khách và máy chủ đặc trưng cho các nền tảng và ngôn ngữ khác nhau.
  • Truyền phát hai chiều và xác thực tích hợp.

trường hợp sử dụng gRPC

  • API web
  • dịch vụ internet
  • Truyền phát ứng dụng
  • Giao tiếp vi dịch vụ

Điểm tương đồng giữa dịch vụ REST và gRPC

  • Cơ chế trao đổi dữ liệu: Cả hai thiết kế kiến ​​trúc đều cho phép máy chủ và máy khách trao đổi dữ liệu. Tuy nhiên, những dữ liệu này được cung cấp theo các điều khoản nhất định.
  • Thích hợp cho các hệ thống phân tán và có thể mở rộng: giao tiếp không đồng bộ và thiết kế không trạng thái của cả REST và gRPC giúp dễ dàng mở rộng quy mô API của chúng.
  • Sử dụng giao tiếp dựa trên HTTP: Cả hai đều sử dụng HTTP, giao thức liên lạc được ưu tiên nhất trên mạng.
  • Tính linh hoạt: REST và gRPC có thể được sử dụng với các ngôn ngữ và công nghệ lập trình khác nhau.

REST so với gRPC: so sánh lặn sâu

Dịch vụ REST và gRPC khác nhau ở những điểm sau;

Trao đổi dữ liệu

Trong REST API, dữ liệu được truyền từ thành phần phần mềm này sang thành phần phần mềm khác phải được thể hiện ở định dạng JSON. JSON cần được tuần tự hóa và dịch sang ngôn ngữ lập trình để trao đổi dữ liệu. Tuy nhiên, các API khác cũng có thể trao đổi các định dạng dữ liệu như HTML và XML.

gRPC sử dụng định dạng bộ đệm giao thức theo mặc định. Tuy nhiên, nó vốn hỗ trợ JSON. Bộ đệm giao thức con người không thể đọc được. Máy chủ sử dụng ngôn ngữ mô tả giao diện Bộ đệm giao thức để xác định cấu trúc dữ liệu. gPRC sau đó tuần tự hóa cấu trúc dữ liệu thành định dạng nhị phân. Sau đó, nó sẽ giải tuần tự hóa dữ liệu sang bất kỳ ngôn ngữ lập trình được chỉ định nào.

Mô hình truyền thông

Trong REST, máy khách gửi một yêu cầu duy nhất đến máy chủ; máy chủ sau đó sẽ gửi phản hồi để phản hồi. Máy khách phải chờ phản hồi từ máy chủ trước khi tiếp tục thao tác. Đây là mô hình đáp ứng yêu cầu.

Trong gRPC, máy khách có thể gửi một hoặc nhiều yêu cầu đến máy chủ, dẫn đến một hoặc nhiều phản hồi tương ứng. Kết nối dữ liệu có thể là nhiều-nhiều, nhiều-một, một-nhiều hoặc một-một. gRPC sử dụng mô hình giao tiếp phản hồi của khách hàng.

Tạo mã

gRPC có khả năng tạo mã phía máy chủ và máy khách gốc được tích hợp sẵn. Bạn có thể tìm thấy các hàm này bằng nhiều ngôn ngữ khác nhau nhờ trình biên dịch Bộ đệm giao thức. gRPC tạo mã phía máy chủ và phía máy khách sau khi xác định cấu trúc trong proto.

REST không có tính năng tạo mã tích hợp. Nếu cần tính năng này, bạn có thể sử dụng các công cụ của bên thứ ba.

Giao thức HTTP

API REST sử dụng HTTP 1.1. Để gửi yêu cầu đến dịch vụ REST, bạn cần có URL tài nguyên. HTTP 1 chuyển thông tin giữa máy tính của bạn và máy chủ web. URL tài nguyên trong dịch vụ REST được hiển thị cho khách hàng. Các nhà thiết kế API kiểm soát cấu trúc URL tài nguyên.

gRPC sử dụng HTTP 2. Phiên bản HTTP này được giới thiệu vào năm 2015 và được sử dụng trong các trình duyệt như Internet Explorer, Safari và Chrome. Không giống như HTTP 1lưu trữ mọi thứ ở dạng văn bản thuần túy, định dạng mới hơn này sử dụng tính năng đóng gói định dạng nhị phân, cung cấp cho bạn nhiều tùy chọn phân phối dữ liệu hơn và tăng tốc toàn bộ quá trình.

Cấu trúc dữ liệu tải trọng

REST sử dụng XML hoặc JSON để gửi và nhận dữ liệu. JSON là định dạng được sử dụng phổ biến nhất để truyền dữ liệu động trong REST vì nó linh hoạt và không yêu cầu bất kỳ cấu trúc nào. Dữ liệu JSON cũng có thể đọc được. Vấn đề duy nhất với JSON là không nhanh như vậy vì nó phải được tuần tự hóa và dịch trong quá trình truyền dữ liệu.

gRPC sử dụng bộ đệm giao thức để tuần tự hóa dữ liệu tải trọng. Đây là một định dạng nén cao làm hạn chế dữ liệu tin nhắn. Khung này sử dụng Protobuf để tự động chuyển đổi các tin nhắn được gõ mạnh sang ngôn ngữ lập trình máy khách và máy chủ.

Hỗ trợ trình duyệt

REST được hỗ trợ trong tất cả các trình duyệt vì nó sử dụng HTTP 1.1. Điều này làm cho nó trở thành một lựa chọn lý tưởng cho các dịch vụ web và API.

gRPC có hỗ trợ trình duyệt hạn chế vì nó dựa trên HTTP 2. Để hỗ trợ tất cả các trình duyệt, gRPC-web phải được thêm dưới dạng lớp proxy. Vì lý do này, gRPC chủ yếu được sử dụng trong các hệ thống nội bộ.

Khớp nối máy khách-máy chủ

REST là một dự án kiến ​​trúc được kết nối lỏng lẻo. Điều này có nghĩa là máy khách và máy chủ không cần biết về việc triển khai của nhau. Tính năng này giúp API RESTful phát triển dễ dàng hơn theo thời gian vì bạn không phải thay đổi mã máy khách khi sửa đổi định nghĩa máy chủ.

gRPC là một khung được liên kết chặt chẽ trong đó máy chủ và máy khách phải truy cập vào cùng một tệp proto. Nếu bạn cần thực hiện bất kỳ thay đổi nào đối với tệp, bạn cũng cần cập nhật máy chủ và máy khách.

Nghỉ ngơi và gRPC

Hàm RESTgRPCHTTP Giao thức HTTP 1.1HTTP Hỗ trợ 2 trình duyệt Hỗ trợ tất cả các trình duyệt sử dụng HTTP 1.1 Ít hỗ trợ trình duyệt hơn vì nó sử dụng HTTP 2 Tạo mã Sử dụng các công cụ của bên thứ 3 Tạo mã nhúng Tính năng Cách tiếp cận thiết kế Thiết kế hướng thực thể Cách tiếp cận hướng dịch vụ Truy cập dữ liệu URL tài nguyên Cuộc gọi dịch vụ Truyền dữ liệu hai chiều Không có sẵn Triển khai Không cần phần mềm phổ biến cho phía máy khách hoặc máy chủ REST Việc triển khai phần mềm gRPC là cần thiết ở cả hai phía máy khách và máy chủ. Mô hình truyền thông Một máy khách giao tiếp với một máy chủ Nhiều mô hình giao tiếp, ví dụ: một máy khách gửi yêu cầu đến nhiều máy chủ, một máy chủ giao tiếp với nhiều máy khách hoặc một máy chủ giao tiếp với một máy khách.

Khi nào nên sử dụng REST

API RESTful và dịch vụ web rất phổ biến. Các dịch vụ RESTful dễ triển khai, có cấu trúc dữ liệu, linh hoạt và dễ đọc. Bạn có thể sử dụng REST trong các trường hợp sau;

  • Kiến trúc dựa trên web: Bạn có thể xây dựng API web, thiết bị di động và đa nền tảng bằng REST.
  • Giao tiếp dữ liệu đơn giản: REST sử dụng JSON, một định dạng dữ liệu dễ đọc.
  • API công khai: Nếu bạn định sử dụng dữ liệu và sử dụng API của mình một cách công khai, REST sẽ là một lựa chọn tốt vì tính năng dễ đọc của nó.

Khi nào nên sử dụng gRPC

gRPC không phổ biến bằng các dịch vụ RESTful. Tuy nhiên, nó cũng có những tính năng độc đáo giúp nó nổi bật trong các ứng dụng sau;

  • Hệ thống đa ngôn ngữ: gRPC phù hợp với kiến ​​trúc microservice được viết bằng các ngôn ngữ lập trình khác nhau và API khó có thể thay đổi.
  • Kết nối vi dịch vụ: Các tính năng như phát trực tuyến hai chiều và hỗ trợ trình duyệt thấp khiến gRPC trở thành một lựa chọn tốt cho các API nội bộ.
  • Mạng truyền trực tuyến thời gian thực: gRPC có thể được sử dụng với các dịch vụ nội bộ xử lý tải dữ liệu lớn và yêu cầu truyền phát theo thời gian thực.

Ý kiến ​​của các tác giả

Mặc dù gRPC có một số tính năng cụ thể có thể làm lu mờ REST trong các ứng dụng như IoT, nhưng tính năng sau lại chiếm ưu thế nhờ tính dễ đọc, tính linh hoạt và khả năng ứng dụng rộng rãi của nó. Hỗ trợ trình duyệt thấp hơn của gRPC khiến nó không phải là lựa chọn tốt cho các nhà phát triển muốn tạo dịch vụ web.

Hỗ trợ phổ biến cho các dịch vụ RESTful làm cho REST trở thành kiến ​​trúc API lý tưởng để tích hợp web và vi dịch vụ.

Ứng dụng

REST và gRPC nằm trong số nhiều kiểu kiến ​​trúc API mà bạn có thể chọn khi tạo API tiếp theo. Sự lựa chọn cuối cùng sẽ phụ thuộc vào sản phẩm bạn muốn xây dựng. Các dịch vụ RESTful rất phù hợp để xây dựng các API công khai và gRPC là một lựa chọn tốt cho các dịch vụ như ứng dụng di động không yêu cầu hỗ trợ trình duyệt.

Sau đó, hãy xem bài viết của chúng tôi về cách xây dựng gRPC từ đầu bằng Java.