Bạn ơi, AI nói chuyện với Tool kiểu gì nhỉ? Mổ xẻ 3 "Giao Thức Tám Chuyện" hot nhất: REST, gRPC và JSON-RPC
Lê Lân
0
REST vs gRPC vs JSON-RPC: Lựa Chọn Giao Thức Truyền Thông Phù Hợp Cho MCP
Mở Đầu
Trong quá trình phát triển các tác nhân AI cần gọi đến các công cụ hoặc dịch vụ bên ngoài, việc lựa chọn giao thức truyền thông không chỉ phải đảm bảo tính đáng tin cậy mà còn phải dễ sử dụng. MCP (Model Context Protocol) đã chọn sử dụng JSON-RPC 2.0, tuy nhiên bạn có thể tự hỏi: liệu JSON-RPC có tốt hơn so với các giao thức phổ biến như REST hay gRPC không? Trong bài viết này, chúng ta sẽ cùng phân tích sâu các ưu điểm và hạn chế của từng phương thức, sau đó lý giải tại sao JSON-RPC là sự lựa chọn tối ưu cho MCP.
So Sánh REST, gRPC và JSON-RPC
REST (Representational State Transfer)
REST là mô hình giao thức phổ biến dùng các phương thức HTTP như GET, POST, PUT để thao tác tài nguyên thông qua URL. REST có ưu điểm là rất quen thuộc, dễ triển khai và được hỗ trợ rộng rãi trong cộng đồng phát triển phần mềm.
Ưu điểm:
Giao thức dựa trên HTTP, dễ kiểm tra bằng công cụ như curl hay Postman.
Phù hợp với mô hình CRUD cho các tài nguyên có cấu trúc rõ ràng.
Nhược điểm:
Khó khăn khi muốn thực hiện các thao tác theo lệnh cụ thể (ví dụ run_analysis), vì REST ưu tiên thao tác trên "danh từ" (resources), không phải "động từ" (actions).
Dẫn đến các workaround phức tạp hoặc định tuyến quá mức khiến logic bị rối.
REST phù hợp với các ứng dụng thao tác tài nguyên đơn giản nhưng hạn chế trong các tác vụ phức tạp hoặc lệnh đặc thù.
gRPC (Google Remote Procedure Call)
gRPC sử dụng Protocol Buffers và HTTP/2 để cung cấp giao tiếp nhanh, có luồng hai chiều song song và định dạng dữ liệu kiểu chặt chẽ. Đây là lựa chọn tối ưu trong các kiến trúc microservices đòi hỏi hiệu suất cao.
Ưu điểm:
Giao tiếp nhanh, hỗ trợ streaming hai chiều.
Mạnh mẽ với kiểu dữ liệu xác định rõ ràng.
Nhược điểm:
Cần codegen, tạo stub từ file .proto gây phức tạp trong việc triển khai.
Không hỗ trợ trực tiếp trình duyệt.
Định dạng dạng nhị phân khiến việc debug trở nên khó khăn, thiếu minh bạch với nhà phát triển.
gRPC là lựa chọn tốt cho hệ thống hiệu suất cực cao, nhưng có chi phí phát triển và bảo trì không nhỏ.
JSON-RPC (JSON Remote Procedure Call)
JSON-RPC là giao thức gọi thủ tục từ xa dựa trên JSON, cho phép gọi các phương thức với tên cụ thể, hỗ trợ batch requests và notifications. Có thể chạy trên nhiều loại transport như stdio, HTTP, hoặc SSE.
Ưu điểm:
Dễ đọc, dễ debug vì sử dụng JSON.
Hỗ trợ tác vụ theo lệnh (action-based) phù hợp với các workflow dựa trên agents.
Linh hoạt về transport: từ giao tiếp cục bộ via stdio đến cloud via HTTP/SSE.
Không cần tạo schemas hoặc codegen phức tạp.
Tương thích rộng rãi với các nền tảng và ngôn ngữ lập trình.
JSON-RPC mang đến sự cân bằng giữa tính cấu trúc, đơn giản và linh hoạt cho môi trường đa dạng như MCP.
Tại Sao JSON-RPC Phù Hợp Với MCP?
1. Phương Thức Gọi Theo Tên Có Ý Nghĩa
Thay vì thao tác trên các đường dẫn URL phức tạp, JSON-RPC sử dụng các phương thức tên rõ ràng như run_analysis(). Điều này rất phù hợp với cách các tác nhân AI "nghĩ" theo hành động (verbs), giúp dễ dàng hiểu và gỡ lỗi hơn.
“REST dành cho danh từ, còn JSON-RPC dành cho động từ.” – Một lập trình viên từng chia sẻ.
2. Đa Dạng Phương Thức Giao Thức
MCP có thể chạy với stdio khi cục bộ hoặc HTTP/SSE khi ở môi trường đám mây, tất cả dùng chung một giao thức JSON-RPC. Điều này làm đơn giản quá trình triển khai và đảm bảo tính nhất quán.
3. Dễ Đọc, Dễ Gỡ Lỗi
Định dạng JSON dễ đọc, dễ ghi log và replay, giúp các nhà phát triển kiểm tra luồng cuộc gọi cũng như xử lý lỗi trở nên thuận tiện hơn.
4. Hỗ Trợ Tương Tác Thời Gian Thực & Batching
JSON-RPC cho phép gửi hàng loạt yêu cầu cùng lúc (batch requests) và nhận thông báo (notifications) như cập nhật trạng thái, nhờ đó tránh phải lặp đi lặp lại HTTP polling phức tạp.
5. Chi Phí Phát Triển Thấp
Không cần định nghĩa protobuf schemas hay compile stub, do vậy giảm thiểu gánh nặng công cụ và tiết kiệm thời gian phát triển.
6. Tương Thích Nhiều Nền Tảng
Vì JSON-RPC dựa trên JSON, nó không bị giới hạn bởi các định dạng nhị phân, có thể chạy trong trình duyệt, CLI hay bất cứ ngôn ngữ nào mà không cần thư viện hỗ trợ riêng biệt.
Cách MCP Áp Dụng JSON-RPC
Bên trong MCP, JSON-RPC 2.0 được sử dụng để định nghĩa các công cụ với:
Tên phương thức
Schema đầu vào
Cấu hình transport
Ví dụ, client gửi một yêu cầu như sau:
{
"jsonrpc":"2.0",
"method":"sample_rows",
"params":{"table":"sales","limit":5},
"id":1
}
Server trả về kết quả tương ứng hoặc lỗi nếu có. MCP còn hỗ trợ streaming qua Server-Sent Events (SSE) hoặc stdio, giúp áp dụng linh hoạt cho cả môi trường desktop và đám mây. Việc hỗ trợ batch calls và notifications cũng giúp xâu chuỗi các công cụ tạo nên quy trình làm việc phức tạp một cách trơn tru.
Bảng So Sánh Tổng Quan
Tiêu chí
REST
gRPC
JSON-RPC
Độ đọc hiểu (Human-readable)
Có
Không (binary)
Có
Overhead giao thức
Trung bình
Thấp (nhị phân)
Thấp (text)
Hỗ trợ streaming
Giới hạn
Full duplex (HTTP/2)
Cơ bản qua notifications
Độ phức tạp thiết lập
Thấp
Cao (codegen bắt buộc)
Thấp
Linh hoạt giao thức vận chuyển
HTTP only
HTTP/2 only
HTTP, stdio, SSE, tùy biến
Đa nền tảng
Cao
Thấp
Cao
Đánh Giá Cá Nhân
JSON-RPC mang lại giải pháp trung hòa phù hợp cho MCP: đủ cấu trúc nhưng không phức tạp, dễ đọc nhưng vẫn linh hoạt, hoạt động trên đa nền tảng. Nó giữ được sự nhất quán cho giao tiếp giữa agent và công cụ mà không khiến nhà phát triển bị ràng buộc bởi các framework nặng nề. Trong khi gRPC có thể vượt trội trong những hệ thống yêu cầu hiệu suất tối đa, MCP chọn hướng đi ưu tiên tính đơn giản và thích ứng – và JSON-RPC đáp ứng chính xác những điều này.
JSON-RPC thực sự là "chìa khóa" giúp MCP xây dựng một hệ sinh thái công cụ dễ triển khai, thân thiện với nhà phát triển, và linh hoạt trên nhiều môi trường khác nhau.