Simple Message Queue (旧称:MNS) クライアントには、Base64 エンコーディングのための組み込みオプションが用意されています。本ガイドでは、メッセージの送信および受信時に Base64 エンコーディングを使用すべきシナリオについて説明します。
背景情報
Base64 はバイナリデータを ASCII 文字列に変換し、テキストベースの環境を通じて安全に転送できるようにします。
Base64 エンコーディングの利点
-
互換性:Base64 エンコードされた文字列は表示可能な ASCII 文字のみを使用するため、メール、JSON、XML などのテキストベースのフォーマットで使用しても、文字化けのリスクなく安全に扱えます。
-
セキュリティ:Base64 は暗号化ではありませんが、プレーンテキスト形式の一部ではバイナリデータを直接読み取れなくすることで、セキュリティのレイヤーを追加します。
-
簡便性:ほとんどのプログラミング言語およびライブラリには、Base64 のサポートが組み込まれています。
Base64 エンコーディングの欠点
-
データ肥大化:Base64 エンコーディングにより、データサイズが約 33 % 増加します。
-
効率低下:エンコードおよびデコードには追加の計算リソースが必要です。特に大量のデータを処理する場合、パフォーマンスへのオーバーヘッドが顕著になる可能性があります。
-
可読性の低さ:エンコードされたメッセージ本文は人間が読み取れません。
Base64 エンコーディングの使用タイミング
キュー型メッセージングモデル
メッセージ本文に特殊文字が含まれていない場合は、Base64 エンコーディングをスキップしてください。
-
メッセージを送信するには、
message.setMessageBodyAsRawStringメソッドを呼び出します。 -
メッセージを受信するには、
message.getMessageBodyAsRawStringメソッドを呼び出します。
トピックモデル(キュー/HTTP サブスクリプション)
トピックモデルでは、サブスクリプションの NotifyContentFormat プロパティによってプッシュメッセージのフォーマット(SIMPLIFIED、JSON、または XML)が決定されます。詳細については、「サブスクリプションフォーマット」をご参照ください。
-
SIMPLIFIED フォーマット:メッセージ本文に特殊文字が含まれていない場合は、Base64 エンコーディングをスキップしてください。
-
メッセージを送信するには、
RawTopicMessageを使用してメッセージオブジェクトを初期化します。 -
メッセージを消費するには、
message.getMessageBodyAsRawString()を呼び出します。
-
-
JSON または XML フォーマット:Base64 エンコードされた文字列は JSON や XML などのテキストフォーマットでの転送に適しているため、Base64 エンコーディングを必ず使用する必要があります。
-
メッセージを送信するには、TopicMessage を使用してメッセージオブジェクトを初期化します。本文は自動的に Base64 エンコードされ、Message フィールドに格納されます。
-
メッセージを消費するには、
message.getMessageBodyAsRawString();を呼び出して Message フィールドの値を取得し、その後 Base64 デコードを行います。JSONObject object = new JSONObject(message.getMessageBodyAsRawString()); String jsonMessageData = String.valueOf(object.get("Message")); String messageBody = new String(Base64.decodeBase64(jsonMessageData));
-
トピックモデル(メールサブスクリプション)
メッセージ本文に特殊文字が含まれていない場合は、Base64 エンコーディングをスキップしてください。
-
メッセージを送信するには、
message.setMessageBodyAsRawStringメソッドを呼び出します。 -
メッセージを受信するには、
message.getMessageBodyAsRawStringメソッドを呼び出します。
トピックモデル(テキストメッセージサブスクリプション)
メッセージ本文に特殊文字が含まれていない場合は、Base64 エンコーディングをスキップしてください。
-
メッセージを送信するには、
message.setMessageBodyAsRawStringメソッドを呼び出します。 -
メッセージを受信するには、
message.getMessageBodyAsRawStringメソッドを呼び出します。
トピックモデル(Mobile Push サブスクリプション)
メッセージ本文に特殊文字が含まれていない場合は、Base64 エンコーディングをスキップしてください。
-
メッセージを送信するには、
message.setMessageBodyAsRawStringメソッドを呼び出します。 -
メッセージを受信するには、
message.getMessageBodyAsRawStringメソッドを呼び出します。