0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

protobuf.devのAPI Best Practicesを読んでいく全部俺Advent Calendar 2024

Day 5

API Best Practices ~不透明データをWebセーフエンコーディングとバイナリシリアライズでエンコードする

Last updated at Posted at 2024-12-04

不透明データをWebセーフエンコーディングとバイナリシリアライズでエンコードする

サーバーとクライアント間でデータを送受信する際に、一部のデータはクライアントには直接理解できない形式で送られることがあります。このようなデータを「不透明なデータ」と呼びます。
例えば、サーバー側で生成された内部的な識別子やバージョン情報などがこれに該当します。

手法:

  1. プロトコルバッファの定義:
    不透明なデータを格納するための専用のプロトコルバッファを定義します。
    このプロトバッファには、不透明なデータの各要素に対応するフィールドが含まれます。

  2. シリアライゼーション:
    プロトコルバッファをバイナリ形式にシリアライズします。
    バイナリ形式は、コンピュータが直接理解できる形式で、効率的なデータ転送が可能です。

  3. WebセーフBase64エンコーディング:
    シリアライズされたバイナリデータを、URLやファイル名などに安全に使用できるWebセーフBase64形式に変換します。

  4. クライアントへの送信:
    WebセーフBase64エンコードされたデータを、クライアントに送信します。

  5. クライアント側での処理:
    クライアントは、受信したWebセーフBase64エンコードされたデータをデコードします。
    デコードされたバイナリデータを、事前に定義されたプロトコルバッファの構造に従ってデシリアライズします。
    デシリアライズされたデータから、必要な情報を抽出します。

なぜプロトコルバッファを使うのか?

  • 効率性: バイナリ形式でコンパクトにデータを表現できるため、ネットワーク通信やディスクへの保存において高速な処理が可能です。
  • 拡張性: 新しいフィールドを追加したり、既存のフィールドの型を変更したりしても、古いデータとの互換性を保つことができます。
  • 言語のサポート: 様々なプログラミング言語に対応しており、一度定義したスキーマを様々な言語で利用できます。

例外

非常に特殊なケースにおいて、厳密に設計された独自のフォーマットが、プロトコルバッファよりもコンパクトな表現を実現できる場合があります。
ただし、このようなケースは非常にまれであり、一般的にはプロトコルバッファを使用することを推奨します。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?