Tài liệu tổng quan API & giao tiếp hệ thống

Tổng hợp: REST, SOAP, gRPC, WebRPC, Webhook và WebSocket

So sánh vai trò, cách kết nối, ưu nhược điểm và cách kết hợp các công nghệ giao tiếp phổ biến trong hệ thống web và ứng dụng native.

Tổng hợp: REST, SOAP, gRPC, WebRPC, Webhook và WebSocket#


1. Bức tranh tổng thể#

REST, SOAP, gRPC, WebRPC, Webhook và WebSocket phản ánh quá trình phát triển của giao tiếp phần mềm: từ trao đổi message có cấu trúc, thiết kế API và thông báo sự kiện đến kết nối realtime và gọi hàm hiệu năng cao.

Thứ tự Công nghệ Mốc đáng chú ý Nguồn gốc Phân loại và vai trò cốt lõi
1 SOAP 1998; SOAP 1.1 công bố năm 2000 Được phát triển ban đầu bởi Microsoft, DevelopMentor và UserLand nhằm trao đổi lời gọi và dữ liệu có cấu trúc bằng XML qua mạng. Protocol cho tích hợp doanh nghiệp truyền thống, dùng XML/WSDL và hợp đồng message nghiêm ngặt.
2 REST 2000 Được Roy Fielding mô tả trong luận án tiến sĩ tại Đại học California, Irvine như một phong cách kiến trúc cho hệ thống phân tán dựa trên web. Architectural style cho API phổ thông, CRUD, public API, dễ debug và cache.
3 Webhook Khoảng 2007 Thuật ngữ được Jeff Lindsay phổ biến để mô tả callback HTTP do người dùng cấu hình, cho phép hệ thống chủ động báo sự kiện. Pattern tích hợp để một hệ thống chủ động báo sự kiện cho hệ thống khác, chủ yếu server-to-server.
4 WebSocket Bản nháp năm 2009; RFC 6455 năm 2011 Bắt nguồn từ công việc HTML5/WHATWG về kênh giao tiếp hai chiều cho trình duyệt, sau đó được IETF chuẩn hóa. Protocol duy trì kết nối dài hạn, hai chiều để trao đổi dữ liệu realtime.
5 gRPC Công khai năm 2015; gRPC 1.0 năm 2016 Do Google phát triển và mã nguồn mở, kế thừa kinh nghiệm từ hệ thống RPC nội bộ Stubby và sử dụng Protocol Buffers. RPC framework để gọi hàm nhanh, schema chặt, payload nhị phân, streaming, phù hợp microservice và native app.
6 WebRPC Tùy dự án; một số dự án mang tên WebRPC xuất hiện sau gRPC Không có một nguồn gốc hay tiêu chuẩn duy nhất; tên WebRPC được nhiều dự án độc lập sử dụng cho RPC hướng đến ứng dụng web. RPC hướng đến web, thường hỗ trợ schema và code generation, nhưng không phải một tiêu chuẩn thống nhất.

REST, SOAP, gRPC, WebRPC, Webhook và WebSocket không hoàn toàn thay thế lẫn nhau vì chúng giải quyết các lớp giao tiếp khác nhau:

  • REST là một architectural style cho API dựa trên tài nguyên và HTTP, không phải một protocol cụ thể.
  • SOAP là protocol trao đổi message có cấu trúc, thường dùng XML và hợp đồng WSDL.
  • gRPC và WebRPC áp dụng mô hình RPC, trong đó client yêu cầu server thực hiện một hàm hoặc phương thức; WebRPC không có một tiêu chuẩn hay ngày phát minh chung vì tên này được nhiều dự án độc lập sử dụng.
  • Webhook là pattern/cơ chế tích hợp theo sự kiện, thường để một server chủ động gọi server khác; nó không phải protocol được chuẩn hóa như WebSocket.
  • WebSocket duy trì kết nối dài hạn và hai chiều để client và server trao đổi dữ liệu realtime.
  • SSE là cơ chế liên quan dùng để server liên tục đẩy dữ liệu một chiều tới browser.
  • FCM, APNs và Web Push dùng để gửi thông báo khi ứng dụng hoặc browser không mở hay không duy trì kết nối.

1.1. Hình ảnh dễ nhớ#

Có thể nhớ bằng ví dụ đơn giản:

Công nghệ Hình ảnh dễ nhớ Tại sao gắn với hình ảnh này?
REST Gọi món từ thực đơn Client chọn một tài nguyên qua URL rồi dùng thao tác HTTP như GET, POST, PUT, DELETE, tương tự chọn món và nói muốn xem, đặt, đổi hay hủy món.
SOAP Gửi công văn theo biểu mẫu Message phải tuân theo cấu trúc XML, SOAP Envelope, schema hoặc WSDL tương đối chặt chẽ, giống một công văn chỉ được tiếp nhận khi điền đúng mẫu và đúng quy tắc.
gRPC Gọi một hàm trên máy khác bằng bộ đàm chuyên dụng Hai bên thống nhất trước các hàm và kiểu dữ liệu trong file .proto; client gọi trực tiếp tên hàm trên server, còn Protobuf và HTTP/2 đóng vai trò như một bộ đàm chuyên dụng nhanh và chính xác.
WebRPC Gọi hàm từ ứng dụng web bằng cơ chế RPC Client web sử dụng cách gọi gần giống hàm, chẳng hạn getUser(10), thay vì tự xây dựng từng URL REST; cách truyền cụ thể có thể dùng HTTP/JSON tùy framework.
Webhook Chuông cửa báo khi có sự kiện Hai bên không giữ kết nối liên tục; khi sự kiện xảy ra, hệ thống nguồn chủ động gọi URL của hệ thống nhận, giống chỉ bấm chuông khi có người hoặc đồ được giao tới.
WebSocket Giữ bộ đàm mở để nói chuyện liên tục Client và server duy trì một kết nối lâu dài, hai bên đều có thể gửi dữ liệu bất cứ lúc nào, giống hai người giữ bộ đàm luôn bật để trao đổi realtime.

1.2. So sánh vai trò và cách kết nối#

Công nghệ Loại chính Kết nối Hướng truyền Trường hợp chính
REST API style Ngắn hạn Request/response CRUD, public API, web API
SOAP Protocol Ngắn hạn Request/response Enterprise integration
gRPC RPC framework Ngắn hoặc dài Request/response/streaming Microservice, native app
WebRPC RPC cho web, tùy framework Tùy implementation Thường request/response Typed API, code generation
Webhook Event callback Mỗi sự kiện một request Chủ yếu một chiều Server báo sự kiện cho server
WebSocket Realtime transport Dài hạn Hai chiều Chat, game, dashboard realtime

Điểm quan trọng:

  • Webhook và WebSocket không trực tiếp thay thế REST/gRPC.
  • Một hệ thống có thể dùng REST để tải dữ liệu ban đầu và WebSocket để cập nhật realtime.
  • Một hệ thống có thể nhận webhook từ bên ngoài rồi gọi gRPC vào microservice nội bộ.
  • SOAP thường tồn tại tại biên tích hợp với hệ thống doanh nghiệp cũ.

2. Tóm lược từng loại#

2.1. Webhook#

Khái niệm#

Webhook là cơ chế một hệ thống chủ động gửi thông báo đến một URL của hệ thống khác khi có sự kiện xảy ra.

Ví dụ:

G a Khách hàng thanh toán thành công b Hệ thống thanh toán gửi HTTP POST a->b c Backend cửa hàng nhận Webhook b->c
Luồng Webhook khi thanh toán thành công
Xem sơ đồ dạng chữ
Khách hàng thanh toán thành công
        ↓
Hệ thống thanh toán gửi HTTP POST
        ↓
Backend cửa hàng nhận webhook

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

  • Thanh toán thành công.
  • Có đơn hàng mới.
  • GitHub có commit hoặc pull request mới.
  • Một pipeline hoàn thành.
  • Một dịch vụ bên ngoài thay đổi trạng thái.
  • Hệ thống máy A, B, C báo trạng thái về backend trung tâm.

Đặc điểm#

  • Chủ yếu dùng cho giao tiếp server-to-server.
  • Không cần giữ kết nối liên tục.
  • Chỉ gửi khi có sự kiện.
  • Thường dùng HTTP POST.
  • Cần xử lý retry, xác thực chữ ký, idempotency và chống gửi trùng.

Tối ưu payload cho Webhook#

Webhook nên gửi payload sự kiện tối thiểu, chẳng hạn loại sự kiện, mã tài nguyên và phần dữ liệu thay đổi. Khi cần dữ liệu đầy đủ, hệ thống nhận có thể dùng ID trong webhook để gọi REST hoặc gRPC lấy chi tiết. Cách này tránh gửi lặp lại toàn bộ object trong mỗi sự kiện.

Quan hệ giữa Webhook và trình duyệt#

Browser thông thường không trực tiếp nhận webhook.

Kiến trúc đúng thường là:

G a Máy A backend Backend a->backend Webhook b Máy B b->backend Webhook c Máy C c->backend Webhook browser Browser backend->browser WebSocket / SSE
Nhiều máy gửi sự kiện về Backend, sau đó cập nhật Browser
Xem sơ đồ dạng chữ
Máy A ──Webhook──┐
Máy B ──Webhook──┼──► Backend
Máy C ──Webhook──┘       │
                         └──WebSocket/SSE──► Browser

Webhook nhận trạng thái từ nhiều hệ thống vào backend. Sau đó backend cập nhật trình duyệt bằng WebSocket hoặc SSE.


2.2. WebSocket#

Khái niệm#

WebSocket tạo một kết nối lâu dài giữa client và server. Sau khi kết nối được mở, hai bên có thể gửi dữ liệu cho nhau bất cứ lúc nào.

Ví dụ:

G browser Browser server Server browser->server WebSocket
Kết nối WebSocket hai chiều
Xem sơ đồ dạng chữ
Browser ◄──────── WebSocket ────────► Server

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

  • Chat trực tiếp.
  • Game online.
  • Dashboard trạng thái máy.
  • Giá cổ phiếu hoặc tiền mã hóa cập nhật liên tục.
  • Theo dõi vị trí.
  • Theo dõi tiến trình xử lý.
  • Cộng tác realtime.
  • Điều khiển hoặc giám sát thiết bị.

Đặc điểm#

  • Hai chiều.
  • Kết nối tồn tại lâu.
  • Server có thể chủ động gửi dữ liệu.
  • Phù hợp với dữ liệu realtime.
  • Có thể phục vụ đồng thời nhiều browser, app native và thiết bị.

Tối ưu payload cho WebSocket#

  • Dùng binary frame với Protocol Buffers, MessagePack hoặc CBOR khi JSON text quá lớn.
  • Chỉ gửi phần trạng thái thay đổi thay vì gửi lại toàn bộ object.
  • Có thể gộp nhiều message nhỏ thành một message nếu độ trễ cho phép.

Phạm vi kết nối của WebSocket#

WebSocket không chỉ dùng để trao đổi liên tục với một máy hoặc một client.

Tiêu chí chính là:

Client và server cần giữ kết nối mở để trao đổi thường xuyên hoặc server cần chủ động đẩy dữ liệu.

Một server có thể kết nối với nhiều client:

G server WebSocket Server a Browser A server->a b Browser B server->b c Native App C server->c d Thiết bị D server->d
Một WebSocket Server phục vụ nhiều loại client
Xem sơ đồ dạng chữ
┌── Browser A
WebSocket Server ───┼── Browser B
                    ├── Native App C
                    └── Thiết bị D

2.3. REST API#

Khái niệm#

REST là một phong cách thiết kế API dựa trên tài nguyên và các phương thức HTTP.

Ví dụ:

GET /machines
GET /machines/12
POST /orders
PUT /users/20
DELETE /files/30

REST thường trả dữ liệu JSON:

{
  "name": "Machine A",
  "status": "running"
}

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

  • CRUD thông thường.
  • Browser gọi backend.
  • Mobile app gọi backend.
  • Public API.
  • API cho đối tác.
  • Dữ liệu có thể cache.
  • Hệ thống cần dễ kiểm tra bằng trình duyệt, curl hoặc Postman.

Ưu điểm#

  • Dễ hiểu.
  • Dễ debug.
  • Được browser và hạ tầng HTTP hỗ trợ tốt.
  • Phù hợp CDN, cache và reverse proxy.
  • Không bắt buộc code generation.
  • Dễ cung cấp cho đối tác bên ngoài.

Điểm yếu#

  • JSON có thể dài hơn định dạng nhị phân.
  • Không có schema chặt nếu không bổ sung OpenAPI/JSON Schema.
  • Streaming và realtime không phải thế mạnh tự nhiên.
  • Một API REST thiết kế kém có thể tạo nhiều request nhỏ hoặc trả quá nhiều dữ liệu.

Tối ưu payload và điểm cần lưu ý#

REST không mặc nhiên “nhẹ”. Payload vẫn có thể rất lớn nếu trả quá nhiều trường, không phân trang, không nén hoặc lặp lại dữ liệu không thay đổi.

Các cách tối ưu thường dùng:

  • Chỉ trả các trường client thực sự cần.
  • Dùng pagination cho danh sách lớn.
  • Gộp nhiều thao tác nhỏ bằng batch endpoint khi phù hợp.
  • Nén JSON bằng gzip hoặc Brotli qua HTTP.
  • Dùng cache, ETag hoặc Last-Modified để tránh truyền lại dữ liệu không đổi.
  • Có thể dùng MessagePack hoặc CBOR thay JSON nếu client và server cùng hỗ trợ.

2.4. SOAP API#

Khái niệm#

SOAP là một giao thức trao đổi message có cấu trúc, thường dùng XML.

Ví dụ:

<soap:Envelope>
    <soap:Body>
        <DatMon>
            <TenMon>Pizza</TenMon>
            <SoLuong>2</SoLuong>
        </DatMon>
    </soap:Body>
</soap:Envelope>

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

  • Hệ thống ngân hàng hoặc bảo hiểm cũ.
  • Hệ thống doanh nghiệp truyền thống.
  • Đối tác yêu cầu WSDL.
  • Hệ thống cần hợp đồng message rất chặt.
  • Môi trường đã sử dụng hệ sinh thái WS-*.
  • Tích hợp lâu đời với middleware doanh nghiệp.

Ưu điểm#

  • Hợp đồng dữ liệu chặt.
  • XML Schema và WSDL rõ ràng.
  • Hệ sinh thái tiêu chuẩn doanh nghiệp lớn.
  • Có các chuẩn liên quan đến security, addressing và transaction.

Điểm yếu#

  • XML dài và nặng.
  • Khó đọc hơn JSON.
  • Công cụ và cấu hình phức tạp.
  • Không phù hợp cho nhiều API web đơn giản hiện đại.

Tối ưu payload cho SOAP#

Do XML thường dài, SOAP có thể giảm lưu lượng bằng nén gzip ở tầng HTTP/transport và không gửi các phần tử tùy chọn không cần thiết. Tuy nhiên, payload thường vẫn lớn hơn các định dạng nhị phân như Protocol Buffers.

Tiêu chí lựa chọn SOAP#

SOAP không được lựa chọn chỉ vì dữ liệu quan trọng hoặc có tần suất thấp.

Mức độ quan trọng không quyết định REST hay SOAP.

Một REST API hoặc gRPC API vẫn có thể xử lý giao dịch rất quan trọng nếu có:

  • TLS.
  • Authentication.
  • Authorization.
  • Chữ ký request.
  • Idempotency.
  • Audit log.
  • Transaction.
  • Retry phù hợp.

SOAP thường được chọn vì hợp đồng, tiêu chuẩn doanh nghiệp hoặc hệ thống cũ, không phải vì request ít hay quan trọng hơn.


2.5. gRPC#

gRPC là framework RPC do Google phát triển, cho phép client gọi phương thức trên server gần giống gọi một hàm cục bộ. API được định nghĩa bằng file .proto; công cụ sau đó sinh mã client/server cho nhiều ngôn ngữ.

service Calculator {
    rpc Add(AddRequest) returns (AddResponse);
}

gRPC thường sử dụng:

  • Protocol Buffers để mã hóa dữ liệu nhị phân nhỏ gọn.
  • HTTP/2 để tái sử dụng kết nối và chạy nhiều luồng song song.
  • Code generation để tạo client SDK và bảo đảm kiểu dữ liệu.
  • Unary và streaming RPC, gồm server streaming, client streaming và truyền hai chiều.

Khi phù hợp#

gRPC đặc biệt phù hợp cho:

  • Giao tiếp giữa microservice hoặc backend nội bộ.
  • Native app và backend do cùng một tổ chức kiểm soát.
  • Hệ thống có nhiều request nhỏ hoặc dữ liệu truyền liên tục.
  • Trường hợp cần payload nhỏ, schema chặt, streaming và SDK tự sinh.

Điểm mạnh và giới hạn#

Điểm mạnh Giới hạn
Payload Protobuf thường nhỏ hơn JSON/XML Dữ liệu nhị phân khó đọc và debug thủ công hơn JSON
Serialization nhanh và schema .proto chặt Thay đổi schema thường phải sinh lại code và cập nhật client/server
HTTP/2 hỗ trợ multiplexing và streaming Load balancer, proxy, timeout và kết nối HTTP/2 cần cấu hình phù hợp
Hỗ trợ nhiều ngôn ngữ và sinh SDK tự động Browser thường phải dùng gRPC-Web và proxy thay vì gRPC native
Phù hợp backend nội bộ hiệu năng cao Không tận dụng browser/CDN cache tự nhiên như REST
Hỗ trợ truyền dữ liệu liên tục Không thay thế Webhook, queue hoặc push notification khi bên nhận offline

Protocol Buffers, streaming và việc tái sử dụng kết nối HTTP/2 đã là các cơ chế tối ưu lưu lượng quan trọng của gRPC. Message vẫn nên được thiết kế gọn, tránh trả các field không cần thiết và tránh chia một thao tác thành quá nhiều RPC nhỏ.

Hiệu năng thực tế vẫn phụ thuộc vào ngôn ngữ, kích thước message, cách tái sử dụng kết nối, proxy, database và business logic. Vì vậy, gRPC thường là lựa chọn mạnh cho backend-to-backendnative app, nhưng không phải lựa chọn tối ưu cho mọi API.


2.6. WebRPC#

Khái niệm#

WebRPC không phải tên của một tiêu chuẩn duy nhất được dùng thống nhất trong toàn ngành.

Tên này có thể chỉ các thư viện hoặc framework khác nhau đưa mô hình RPC vào ứng dụng web.

Một số implementation cho phép:

  • Định nghĩa schema.
  • Sinh client và server code.
  • Gọi phương thức theo kiểu RPC.
  • Truyền dữ liệu qua HTTP.
  • Dùng JSON hoặc định dạng riêng.

Ví dụ ý tưởng:

getUser(10)

thay vì:

GET /users/10

Vai trò#

WebRPC nằm cùng nhóm với REST, SOAP và gRPC:

G root Các kiểu API rest REST root->rest soap SOAP root->soap grpc gRPC root->grpc webrpc WebRPC root->webrpc
Các kiểu API được trình bày trong tài liệu
Xem sơ đồ dạng chữ
Các kiểu API
├── REST
├── SOAP
├── gRPC
└── WebRPC

Quan hệ giữa WebRPC và tối ưu payload#

WebRPC không phải lớp dùng để tự động tối ưu payload cho REST, SOAP, WebSocket và Webhook.

Không nên hiểu:

REST + WebRPC = REST nhẹ hơn
WebSocket + WebRPC = WebSocket nhẹ hơn
SOAP + WebRPC = SOAP nhẹ hơn

WebRPC là một cách thiết kế/gọi API. Payload có nhỏ hay không phụ thuộc implementation và định dạng dữ liệu. Nếu implementation dùng JSON thì có thể áp dụng gzip/Brotli và chỉ trả các trường cần thiết; nếu hỗ trợ định dạng nhị phân thì payload có thể nhỏ hơn, nhưng điều này không phải đặc tính chung của mọi WebRPC.


3. Sử dụng trong thực tế#

3.1. Trình duyệt web#

REST#

Phù hợp nhất cho:

  • Tải danh sách.
  • Xem chi tiết.
  • Tạo, sửa, xóa dữ liệu.
  • Public API.
  • API có cache.
G browser Browser backend Backend browser->backend REST
Browser gọi Backend bằng REST
Xem sơ đồ dạng chữ
Browser ──REST──► Backend

WebSocket#

Phù hợp cho:

  • Realtime hai chiều.
  • Chat.
  • Dashboard trạng thái máy.
  • Game.
  • Điều khiển trực tiếp.
G browser Browser backend Backend browser->backend WebSocket
Browser và Backend trao đổi realtime bằng WebSocket
Xem sơ đồ dạng chữ
Browser ◄──WebSocket──► Backend

SSE#

Phù hợp khi server chỉ cần đẩy dữ liệu một chiều:

G backend Backend browser Browser backend->browser SSE
Backend đẩy dữ liệu một chiều bằng SSE
Xem sơ đồ dạng chữ
Backend ──SSE──► Browser

Ví dụ:

  • Log realtime.
  • Tiến trình xử lý.
  • Feed sự kiện.
  • Trạng thái chỉ đọc.

Webhook#

Webhook không thường gửi trực tiếp tới browser.

G ext External Service backend Backend ext->backend Webhook browser Browser backend->browser WebSocket / SSE
Từ sự kiện bên ngoài đến cập nhật trong Browser
Xem sơ đồ dạng chữ
External Service ──Webhook──► Backend
Backend ──WebSocket/SSE──► Browser

SOAP#

Dùng khi browser/backend cần tích hợp với hệ thống doanh nghiệp yêu cầu SOAP. Thông thường browser không trực tiếp xử lý SOAP phức tạp; backend làm lớp trung gian.

gRPC#

Browser thường phải dùng gRPC-Web và proxy. gRPC native phù hợp với backend hoặc app native hơn.

WebRPC#

Có thể phù hợp nếu framework hỗ trợ browser tốt, tạo client typed và phù hợp với hệ sinh thái dự án.

Ưu điểm chung của web browser#

  • Không cần cài ứng dụng.
  • Cập nhật tập trung tại server.
  • Dễ phân phối.
  • Chạy trên nhiều hệ điều hành.
  • Dễ mở rộng số lượng người dùng ở phía client.

Nhưng browser có giới hạn:

  • Sandbox.
  • Hạn chế network API.
  • Không duy trì kết nối khi tab bị đóng.
  • Background execution bị giới hạn.
  • Không trực tiếp nhận webhook như server.
  • gRPC native bị hạn chế.

3.2. Ứng dụng native#

Khi gRPC rất phù hợp#

gRPC thường là một trong những lựa chọn tốt nhất nếu:

  • Kiểm soát cả app và backend.
  • App và backend cùng dùng .proto.
  • Cần payload nhỏ.
  • Cần hiệu năng.
  • Có nhiều request nhỏ.
  • Cần streaming.
  • Muốn sinh SDK tự động.
  • Có nhiều nền tảng client nhưng cùng contract.
G app Native App unary gRPC unary Request / response app->unary stream gRPC streaming Dữ liệu liên tục app->stream protobuf Protobuf Payload nhị phân app->protobuf
Các thành phần thường dùng khi Native App giao tiếp bằng gRPC
Xem sơ đồ dạng chữ
Native App
    │
    ├── gRPC unary ───────► Request/response
    ├── gRPC streaming ───► Dữ liệu liên tục
    └── Protobuf ─────────► Payload nhị phân

Khi REST vẫn tốt hơn#

REST có thể hợp lý hơn nếu:

  • API chỉ là CRUD đơn giản.
  • API được công khai cho đối tác.
  • Cần debug nhanh.
  • Cần CDN/cache.
  • Backend đã có REST ổn định.
  • Không muốn quản lý code generation.
  • Client không cần streaming.

Realtime trong native app#

Khi app đang mở:

  • gRPC streaming.
  • WebSocket.

Khi app đang background hoặc bị đóng:

  • Android: FCM.
  • iOS: APNs.
  • Sau khi người dùng mở app, dùng REST hoặc gRPC để đồng bộ dữ liệu thật.
G server Server app Native App server->app FCM / APNs backend Backend lấy dữ liệu chi tiết app->backend REST / gRPC
Thông báo đẩy và đồng bộ dữ liệu chi tiết cho Native App
Xem sơ đồ dạng chữ
Server ──FCM/APNs──► Native App
Native App ──REST/gRPC──► Backend để lấy dữ liệu chi tiết

Kết luận#

Không nên nói:

Native app thì gRPC luôn tốt nhất.

Nên nói:

gRPC thường là lựa chọn rất mạnh cho native app khi kiểm soát cả client và backend, cần schema chặt, payload nhỏ, streaming và hiệu năng cao.


3.3. Kiến trúc kết hợp#

Một hệ thống thực tế có thể dùng đồng thời nhiều công nghệ:

G browser Browser gateway API Gateway browser->gateway REST realtime Realtime Service browser->realtime WebSocket / SSE internal Internal Services gateway->internal gRPC payment External Payment webhook Webhook Receiver payment->webhook Webhook bank Legacy Bank integration Integration Service bank->integration SOAP
Kiến trúc kết hợp nhiều công nghệ giao tiếp
Xem sơ đồ dạng chữ
Browser ──REST──► API Gateway
Browser ◄─WebSocket/SSE─► Realtime Service

External Payment
        └──Webhook──► Webhook Receiver

API Gateway
        └──gRPC──► Internal Services

Legacy Bank
        └──SOAP──► Integration Service

Ví dụ hệ thống giám sát nhiều máy#

G a Máy A backend Backend trạng thái a->backend Webhook / REST b Máy B b->backend Webhook / REST c Máy C c->backend Webhook / REST db Database backend->db dash Browser Dashboard backend->dash WebSocket / SSE
Kiến trúc giám sát trạng thái nhiều máy
Xem sơ đồ dạng chữ
Máy A ──Webhook/REST──┐
Máy B ──Webhook/REST──┼──► Backend trạng thái
Máy C ──Webhook/REST──┘          │
                                 ├── Database
                                 └── WebSocket/SSE ──► Browser Dashboard

Nếu máy cần truyền dữ liệu liên tục:

G backend Backend a Máy A a->backend WebSocket / gRPC stream b Máy B b->backend WebSocket / gRPC stream c Máy C c->backend WebSocket / gRPC stream
Các máy truyền dữ liệu liên tục tới Backend
Xem sơ đồ dạng chữ
Máy A ◄──WebSocket/gRPC stream──► Backend
Máy B ◄──WebSocket/gRPC stream──► Backend
Máy C ◄──WebSocket/gRPC stream──► Backend

Nếu chỉ báo sự kiện thỉnh thoảng:

G a Máy A backend Backend a->backend Webhook
Máy chỉ gửi sự kiện thỉnh thoảng bằng Webhook
Xem sơ đồ dạng chữ
Máy A ──Webhook──► Backend

3.4. Lựa chọn nhanh theo nhu cầu#

Nhu cầu Công nghệ thường phù hợp
CRUD thông thường REST
Public API REST
Dễ debug REST
CDN/cache REST
Tích hợp doanh nghiệp cũ SOAP
WSDL/XML contract SOAP
Backend-to-backend hiệu năng cao gRPC
Microservice gRPC
Native app và backend cùng kiểm soát gRPC
Typed client và code generation cho web WebRPC hoặc gRPC-Web
Realtime hai chiều WebSocket
Server đẩy một chiều tới browser SSE
Hệ thống bên ngoài báo sự kiện Webhook
Mobile app đang đóng FCM/APNs
Browser đã đóng nhưng cần notification Web Push
Payload nhỏ Protobuf/MessagePack/CBOR/nén
Nhiều trạng thái máy cập nhật realtime Webhook/stream vào backend + WebSocket/SSE ra browser

4. Kết luận#

Không có công nghệ nào tốt nhất cho mọi trường hợp.

Kiến trúc thường tối ưu khi kết hợp:

G root Kiến trúc giao tiếp browser Browser root->browser backend Backend root->backend native Native App root->native br1 REST Dữ liệu thông thường browser->br1 br2 WebSocket / SSE Realtime browser->br2 be1 gRPC Giữa microservice backend->be1 be2 Webhook Nhận sự kiện bên ngoài backend->be2 be3 SOAP Tích hợp hệ thống cũ backend->be3 na1 REST hoặc gRPC Khi app hoạt động native->na1 na2 WebSocket / gRPC streaming Khi cần realtime native->na2 na3 FCM / APNs Khi app background hoặc đóng native->na3
Lựa chọn công nghệ theo từng lớp của hệ thống
Xem sơ đồ dạng chữ
Browser
├── REST cho dữ liệu thông thường
└── WebSocket/SSE cho realtime

Backend
├── gRPC giữa các microservice
├── Webhook để nhận sự kiện bên ngoài
└── SOAP khi tích hợp hệ thống cũ

Native App
├── REST hoặc gRPC khi app đang hoạt động
├── WebSocket/gRPC streaming nếu cần realtime
└── FCM/APNs khi app background hoặc đã đóng

Nhận định cuối cùng:

gRPC thường là một trong những lựa chọn mạnh nhất cho backend nội bộ và native app khi kiểm soát cả hai đầu, nhưng REST, WebSocket, Webhook và SOAP vẫn có các vai trò riêng mà gRPC không thay thế hoàn toàn.