タイプされた
タイプタグ付きの受信メッセージは、すべてを読まなくても受信メッセージが何であるかを知ることができる限り、非常に自由です。もしそうなら、あなたはもはやメッセージの順序を気にしません。これは、メッセージの受信者が送信された内容を簡単に処理できるためです。したがって、取得したものをそのまま使用し、それぞれに適した処理を実行するアプリケーションを作成できます。
フォーマット
値とサイズの制約を定義できるスキーマ言語は非常に便利です。これは、メッセージの送信者が誤って無効なメッセージを送信できないことを意味します。さらに、受信者は受信メッセージがスキーマを満たしているかどうかを自動的に判断できます。これは、ネットワーク サービスを実装する上での真のボーナスです。メッセージの検証の大部分が自動的に行われます。
サイズの制約とは、スキーマ内の配列の長さを指定できることを意味し、生成されたコードはそれより長いまたは短い配列の処理を拒否します。値の制約により、「ベアリング」と呼ばれるメッセージ フィールドを想像してください。0 から 359 の間になるように制限したい場合があります。
これらはどちらも、インターフェイスが何であるかについて明確で明確なステートメントを作成し、それを自動的に適用することを可能にします。最近、いくつかのネットワーク インターフェイス データの検証が不適切に実装されているというセキュリティ バグがいくつありますか...
オプション
このすべてを行うシリアル化標準の 1 つが ASN.1 です。私が使用したツールは、ASN.1 スキーマを使用してシリアル化および逆シリアル化するコードを生成し、値とサイズの制約が満たされていることを自動的にチェックし、受信メッセージの種類を通知します。ASN.1 のツールはかなり古く、更新が必要です。更新された場合、バイナリ形式とテキスト ワイヤ形式の両方が利用可能で、あらゆる目的に最適です。
現在は JSON スキーマもあり、型、値、およびサイズの制約があるようです。これはあなたが探しているものかもしれません。
私は、Google Protocol Buffers がタイプのタグ付けをうまく行っておらず、値とサイズの制約を行っていないことを確信しています。次の行に沿って GPB スキーマのコメントを見てきました。
// 10 を超えてはなりません。
それがスキーマに書き込まれているものである場合、スキーマ言語は間違いなく不十分です...
Thriftについてはよくわかりません。値の制約があるかどうかもわかりません(間違っている場合は誰か訂正してください!)。
短所
何も考えられない!開発者をいらいらさせる可能性があります。彼らが良いと思ったコードが、ジャンク メッセージを生成していることがすぐに明らかになり、それが彼らをひどく悩ませています...