Protobuf, MessagePack, CBOR, BSON API

Giải mã và mã hoá Protobuf (có .proto hoặc không cần schema), MessagePack, CBOR, BSON qua lại với JSON. Nhập base64, hex hoặc file; xuất base64, hex.

POSThttps://apibox.io.vn/v1/binary-formats
Dữ liệu & JSON▶ Dùng thử online

Chọn format (protobuf, msgpack, cbor, bson) và action. Để giải mã, gửi dữ liệu nhị phân qua data (base64 hoặc hex, tự nhận diện; bỏ qua khoảng trắng, 0x và dấu hai chấm) hoặc tải file; kết quả là JSON. Để mã hoá, gửi giá trị qua json; kết quả có base64, hex và kích thước. to chuyển giá trị vừa giải mã sang định dạng khác (ví dụ MessagePack → CBOR).

Protobuf: gửi schema qua proto (văn bản proto2 / proto3, hỗ trợ message lồng nhau, enum, map, oneof, trường repeated dạng packed, số nguyên 64 bit giữ chính xác dưới dạng chuỗi) và message_type (ví dụ shop.Order). Tên trường có thể theo .proto hoặc lowerCamelCase; enum nhận tên hoặc số; bytes dạng base64. defaults=true điền giá trị mặc định cho trường thiếu, enums_as_numbers=true trả enum dạng số. Nếu không có proto, dữ liệu được giải mã không cần schema: mỗi số hiệu trường kèm wire type và các cách đọc có thể (số không dấu, số có dấu zigzag, float / double, chuỗi UTF-8 hoặc message lồng nhau).

Trong JSON, dữ liệu nhị phân hiển thị dạng {"$bytes": "<base64>"}, tag CBOR dạng {"$tag": n, "value": …}, extension MessagePack dạng {"$ext": type, "$bytes": …}, số nguyên lớn dạng chuỗi và thời gian dạng ngày ISO; khi mã hoá cũng nhận đúng các dạng này. BSON dùng MongoDB Extended JSON ($oid, $date, $numberLong…, mặc định dạng relaxed, ejson=canonical cho dạng chuẩn). Giới hạn: 2 MB dữ liệu nhị phân.

Tham số

TênVị tríKiểuBắt buộcMặc định
formatbodystringcóprotobuf, msgpack, cbor hoặc bson.
actionbodystringkhôngdecode hoặc encode (mặc định: encode khi có json).
databodystringkhôngGiải mã: dữ liệu dạng base64 hoặc hex.
filebodyfilekhôngGiải mã: file nhị phân (multipart).
input_encodingbodystringkhôngChỉ định base64 hoặc hex cho data.
jsonbodyobjectkhôngMã hoá: giá trị cần mã hoá (object / mảng JSON, hoặc chuỗi JSON).
protobodystringkhôngProtobuf: nội dung schema .proto.
message_typebodystringkhôngProtobuf: tên message, kèm package (ví dụ shop.Order).
defaultsbodybooleankhôngfalseGiải mã Protobuf: trả cả trường có giá trị mặc định.
enums_as_numbersbodybooleankhôngfalseGiải mã Protobuf: enum dạng số thay vì tên.
ejsonbodystringkhôngrelaxedBSON: Extended JSON dạng relaxed hoặc canonical.
tobodystringkhôngGiải mã: đồng thời mã hoá lại sang msgpack, cbor hoặc bson.

Ví dụ

curl -X POST "https://apibox.io.vn/v1/binary-formats" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"format":"protobuf","proto":"syntax = \"proto3\";\nmessage Test1 { int32 a = 1; }","data":"089601"}'

Kết quả trả về

{
  "format": "protobuf",
  "action": "decode",
  "input_bytes": 3,
  "message_type": "Test1",
  "json": {
    "a": 150
  }
}

Ứng dụng

  • Đọc payload Protobuf từ webhook hay log gRPC mà không cần sinh mã
  • Gỡ lỗi bản tin MessagePack hoặc CBOR từ thiết bị IoT
  • Chuyển một document BSON của MongoDB sang JSON dễ đọc
  • Tạo dữ liệu kiểm thử Protobuf hoặc MessagePack từ JSON

Hỏi đáp

Có giải mã Protobuf được khi không có file .proto không?

Được. Chế độ không schema hiển thị số hiệu trường, wire type và các giá trị có thể của từng trường, đồng thời mở các message lồng nhau. Muốn có tên và kiểu chính xác thì cần schema.

Có hỗ trợ import trong file .proto không?

Chỉ hỗ trợ một schema độc lập: hãy dán các message được import vào cùng văn bản. Các kiểu chuẩn google.protobuf được xử lý như message thông thường.

Số nguyên 64 bit được xử lý thế nào?

Được đọc và ghi chính xác: dạng chuỗi số thập phân trong JSON (int64 / uint64 của Protobuf, số nguyên lớn của MessagePack và CBOR) và dạng $numberLong trong BSON khi vượt quá phạm vi số của JavaScript.

API liên quan

Bắt đầu với 1.000 request miễn phí mỗi tháng. Nhận API key miễn phí →