このドキュメントでは、Simple Message Queue (SMQ, formerly MNS) に対する HTTP API 呼び出しのリクエスト構造、共通パラメーター、応答、およびリクエスト署名方法について説明します。
リクエスト構造
エンドポイント
Simple Message Queue (SMQ, formerly MNS) は複数のリージョンで利用可能です。各リージョンにはパブリックエンドポイントと内部エンドポイントが用意されています。詳細については、「リージョンとエンドポイント」をご参照ください。
リクエストメソッド
PUT、POST、GET、DELETE などのメソッドを使用して、HTTP 経由で Simple Message Queue (SMQ, formerly MNS) にリクエストを送信できます。
リクエストには、正しいパラメーター、ヘッダー、本文を含める必要があります。リクエストおよび応答はどちらも UTF-8 でエンコードされます。
共通パラメーター
共通リクエストヘッダー
パラメーター | 必須 | 説明 |
Authorization | はい | 認証文字列です。詳細については、「リクエスト署名方法」をご参照ください。 |
Content-Length | はい | HTTP リクエストボディの長さです。 |
Content-Type | はい | リクエストコンテンツの MIME タイプです。現在、テキスト形式および XML 形式のみサポートされています。 |
Content-MD5 | いいえ | HTTP リクエストボディの MD5 ハッシュです。詳細については、「The Content-MD5 Header Field」をご参照ください。 説明
|
Date | はい | リクエスト作成時刻です。時刻は GMT 形式である必要があります。リクエスト時刻と SMQ サーバー時刻の差が 15 分を超える場合、そのリクエストは無効とみなされます。 |
Host | HTTP/1.1 の場合は必須です。HTTP/1.0 の場合は任意です。 | リクエストエンドポイントです。形式は |
x-mns-version | はい | 使用する SMQ API のバージョンです。現在のバージョンは |
x-mns-date | いいえ |
|
共通レスポンスヘッダー
パラメーター | 説明 |
Content-Length | HTTP レスポンスボディの長さです。 |
Connection | HTTP 接続のステータスです。 |
Date | 応答が生成された時刻(GMT 形式)です。 |
Server | リクエストを処理した SMQ サーバーの名前です。 |
x-mns-request-id | リクエストの一意な ID です。 |
x-mns-version | SMQ API のバージョンです。現在のバージョンは |
応答
API 呼び出しは標準化された形式でデータを返します。HTTP ステータスコードが 2xx 範囲の場合は成功を示し、4xx または 5xx 範囲の場合は失敗を示します。成功時の応答は XML 形式です。
XML 応答には成功情報および具体的なビジネスデータが含まれます。以下の例は基本的な構造を示しています。
<?xml version="1.0" encoding="utf-8"?>
<!--結果のルートノード-->
<RootNode xmlns="http://mns.aliyuncs.com/doc/v1/">
<!--返された子ノード-->
</RootNode>API 呼び出しが失敗した場合、結果データは返されません。代わりに、サービスは HTTP 4xx または 5xx ステータスコードを返します。レスポンスボディには、具体的なエラーコードおよびメッセージが含まれます。また、グローバルに一意なリクエスト ID (RequestId) およびリクエストを処理したサーバーのホスト ID (HostId) も含まれます。
エラーの詳細情報については、「エラーコード」をご参照ください。
リクエスト署名方法
概要
Simple Message Queue (SMQ, formerly MNS) サービスはすべてのリクエストを認証します。SMQ に送信するすべてのリクエストには、ヘッダーに署名を含める必要があります。SMQ SDK は署名プロセスを自動的に完了します。手動での署名プロセスを回避するために、SDK を使用することを推奨します。
署名プロセスは以下のステップで構成されます。
ステップ 1:署名対象文字列の作成
以下の擬似コードを使用して、署名対象文字列を作成します。
StringToSign = HttpMethod + "\n"
+ CONTENT-MD5 + "\n"
+ CONTENT-TYPE + "\n"
+ DATE + "\n"
+ CanonicalizedMNSHeaders
+ CanonicalizedResource;パラメーター | 説明 |
HttpMethod | 大文字の HTTP リクエストメソッドです。例: |
Content-Md5 | リクエストボディの MD5 ハッシュです。これはオプションです。リクエストに |
CONTENT-TYPE | リクエストボディのコンテンツタイプです。リクエストに |
DATE | リクエストの日時です。
|
CanonicalizedMNSHeaders |
|
CanonicalizedResource | HTTP リクエストされたリソースの URI は、サブスクリプション構成で指定された HTTP エンドポイントアドレスのうち、ドメイン名およびポートを除いた部分です。たとえば、構成されたエンドポイントアドレスが 重要 システムにゲートウェイやその他のプロキシが含まれている場合、検証ポイントでの URI はサブスクリプション構成のものと異なる可能性があります。その場合は、サブスクリプション構成の URI を使用する必要があります。 |
ステップ 2:署名の計算
Signature = Base64( HMAC-SHA1( ${AccessSecret}, UTF-8-Encoding-Of(${StringToSign})) ) 各パラメーターの説明は以下のとおりです。
パラメーター | 説明 |
Base64 | Base64 エンコーディング方式です。 |
HMAC-SHA1 | 署名アルゴリズムです。SMQ は RFC 2104 で定義されている |
AccessKey Secret | ご利用の AccessKey Secret です。これは署名で使用される AccessKey ID に対応します。 |
UTF-8-Encoding-Of | UTF-8 エンコード形式です。 |
StringToSign | ステップ 1:署名対象文字列の作成 で作成された署名対象文字列です。 |
ステップ 3:リクエストへの署名の追加
addHeader("Authorization","MNS " + ${AccessKeyId}+ ":" + ${Signature})キーは定数文字列 Authorization です。値は、AccessKeyId および Signature 変数を MNS ${accessKeyId}:${Signature} の形式で連結した文字列です。ここで、Signature は Simple Message Queue (SMQ, formerly MNS) によってカスタムビルドされた署名であり、ステップ 2:署名の計算 (Signature) で生成された値です。
署名の例
以下のサンプルリクエストをご確認ください。
PUT /queues/$queueName?metaOverride=true HTTP/1.1
Host: $AccountId.mns.cn-hangzhou.aliyuncs.com
Date: Wed, 08 Mar 2012 12:00:00 GMT
Authorization: MNS 15B4D3461F177624****:xQE0diMbL****f3YB+FIEXAMPLE=
<?xml version="1.0" encoding="UTF-8" ?>
<Queue xmlns="http://mns.aliyuncs.com/doc/v1/">
<VisibilityTimeout >60</VisibilityTimeout>
<MaximumMessageSize>1024</MaximumMessageSize>
<MessageRetentionPeriod>120</MessageRetentionPeriod>
<DelaySeconds>30</DelaySeconds>
</Queue> 以下はサンプル応答です。
例 1
指定された AccessKey ID が存在しない、または非アクティブな場合、サービスは 403 Forbidden エラーを返します。
Content-Type: text/xml
Content-Length: 314
Date: Wed, 18Mar 2012 08:04:06 GMT
x-mns-request-id: 512B2A634403E52B1956****
<?xml version="1.0" encoding="utf-8"?>
<Error xmlns="http://mns.aliyuncs.com/doc/v1/">
<Code>AccessIDAuthError</Code>
<Message>
AccessID authentication fail, please check your AccessID and retry.
</Message>
<RequestId>512B2A634403E52B1956****</RequestId>
<HostId>mns.cn-hangzhou.aliyuncs.com</HostId>
</Error> 例 2
Date ヘッダーが不足している、または形式が無効な場合、サービスは 403 Forbidden エラーを返します。
Content-Type: text/xml
Content-Length: 274
Date: Wed, 18Mar 2012 08:04:06 GMT
x-mns-request-id: 512B2A634403E52B1956****
<?xml version="1.0" encoding="UTF-8"?>
<Error xmlns="http://mns.aliyuncs.com/doc/v1/">
<Code>InvalidArgument</Code>
<Message>Date Header is invalid or missing.</Message>
<RequestId>7E1A5CF258F535884403****</RequestId>
<HostId>mns.cn-hangzhou.aliyuncs.com</HostId>
</Error> 例 3
リクエストは、タイムスタンプから 15 分以内に Simple Message Queue (SMQ, formerly MNS) サーバーに到達する必要があります。そうでない場合、サービスは 408 Request Timeout エラーを返します。
Content-Type: text/xml
Content-Length: 283
Date: Wed, 11 May 2011 09:01:51 GMT
x-mns-request-id: 512B2A634403E52B1956****
<?xml version="1.0" encoding="UTF-8"?>
<Error xmlns="http://mns.aliyuncs.com/doc/v1/">
<Code>TimeExpired</Code>
<Message>
The http request you sent is expired.
</Message>
<RequestId>512B2A634403E52B1956****</RequestId>
<HostId>mns.cn-hangzhou.aliyuncs.com</HostId>
</Error>