-
Notifications
You must be signed in to change notification settings - Fork 0
MS_CBOR
- 戻る(WebAPI、その他、開発の色々(
MS_MiscDevelopmentTopics.md))
- IoT, etc. 向け
- COSE(
MS_COSE.md)メッセージのベース - FIDO2の CTAP でも使用される。
-
MessagePack の後継ということらしく、MessagePack を置き換える可能性がある。
-
標準が CBOR をいろいろなところで使い始めているので、
CBOR vs MessagePack は CBOR の勝利ということで落ち着きそう(という話がある)。
補足(最新化): この見立ては概ねそのとおりになった。 IETF 標準の中で CBOR を採用する仕様が増えている。
- COSE(RFC 9052 / 9053)— JWTの JOSE に対応する署名・暗号化
- CWT(RFC 8392)— CBOR 版のトークン(CWT:
MS_CWT.md)- CTAP2(FIDO2)— 認証器との通信
- COSE_Sign1 — ワクチン接種証明書などの電子証明にも使われた
ただし「置き換え」というより棲み分けである。 MessagePack はアプリ内・ゲーム・RPC で依然として使われており、 CBOR は標準化された仕様の中で使われる傾向が強い。
| 部分 | 内容 |
|---|---|
| 型 | Major Type が 1 byte で定義 |
| 値 | その後、0-n bytes で実際の値が定義 |
- JSON と比べて型が多い。
- JSON は、数値型(int, float 含む)、文字列型、真偽値、配列、オブジェクト、Null
- CBOR は、Major Type と呼ばれ、0 から 7 まで定義されている。
| Major type | 内容 |
|---|---|
| 0 | 符号なし整数(unsigned integer)。uint8、uint16、uint32、uint64 に分化される big-endian |
| 1 | マイナス数値(negative integer)。同上 |
| 2 | バイト文字列(byte string)。長さは無制限(文字列バイトの指定 or break 文字指定) |
| 3 | テキスト文字列(text string)。UTF-8 文字列、長さは無制限 |
| 4 | 配列(array)。長さは無制限(項目数の指定 or break 指定) |
| 5 | マップ(map、JSON だと object)。キー・値のペアを列挙 |
| 6 | 拡張用のオプション領域(タグ)。日時型、多倍長整数、固定小数点、base64、正規表現、MIME message |
| 7 | 浮動小数点(floating-point numbers)。float16、float32、float64、真偽値(Boolean)、Null、Undefined も定義 |
補足: JSON に対する CBOR の実務的な利点は次の 3 点である。
- バイナリをそのまま入れられる(Major type 2)。 JSON では Base64 にする必要があり、約 33% 膨らむ。
- マップのキーが文字列に限定されない(整数キーが使える)。
- タグ(Major type 6)により、 日時や多倍長整数の意味づけを標準的に表現できる。
一方、マップのキーが文字列以外を取れることは、 JSON へ変換する際に情報が落ちる原因にもなる。
-
CDDL: Concise data definition language
-
CBOR のスキーマ定義の標準
- CBOR 表記規則(CBOR を表現する表記法)
- JSON データ構造の記述にも使用できる。
- (G1)CBOR データ構造の全体的な構造の明瞭な記述を提供する。
- (G2)自由度を CBOR データ形式で表現する柔軟性。
- (G3)必要に応じてフォーマットの選択を制限する可能性がある[形式]。
- (G4)共通の CBOR データ型および構造を表現できること。
- (G5)人と機械が読み書き可能であること。
- (G6)データフォーマット準拠の自動チェック。
- (G7)さらなる処理のために CBOR データから特定の要素を抽出する。
- PeterO.Cbor(
MS_PeterOCbor.md) - Dahomey.Cbor(
MS_DahomeyCbor.md)
補足(最新化): .NET には
System.Formats.Cbor(.NET 5 以降の標準ライブラリ)が追加されている。 低レベルなCborReader/CborWriterを提供するもので、 オブジェクトの自動マッピングは行わない。 標準仕様(COSE / CWT)を扱う用途にはこちらが適する。
- WebAPI
- JSON
- MessagePack
- CBOR — Concise Binary Object Representation
- RFC 8949 - Concise Binary Object Representation (CBOR)
- RFC 8610 - Concise Data Definition Language (CDDL)
- CDDLの紹介|株式会社レピダム
移行メモ(最新化): 元ページは仕様として RFC 7049 を挙げていたが、 RFC 8949(2020 年、STD 94)で置き換えられている。 CDDL も draft ではなく RFC 8610 として発行済みである。
Tags: IT国際標準, プログラミング, 通信技術
このWikiは「Open棟梁Project」,「OSSコンソーシアム 開発基盤部会」によって運営されています。