JSON-RPC là gì? Tin nhắn, Phương thức và Xử lý Lỗi
API Thu thập Dữ liệu Toàn cầu không có thông tin lấy nội dung web công khai được phép và có thể render JavaScript khi JSON-RPC phải được quan sát trong một phản hồi thực.
TL;DR
- JSON-RPC có một vai trò giao thức chính xác. JSON-RPC là một giao thức gọi thủ tục từ xa nhẹ, không trạng thái, đại diện cho các cuộc gọi phương thức, kết quả và lỗi dưới dạng các đối tượng JSON.
- JSON-RPC phải được đọc ở lớp chính xác. Phương tiện, đại diện, chính sách trình duyệt và ủy quyền ứng dụng vẫn là những mối quan tâm tách biệt.
- Các trung gian có thể thay đổi những gì một ứng dụng quan sát. Cổng, bộ đệm, mặc định trình duyệt và thư viện khách có thể thêm xử lý giữa các byte nguồn và dữ liệu đã phân tích.
- Xác thực cần chứng cứ nội dung. Một trạng thái hoặc trường đơn lẻ không chứng minh rằng đại diện công khai mong đợi đã đến.
- An ninh phụ thuộc vào phạm vi và xác thực. Cú pháp giao thức không bao giờ cấp quyền để truy cập một tài nguyên hoặc tin tưởng vào một giá trị do người gọi cung cấp.
JSON-RPC là gì?
JSON-RPC là một giao thức gọi thủ tục từ xa nhẹ, không trạng thái, đại diện cho các cuộc gọi phương thức, kết quả và lỗi dưới dạng các đối tượng JSON. Phiên bản 2.0 định nghĩa các thành viên tin nhắn và quy tắc xử lý nhưng không yêu cầu HTTP hoặc bất kỳ phương tiện cụ thể nào khác. Một khách hàng đặt tên một phương thức, tùy chọn cung cấp các tham số có cấu trúc, và sử dụng một id để liên kết một phản hồi với yêu cầu của mình.
Định nghĩa hữu ích bao gồm cả cơ chế và ranh giới của nó. JSON-RPC ảnh hưởng đến một phần cụ thể của một trao đổi, trong khi các trách nhiệm lân cận vẫn thuộc về HTTP, trình duyệt, phương tiện được chọn, ứng dụng, hoặc mô hình dữ liệu của máy chủ. Giữ các lớp đó tách biệt giúp các báo cáo lỗi có thể tái sản xuất và ngăn chặn một thay đổi cấu hình bị nhầm lẫn với một quyết định kiểm soát truy cập.
Đối với các nhà phát triển API, câu hỏi đầu tiên là ai tạo ra giá trị hoặc hành vi. Câu hỏi tiếp theo là ai diễn giải nó. Câu hỏi cuối cùng là kết quả quan sát được nào chứng minh rằng việc diễn giải hoạt động. Ba câu trả lời đó biến một thuật ngữ từ điển thành một hợp đồng giao diện có thể kiểm tra.
Cách mà Tin nhắn JSON-RPC Hình thành Một Cuộc Hội Thoại
Một đối tượng yêu cầu chứa jsonrpc được đặt thành 2.0, một chuỗi phương thức, các tham số tùy chọn, và thường là một id. Các tham số có thể là một mảng cho các đối số vị trí hoặc một đối tượng cho các đối số có tên. Các tham số có tên giảm phụ thuộc ngẫu nhiên vào thứ tự, nhưng tên của chúng phải khớp chính xác với hợp đồng máy chủ.
Một phản hồi thành công lặp lại id của yêu cầu và chứa một thành viên kết quả. Một phản hồi thất bại lặp lại id và chứa một đối tượng lỗi với mã số và tin nhắn, cộng với dữ liệu tùy chọn. Kết quả và lỗi là những thay thế; một phản hồi không nên tuyên bố cả hai kết quả.
Một thông báo bỏ qua thành viên id và yêu cầu máy chủ thực hiện công việc mà không gửi phản hồi. Việc thiếu phản hồi là một phần của giao thức, vì vậy một thông báo không thể xác nhận thành công hoặc phơi bày một lỗi ứng dụng cho người gửi của nó. Chỉ sử dụng nó khi sự không chắc chắn đó là chấp nhận được.
Một lô là một mảng JSON chứa nhiều đối tượng yêu cầu hoặc thông báo. Máy chủ có thể xử lý chúng theo thứ tự riêng của nó, và thứ tự phản hồi không nhất thiết phải khớp với thứ tự yêu cầu. Do đó, khách hàng liên kết các kết quả lô qua id thay vì theo vị trí mảng.
Các thành viên trong một đối tượng JSON-RPC 2.0
Các thuật ngữ sau tách biệt các thành phần thường bị gộp thành một nhãn. Read chúng như các giao diện giữa các bên tham gia thay vì như một trang trí trong một bản theo dõi mạng.
jsonrpc
Thẻ phiên bản giao thức. Các tin nhắn JSON-RPC 2.0 sử dụng giá trị chuỗi 2.0 để chúng có thể được phân biệt với các hình thức cũ hơn.
method
Tên thủ tục từ xa. Những tên bắt đầu bằng rpc. được dành riêng cho các mở rộng giao thức và không nên được sử dụng cho các phương thức ứng dụng thông thường.
params
Các đối số có cấu trúc tùy chọn được cung cấp bởi vị trí trong một mảng hoặc theo tên trong một đối tượng.
id
Một chuỗi, số, hoặc giá trị null được sử dụng để khớp một phản hồi với một yêu cầu. Bỏ qua id tạo ra một thông báo.
result
Giá trị thành công được trả về bởi phương thức. Lược đồ của nó thuộc về hợp đồng phương thức của ứng dụng.
error
Một đối tượng lỗi với các thành viên mã số và tin nhắn và dữ liệu tùy chọn có thể mang chi tiết chẩn đoán có cấu trúc.
Tại sao JSON-RPC quan trọng trong Thu thập Dữ liệu Web
JSON-RPC có thể thay đổi những gì byte đến, cách những byte đó được diễn giải, hoặc liệu mã trình duyệt có thể quan sát kết quả. Một quy trình thu thập nên xác định tác động đó trước khi thay đổi công cụ. Ghi lại URL đã yêu cầu, URL cuối, trạng thái phản hồi, loại đại diện, các trường giao thức liên quan và một dấu hiệu nội dung kỳ vọng. Hồ sơ gọn gàng đó làm cho một trang chính xác khác với một thông điệp truy cập, màn hình đồng ý, mục tiêu chuyển hướng, khung ứng dụng trống, hoặc mã hóa không tương thích.
HTTP trực tiếp là con đường thu thập đơn giản nhất khi dữ liệu yêu cầu tồn tại trong một phản hồi được máy chủ render mở. Một trình duyệt trở nên liên quan khi nội dung đã được phê duyệt phụ thuộc vào việc thực thi JavaScript, trạng thái do trình duyệt quản lý, điều hướng, hoặc chính sách an ninh của trình duyệt. Hai con đường không nên bị buộc phải trông giống nhau: trình duyệt quản lý cookie, nén, chuyển hướng, CORS và lưu trữ theo quy tắc nền tảng, trong khi một khách hàng trực tiếp tiết lộ một tập hợp mặc định khác.
Tính liên tục phiên quan trọng bất cứ khi nào một phản hồi thiết lập trạng thái cho yêu cầu tiếp theo. Giữ một chuỗi được ủy quyền trong một ngữ cảnh khách hàng giới hạn, bảo tồn ngôn ngữ địa phương và nguồn gốc mạng cần thiết, và tránh trộn lẫn trạng thái từ các công việc không liên quan. Một proxy thay đổi nguồn gốc mạng; nó không tái tạo các tiêu đề, giải mã các đại diện, thực thi kịch bản hoặc cấp quyền truy cập vào nội dung bị hạn chế.
Phân tích chỉ bắt đầu sau khi xác thực đại diện. Xác nhận máy chủ cuối cùng, danh tính chuẩn nơi có sẵn, loại phương tiện, trạng thái giải mã và dấu hiệu kinh doanh cần thiết trước khi trích xuất các trường. Thứ tự này ngăn một trình phân tích biến tài liệu lỗi thành các bản ghi rỗng có vẻ thành công về mặt kỹ thuật.
Các phương tiện trung gian xứng đáng nhận được sự chú ý rõ ràng. Một mạng lưới phân phối nội dung có thể chọn một biến thể được mã hóa, một cổng có thể trả lời OPTIONS, một bộ nhớ đệm có thể tái sử dụng một phản hồi đã thương lượng và một máy chủ ứng dụng có thể thiết lập cookie hoặc các trường ủy quyền. So sánh chỉ mã ứng dụng với đầu ra trang cuối cùng bỏ qua lớp có thể đã đưa ra quyết định.
API Truy xuất Tự động Toàn cầu không có dữ liệu thừa là phù hợp khi một đội cần quản lý việc thu hồi nội dung công khai được phép, bao gồm các trang được trình bày bằng JavaScript. Hợp đồng thu mua vẫn nên xác định mục tiêu, các trường được phép, đại diện mong đợi, dấu hiệu chấp nhận và điều kiện dừng.
Khi nào JSON-RPC là một sự lựa chọn tốt
JSON-RPC có được vị trí trong kiến trúc khi nó thay đổi hành vi sản phẩm cụ thể, yêu cầu tương thích hoặc quyết định chẩn đoán. Những trường hợp sử dụng này mô tả công việc trước và tính năng giao thức sau.
API Hướng Theo Lệnh
Tên phương thức có thể diễn tả các hành động không dễ dàng khớp với việc tạo, đọc, cập nhật hoặc xóa tài nguyên.
Giao diện ví và nút
Một bao bì yêu cầu nhỏ gọn hoạt động tốt cho phần mềm tiết lộ một tập hợp ổn định các hoạt động có tên.
Công cụ biên tập viên và ngôn ngữ
Các đồng nghiệp có thể trao đổi phương thức và thông báo qua một kênh liên tục trong khi chia sẻ một mô hình tin nhắn duy nhất.
Các kế hoạch điều khiển nhúng
Giao thức có thể hoạt động trên một luồng hoặc phương tiện truyền tải được chọn mà không định nghĩa lại hình dạng đối tượng JSON của nó.
Các hoạt động đọc có thể gộp lại
Các cuộc gọi phương thức độc lập có thể được nhóm lại khi máy chủ và phương tiện vận chuyển hỗ trợ các lô và mã ghép có độ tin cậy cao.
Các khách hàng tương thích nhỏ
Một khách hàng có thể triển khai giao thức cốt lõi với hỗ trợ JSON thông thường, với điều kiện rằng các sơ đồ phương thức được tài liệu hóa riêng biệt.
JSON-RPC so với HTTP phong cách REST và gRPC
JSON-RPC tập trung API vào việc gọi phương thức, trong khi HTTP phong cách REST tập trung vào tài nguyên, đại diện và ngữ nghĩa phương thức tiêu chuẩn. gRPC cũng mô hình hóa các phương thức, nhưng thêm một chuỗi công cụ sơ đồ và một ngăn vận chuyển hướng nhị phân. JSON-RPC hấp dẫn khi một bao bì phương thức nhỏ gọn là quan trọng và phương tiện vận chuyển phải vẫn là một lựa chọn riêng biệt.
| Kích thước | JSON-RPC | Khái niệm liên quan hoặc thay thế |
|---|---|---|
| Trừu tượng chính | Các phương thức từ xa được đặt tên | Tài nguyên được truy cập bởi URIs |
| Bao bì | Các đối tượng yêu cầu và phản hồi JSON đã được định nghĩa | Các quy tắc yêu cầu và đại diện HTTP |
| Phương tiện vận chuyển | Không được quy định bởi thông số kỹ thuật | HTTP là bề mặt giao thức |
| Lỗi | Đối tượng và mã lỗi JSON-RPC | Trạng thái HTTP cộng với đại diện phản hồi |
| Tin nhắn một chiều | Thông báo không có id | Hành vi HTTP đặc thù ứng dụng |
Một so sánh chỉ hữu ích nếu nó duy trì biên giới lớp. Hai cơ chế có thể đồng tồn tại trong một yêu cầu, và việc thay thế một cái không tự động thay thế cái khác. Tài liệu hóa hành vi đã chọn theo các đầu vào, đầu ra quan sát được, trạng thái thất bại và quyền sở hữu.
Những sai lầm JSON-RPC gây ra kết quả mơ hồ
- Sử dụng thông báo cho các ghi quan trọng. Một thông báo không có phản hồi, vì vậy người gọi không thể biết liệu việc xác thực hoặc thực thi đã thất bại hay chưa.
- Khớp các phản hồi theo vị trí. Thông số kỹ thuật cho phép phản hồi ở bất kỳ thứ tự nào. Khớp mỗi kết quả với id yêu cầu.
- Tái sử dụng id khi các cuộc gọi đang hoạt động. Các id hoạt động trùng lặp làm cho việc tương quan mơ hồ, đặc biệt là qua một kết nối liên tục.
- Xử lý mã trạng thái HTTP như là kết quả phương thức. Khi JSON-RPC hoạt động qua HTTP, trạng thái vận chuyển và kết quả JSON-RPC mô tả các lớp khác nhau. Kiểm tra cả hai.
- Để cho các lược đồ phương thức ngầm định. Bì thư xác định các thành viên giao thức, không phải các loại và quy tắc cho mỗi phương thức ứng dụng. Xuất bản một hợp đồng phương thức riêng biệt.
- Trả lại văn bản ngoại lệ nội bộ. Dữ liệu lỗi có thể tiết lộ chi tiết ngăn xếp hoặc bí mật. Ánh xạ các lỗi thành mã công khai ổn định và các trường chẩn đoán đã được phê duyệt.
Hầu hết các lỗi trở nên dễ chẩn đoán hơn sau khi loại bỏ những giả định về những gì mà một thư viện hoặc trình duyệt đã làm tự động. Ghi lại một dấu vết tối thiểu, xóa đi bí mật, và thay đổi một biến có kiểm soát tại một thời điểm. Mục tiêu là cung cấp một giải thích ổn định cho đại diện đã trả về, không phải là một tập hợp các điều chỉnh tiêu đề không liên quan.
Một Chuỗi Đánh giá JSON-RPC
Chuỗi này hoạt động như một đánh giá thiết kế trước khi ra mắt và như một chẩn đoán sản xuất sau khi có thay đổi hành vi. Nó giữ cho chứng cứ giao thức có liên quan đến kết quả ứng dụng.
- Kiểm kê mọi phương thức và quyết định xem các tham số của nó là theo vị trí hay theo tên; không trộn lẫn các quy ước một cách tùy tiện bên trong một API.
- Xác định lược đồ kết quả và mã lỗi công khai cho mỗi phương thức trước khi triển khai các bộ xử lý.
- Chọn một quy tắc tạo id mà giữ cho nó duy nhất trong các cuộc gọi đang hoạt động và hoạt động trong mọi ngôn ngữ của khách hàng.
- Tách biệt các lỗi vận chuyển, JSON định dạng sai, đối tượng JSON-RPC không hợp lệ, lỗi phương thức và kết quả thành công trong nhật ký và bài kiểm tra.
- Kiểm tra thông báo mà không cần mong đợi phản hồi, bao gồm cả thông báo được đặt trong một lô.
- Xáo trộn thứ tự phản hồi lô trong các bài kiểm tra để chứng minh rằng khách hàng liên quan theo id chứ không phải chỉ số mảng.
- Tài liệu xác thực, ủy quyền, giới hạn kích thước thông điệp và khung vận chuyển vì JSON-RPC bản thân không định nghĩa chúng.
Kết thúc đánh giá bằng cách lưu một mẫu nhỏ đã chấp nhận và một mẫu bị từ chối với cùng các quy tắc xóa. Các thay đổi trong tương lai có thể được so sánh với danh tính trang đã biết, các trường mong đợi và nội dung đã giải mã thay vì chỉ bộ nhớ hoặc ảnh chụp màn hình.
Ranh giới Bảo mật Bên Ngoài Bì Thư JSON
JSON-RPC không xác thực người gọi, mã hóa lưu lượng, giới hạn kích thước thông điệp hoặc ủy quyền cho một phương thức. Những điều khiển đó thuộc về giao thức và ứng dụng được chọn. Một triển khai WebSocket, một triển khai HTTP và một luồng nội bộ có thể sử dụng cùng các đối tượng JSON-RPC trong khi có những mô hình đe dọa khác nhau.
Tên phương thức và tham số là đầu vào không đáng tin cậy. Xác thực phương thức chống lại danh sách cho phép, xác thực tham số chống lại lược đồ phương thức và áp dụng ủy quyền sau khi danh tính người gọi được thiết lập. Một yêu cầu JSON-RPC cú pháp hợp lệ không phải là sự cho phép để thực hiện một hoạt động.
Phản hồi lỗi nên giúp khách hàng hành động mà không tiết lộ chi tiết triển khai. Mã công khai ổn định, một thông điệp ngắn gọn, và dữ liệu có cấu trúc giới hạn thì dễ theo dõi hơn so với các ngoại lệ thô. Nhật ký có thể giữ một giá trị tương quan nội bộ mà không sao chép đầy đủ các đối tượng tham số nhạy cảm.
Các tiêu chuẩn Định nghĩa JSON-RPC
đặc tả JSON-RPC 2.0 định nghĩa các yêu cầu, phản hồi, thông báo và lô. Nguồn chính này cố định từ vựng và ranh giới được sử dụng trong bài viết này, trong khi hành vi triển khai vẫn cần được quan sát trong các khách hàng và triển khai được chọn.
tiêu chuẩn trao đổi dữ liệu JSON định nghĩa cú pháp JSON được giao bởi giao thức. Nguồn chính này cố định từ vựng và ranh giới được sử dụng trong bài viết này, trong khi hành vi triển khai vẫn cần được quan sát trong các khách hàng và triển khai được chọn.
đặc tả OpenRPC cung cấp định dạng mô tả có thể đọc bởi máy cho các API JSON-RPC. Nguồn chính này cố định từ vựng và ranh giới được sử dụng trong bài viết này, trong khi hành vi triển khai vẫn cần được quan sát trong các khách hàng và triển khai được chọn.
giao thức WebSocket là một phương tiện vận chuyển có thể là liên tục cho các thông điệp JSON-RPC. Nguồn chính này cố định từ vựng và ranh giới được sử dụng trong bài viết này, trong khi hành vi triển khai vẫn cần được quan sát trong các khách hàng và triển khai được chọn.
Điểm Nhấn của JSON-RPC
JSON-RPC là một giao thức gọi phương thức nhỏ, không phải là một nền tảng API hoàn chỉnh; sự đơn giản của nó hoạt động tốt nhất khi các nhóm rõ ràng xác định các lược đồ phương thức, hành vi vận chuyển, bảo mật và khả năng quan sát xung quanh bì thư.
Đưa quy tắc đó vào một bài kiểm tra chấp nhận. Nêu rõ người tham gia nào gửi tín hiệu, người tham gia nào diễn giải nó, những trung gian nào có thể thay đổi đường đi, và chỉ ra dấu hiệu nội dung nào chứng minh thành công. Điều này làm cho JSON-RPC trở thành một phần của hệ thống có thể quan sát thay vì chỉ là một nhãn đính kèm sau một lỗi.
Sẵn sàng Xác thực Phản hồi Web Công khai?
Sử dụng Scrapeless Universal Scraping API để lấy nội dung công khai đã phê duyệt và kiểm tra hợp đồng đại diện được mô tả trong hướng dẫn này.
Đăng ký hôm nay và nhận $5 tín dụng miễn phí — không yêu cầu thẻ tín dụng.
Nhận Tín dụng $5 của bạn →Câu hỏi thường gặp
JSON-RPC có gắn bó với HTTP không?
Không. JSON-RPC 2.0 là không phụ thuộc vào phương tiện vận chuyển và có thể được truyền qua HTTP, WebSocket, luồng nội bộ hoặc một kênh thông điệp khác. Mỗi triển khai phải xác định riêng khung, xác thực và hành vi kết nối.
Điều gì làm cho một yêu cầu JSON-RPC trở thành một thông báo?
Một yêu cầu JSON-RPC là một thông báo khi nó bỏ qua thẻ id. Máy chủ không được trả lại phản hồi cho thông điệp đó, ngay cả khi thông báo xuất hiện trong một lô.
Có thể phản hồi lô JSON-RPC đến trong một thứ tự khác không?
Có. Một máy chủ có thể xử lý các mục trong lô theo thứ tự mà nó chọn và trả lại các đối tượng phản hồi theo thứ tự khác. Khách hàng phải sử dụng mỗi id để liên kết phản hồi với yêu cầu của mình.
Các lỗi JSON-RPC khác với các lỗi HTTP như thế nào?
Một lỗi JSON-RPC báo cáo kết quả của việc phân tích hoặc gọi một phương thức từ xa, trong khi một lỗi HTTP báo cáo kết quả HTTP ở cấp độ vận chuyển. Một triển khai HTTP nên quan sát cả hai lớp mà không hợp nhất chúng thành một trạng thái.
JSON-RPC có định nghĩa xác thực không?
Không. JSON-RPC không định nghĩa xác thực người gọi hoặc ủy quyền. Giao thức và ứng dụng xung quanh phải thiết lập danh tính, bảo vệ thông tin xác thực và kiểm tra quyền cho mỗi phương thức.