

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# Amazon SQS での AWS JSON プロトコルを使用したクエリ API リクエストの実行 Amazon SQS
<a name="sqs-making-api-requests-json"></a>

このトピックでは、Amazon SQS エンドポイントを構築する方法、POST リクエストを行う方法、およびレスポンスを解釈する方法について説明します。

**注記**  
AWS JSON プロトコルは、ほとんどの言語バリアントでサポートされています。サポートされている言語のリストについては、「[Amazon SQS API で使用される AWS JSON プロトコルでは、どの言語がサポートされていますか? APIs](sqs-json-faqs.md#json-protocol-supported-languages)」を参照してください。

## エンドポイントの構築
<a name="sqs-api-constructing-endpoints-json"></a>

Amazon SQS キューを使用するには、エンドポイントを構築する必要があります。Amazon SQS エンドポイントの詳細については、「Amazon Web Services 全般のリファレンス**」の以下のページを参照してください。
+ [リージョンエンドポイント](https://docs.aws.amazon.com/general/latest/gr/rande.html#regional-endpoints)
+ [Amazon Simple Queue Serviceエンドポイントとクォータ](https://docs.aws.amazon.com/general/latest/gr/sqs-service)

Amazon SQS エンドポイントはそれぞれ独立しています。例えば、2 つのキューの名前が MyQueue で、一方にはエンドポイント `sqs.us-east-2.amazonaws.com` があり、もう一方にはエンドポイント `sqs.eu-west-2.amazonaws.com` がある場合、2 つのキューは互いにどのデータも共有しません。**

キュー作成のクエストを行うエンドポイントの例を次に示します。

```
POST / HTTP/1.1
Host: sqs.us-west-2.amazonaws.com
X-Amz-Target: AmazonSQS.CreateQueue
X-Amz-Date: <Date>
Content-Type: application/x-amz-json-1.0
Authorization: <AuthParams>
Content-Length: <PayloadSizeBytes>
Connection: Keep-Alive 
{
    "QueueName":"MyQueue",
    "Attributes": {
        "VisibilityTimeout": "40"
    },
    "tags": {
        "QueueType": "Production"
    }
}
```

**注記**  
キュー名とキュー URL では、大文字と小文字が区別されます。  
*`AUTHPARAMS`* の構造は API リクエストの署名によって異なります。詳細については、*Amazon Web Services 全般のリファレンス*[の AWS API リクエストの署名](https://docs.aws.amazon.com/general/latest/gr/signing_aws_api_requests.html)を参照してください。

## POST リクエストの作成
<a name="structure-post-request"></a>

Amazon SQS の POST リクエストは、クエリパラメータを HTTP リクエストボディの形で送信します。

以下は、`X-Amz-Target` が `AmazonSQS.<operationName>` に設定された HTTP ヘッダーと、`Content-Type` が `application/x-amz-json-1.0` に設定された HTTP ヘッダーの例です。

```
POST / HTTP/1.1
Host: sqs.<region>.<domain>
X-Amz-Target: AmazonSQS.SendMessage
X-Amz-Date: <Date>
Content-Type: application/x-amz-json-1.0
Authorization: <AuthParams>
Content-Length: <PayloadSizeBytes>
Connection: Keep-Alive 
{
    "QueueUrl": "https://sqs.<region>.<domain>/<awsAccountId>/<queueName>/",
    "MessageBody": "This is a test message"
}
```

この HTTP POST リクエストは、Amazon SQS キューにメッセージを送信します。

**注記**  
HTTP ヘッダー `X-Amz-Target` と `Content-Type` は両方とも必須です。  
HTTP クライアントは、クライアントの HTTP バージョンによっては、他の項目を HTTP リクエストに追加する可能性があります。

# Amazon SQS JSON API レスポンスの解釈
<a name="sqs-json-api-responses"></a>

Amazon SQS にリクエストを送信すると、結果を含む JSON レスポンスが返されます。レスポンス構造は、使用した API アクションによって異なります。

これらのレスポンスの詳細については、以下を参照してください。
+ *Amazon Simple Queue Service API リファレンス*の [API アクション](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_Operations.html)に記載された具体的な API アクション
+ [Amazon SQS AWS JSON プロトコルFAQs](sqs-json-faqs.md)

## 正常な JSON レスポンス構造
<a name="sqs-json-api-successful-response-structure"></a>

リクエストが成功した場合、主なレスポンス要素は `x-amzn-RequestId` です。これには、リクエストの汎用一意識別子 (UUID) と、その他の付加されたレスポンスフィールドが含まれます。例えば、[https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_CreateQueue.html](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_CreateQueue.html) レスポンスには `QueueUrl` フィールドが含まれています。そのフィールドには、作成されたキューの URL が含まれています。

```
HTTP/1.1 200 OK
x-amzn-RequestId: <requestId>
Content-Length: <PayloadSizeBytes>
Date: <Date>
Content-Type: application/x-amz-json-1.0
{
    "QueueUrl":"https://sqs.us-east-1.amazonaws.com/111122223333/MyQueue"
}
```

## JSON エラーレスポンス構造
<a name="sqs-api-error-response-structure"></a>

リクエストが正常に行われなかった場合、Amazon SQS は HTTP ヘッダーとボディを含む主なレスポンスを返信します。

HTTP ヘッダーで、`x-amzn-RequestId` にはリクエストの UUID が含まれています。`x-amzn-query-error` には、エラーのタイプと、エラーがプロデューサーエラーかコンシューマーエラーかという 2 つの情報が含まれています。

レスポンスボディで、`"__type"` はその他のエラーの詳細を示し、`Message` は読みやすい形式でエラー状況を示します。

以下は、JSON 形式のエラーレスポンスの例です。

```
HTTP/1.1 400 Bad Request
x-amzn-RequestId: 66916324-67ca-54bb-a410-3f567a7a0571
x-amzn-query-error: AWS.SimpleQueueService.NonExistentQueue;Sender
Content-Length: <PayloadSizeBytes>
Date: <Date>
Content-Type: application/x-amz-json-1.0
{
    "__type": "com.amazonaws.sqs#QueueDoesNotExist",
    "message": "The specified queue does not exist."
}
```

# Amazon SQS AWS JSON プロトコルFAQs
<a name="sqs-json-faqs"></a>

このトピックでは、Amazon SQS での AWS JSON プロトコルの使用に関するよくある質問について説明します。

## AWS JSON プロトコルとは何ですか。また、既存の Amazon SQS API リクエストとレスポンスとどのように異なりますか?
<a name="json-protocol-what-is"></a>

JSON は、異種システム間の通信で最も広く使用され、受け入れられている配線方法の 1 つです。Amazon SQS は JSON を通信媒体として使用して、 AWS SDK クライアント (Java、Python、Golang、JavaScript など) と Amazon SQS サーバー間の通信を行います。Amazon SQS API オペレーションの HTTP リクエストは、JSON 形式の入力を受け付けます。Amazon SQS オペレーションが実行され、実行レスポンスが JSON 形式で SDK クライアントに共有されます。 AWS クエリと比較して、JSON はクライアントとサーバー間でより効率的にデータ転送できます。
+ Amazon SQS AWS JSON プロトコルは、Amazon SQS クライアントとサーバー間のメディエーターとして機能します。
+ サーバーは Amazon SQS オペレーションが作成されるプログラミング言語を理解していませんが、JSON AWS プロトコルを理解しています。
+ Amazon SQS AWS JSON プロトコルは、Amazon SQS クライアントとサーバー間のシリアル化 (オブジェクトを JSON 形式に変換) と逆シリアル化 (JSON 形式をオブジェクトに変換) を使用します。

## Amazon SQS の AWS JSON プロトコルの使用を開始するにはどうすればよいですか?
<a name="json-protocol-getting-started"></a>

Amazon SQS のメッセージングを高速化するために最新の AWS SDK バージョンの使用を開始するには、 AWS SDK を指定されたバージョンまたはそれ以降のバージョンにアップグレードします。SDK クライアントの詳細については、以下の表の「ガイド」列を参照してください。

以下は、Amazon SQS API で使用する JSON AWS プロトコルの言語バリアント間の SDK バージョンのリストです。 Amazon SQS APIs


| Language | SDK クライアントリポジトリ | 必要な SDK クライアントバージョン | ガイド | 
| --- | --- | --- | --- | 
|  C\$1\$1  |  [aws/aws-sdk-cpp](https://github.com/aws/aws-sdk-cpp)  |  [1.11.98](https://github.com/aws/aws-sdk-cpp/releases/tag/1.11.198)  |  [AWS SDK for C\$1\$1](https://aws.amazon.com/sdk-for-cpp/)  | 
|  Golang 1.x  |  [aws/aws-sdk-go](https://github.com/aws/aws-sdk-go)  |  [v1.47.7](https://github.com/aws/aws-sdk-go/releases/tag/v1.47.7)  |  [AWS SDK for Go](https://aws.amazon.com/sdk-for-go/)  | 
|  Golang 2.x  |  [aws/aws-sdk-go-v2](https://github.com/aws/aws-sdk-go-v2)  |  [v1.28.0](https://github.com/aws/aws-sdk-go-v2/blob/release-2023-11-09/service/sqs/CHANGELOG.md#v1270-2023-11-09)  |  [AWS SDK for Go V2](https://aws.github.io/aws-sdk-go-v2/docs/)  | 
|  Java 1.x  |  [aws/aws-sdk-java](https://github.com/aws/aws-sdk-java)  |  [1.12.585](https://github.com/aws/aws-sdk-java/releases/tag/1.12.585)  |  [AWS SDK for Java](https://aws.amazon.com/sdk-for-java/)  | 
|  Java 2.x  |  [aws/aws-sdk-java-v2](https://github.com/aws/aws-sdk-java-v2)  |  [2.21.19](https://github.com/aws/aws-sdk-java-v2/releases/tag/2.21.19)  |  [AWS SDK for Java](https://aws.amazon.com/sdk-for-java/)  | 
|  JavaScript v2.x  |  [aws/aws-sdk-js](https://github.com/aws/aws-sdk-js)  |  [での JavaScript AWS](https://aws.amazon.com/developer/language/javascript/)  | 
|  JavaScript v3.x  |  [aws/aws-sdk-js-v3](https://github.com/aws/aws-sdk-js-v3)  |  [v3.447.0](https://github.com/aws/aws-sdk-js-v3/releases/tag/v3.447.0)  |  [での JavaScript AWS](https://aws.amazon.com/developer/language/javascript/)  | 
|  .NET  |  [aws/aws-sdk-net](https://github.com/aws/aws-sdk-net)  |  [3.7.681.0](https://github.com/aws/aws-sdk-net/releases/tag/3.7.681.0)  |  [AWS SDK for .NET](https://aws.amazon.com/sdk-for-net/)  | 
|  PHP  |  [aws/aws-sdk-php](https://github.com/aws/aws-sdk-php)  |  [3.285.2](https://github.com/aws/aws-sdk-php/releases/tag/3.285.2)  |  [AWS SDK for PHP](https://aws.amazon.com/sdk-for-php/)  | 
|  Python-boto3  |   [boto/boto3](https://github.com/boto/boto3)   |  [1.28.82](https://github.com/boto/boto3/releases/tag/1.28.82)  |  [AWS SDK for Python (Boto3)](https://aws.amazon.com/sdk-for-python/)  | 
|  Python-botocore  |   [boto/botocore](https://github.com/boto/botocore/)   |  [1.31.82](https://github.com/boto/botocore/releases/tag/1.31.82)  |  [AWS SDK for Python (Boto3)](https://aws.amazon.com/sdk-for-python/)  | 
|  awscli  |  [AWS CLI](https://github.com/aws/aws-cli)  |  [1.29.82](https://github.com/aws/aws-cli/releases/tag/1.29.82)  |  [AWSコマンドラインインターフェイス](https://aws.amazon.com/cli/)  | 
|  Ruby  |  [aws/aws-sdk-ruby](https://github.com/aws/aws-sdk-ruby)  |  [1.67.0](https://rubygems.org/gems/aws-sdk-sqs/versions/1.67.0)  |  [AWS SDK for Ruby](https://aws.amazon.com/sdk-for-ruby/)  | 

## Amazon SQS ワークロードで JSON プロトコルを有効にすることにはどのようなリスクがありますか。
<a name="json-protocol-risks"></a>

 AWS SDK のカスタム実装、またはカスタムクライアントと AWS SDK の組み合わせを使用して、クエリベースの (XML ベースの) AWS レスポンスを生成する Amazon SQS とやり取りしている場合、JSON AWS プロトコルと互換性がない可能性があります。問題が発生した場合は、 AWS サポートにお問い合わせください。

## すでに最新の AWS SDK バージョンを使用しているが、オープンソースソリューションが JSON をサポートしていない場合はどうなりますか?
<a name="json-protocol-sdk-version-open-source"></a>

SDK のバージョンを、使用中のバージョンより前のバージョンに変更する必要があります。詳細については[Amazon SQS の AWS JSON プロトコルの使用を開始するにはどうすればよいですか?](#json-protocol-getting-started)、「」を参照してください。「」にリストされている AWS SDK バージョン[Amazon SQS の AWS JSON プロトコルの使用を開始するにはどうすればよいですか?](#json-protocol-getting-started)は、Amazon SQS API の JSON ワイヤプロトコルを使用します。 APIs AWS SDK を以前のバージョンに変更すると、Amazon SQS APIsは AWS クエリを使用します。

## Amazon SQS API で使用される AWS JSON プロトコルでは、どの言語がサポートされていますか? APIs
<a name="json-protocol-supported-languages"></a>

Amazon SQS は、 AWS SDKsされているすべての言語バリアント (GA) をサポートしています。現在、Kotlin、Rust、Swift はサポートしていません。他の言語バリアントについて詳しくは、「[AWSでの構築ツール](https://aws.amazon.com/developer/tools/)」を参照してください。

## Amazon SQS APIs で使用される AWS JSON プロトコルでサポートされているリージョン
<a name="json-protocol-supported-regions"></a>

Amazon SQS は AWS 、Amazon SQS が利用可能なすべての[AWS リージョン](https://docs.aws.amazon.com/general/latest/gr/sqs-service.html)で JSON プロトコルをサポートしています。 Amazon SQS 

## AWS JSON プロトコルを使用して Amazon SQS の指定された AWS SDK バージョンにアップグレードすると、どのようなレイテンシーの改善が期待できますか?
<a name="json-protocol-upgrading-sdk"></a>

AWS JSON プロトコルは、 AWS クエリプロトコルと比較して、リクエストとレスポンスのシリアル化と逆シリアル化がより効率的です。5 KB のメッセージペイロード AWS のパフォーマンステストに基づいて、Amazon SQS の JSON プロトコルはend-to-endのメッセージ処理レイテンシーを最大 23% 削減し、アプリケーションクライアント側の CPU とメモリの使用量を削減します。

## AWS クエリプロトコルは廃止されますか?
<a name="query-protocol"></a>

AWS クエリプロトコルは引き続きサポートされます。 AWS SDK バージョンが、「Amazon SQS の JSON プロトコルの開始方法」に記載されているもの以外の以前のバージョンに設定されている限り、 AWS クエリプロトコルを引き続き使用できます。 [AWS Amazon SQS](#json-protocol-getting-started)

## JSON AWS プロトコルの詳細については、どこで確認できますか?
<a name="json-protocol-more-info"></a>

JSON プロトコルの詳細については、*Smithy* ドキュメントの「[AWS JSON 1.0 プロトコル](https://smithy.io/2.0/aws/protocols/aws-json-1_0-protocol.html)」を参照してください。 AWS JSON プロトコルを使用する Amazon SQS API リクエストの詳細については、「[Amazon SQS での AWS JSON プロトコルを使用したクエリ API リクエストの実行 Amazon SQS](sqs-making-api-requests-json.md)」を参照してください。