DynamoDB 低レベル API - Amazon DynamoDB

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

DynamoDB 低レベル API

Amazon DynamoDB低レベル APIは、DynamoDB のプロトコルレベルのインターフェイスです。このレベルでは、すべての HTTP リクエストは、適切な形式で有効なデジタル署名がある必要があります。

AWS SDK は、低レベル DynamoDB API リクエストをユーザーに代わって作成して、DynamoDB からのレスポンスを処理します。これにより、低レベルの詳細ではなく、アプリケーションロジックに専念することができます。ただし、低レベル DynamoDB API の動作方法についての基本的な知識も役立ちます。

低レベル DynamoDB API の詳細については、「」を参照してください。Amazon DynamoDB API リファレンス

注記

DynamoDB Streams には、低レベル API があり、AWS SDK で完全にサポートされています。

詳細については、「DynamoDB Streams 変更データキャプチャ」を参照してください。低レベル DynamoDB Streams API については、『Amazon DynamoDB Streams API リファレンス

低レベル DynamoDB API は、ワイヤプロトコル形式として、JavaScript Object Notation (JSON) を使用しています。JSON では、データ値とデータ構造が両方同時にわかるように、データが階層で示されます。名前と値のペアは、name:value の形式で定義されます。データ階層は、名前と値のペアをブラケットで囲み、ネストする形で定義します。

DynamoDB は、ストレージ形式としてではなく、トランスポートプロトコルとしてのみ、JSON を使用しています。AWS SDK は JSON を使用して DynamoDB にデータを送信し、DynamoDB は JSON で応答します。DynamoDB は、データを JSON 形式で永続的に保存しません。

注記

JSON の詳細については、JSON のご紹介JSON.orgウェブサイト.

リクエストの形式

DynamoDB 低レベル API は、HTTP (S) を受け入れます。POST要求を入力として使用します。AWS SDK はこれらのリクエストを作成します。

Pets という名のテーブルに、AnimalType (パーティションキー)、Name (ソートキー) によって構成されるキースキーマがあるとします。これらの属性はいずれも、string 型になります。Pets から項目を取得するために、AWS SDK は次のリクエストを作成します。

POST / HTTP/1.1 Host: dynamodb.<region>.<domain>; Accept-Encoding: identity Content-Length: <PayloadSizeBytes> User-Agent: <UserAgentString> Content-Type: application/x-amz-json-1.0 Authorization: AWS4-HMAC-SHA256 Credential=<Credential>, SignedHeaders=<Headers>, Signature=<Signature> X-Amz-Date: <Date> X-Amz-Target: DynamoDB_20120810.GetItem { "TableName": "Pets", "Key": { "AnimalType": {"S": "Dog"}, "Name": {"S": "Fido"} } }

このリクエストに関して以下の点に注意してください。

  • -Authorizationヘッダーには、DynamoDB がリクエストを認証するのに必要な情報が含まれています。詳細については、「」を参照してください。AWS API リクエストの署名および署名バージョン 4 署名プロセス()Amazon Web Services 全般的なリファレンス

  • -X-Amz-Targetヘッダーには、DynamoDB オペレーションの名前が含まれます。GetItem。(これは、低レベル API バージョンと共に示されます。この場合は 20120810 となります。)

  • リクエストのペイロード (本文) には、JSON 形式で、オペレーションのパラメーターが含まれます。のGetItemオペレーションでは、パラメーターはTableNameおよびKey

レスポンスの形式

リクエストを受け取ると、DynamoDB はリクエストを処理し、レスポンスを返します。前の例に示したように、HTTP レスポンスペイロードには、オペレーションからの結果が含まれます。

HTTP/1.1 200 OK x-amzn-RequestId: <RequestId> x-amz-crc32: <Checksum> Content-Type: application/x-amz-json-1.0 Content-Length: <PayloadSizeBytes> Date: <Date> { "Item": { "Age": {"N": "8"}, "Colors": { "L": [ {"S": "White"}, {"S": "Brown"}, {"S": "Black"} ] }, "Name": {"S": "Fido"}, "Vaccinations": { "M": { "Rabies": { "L": [ {"S": "2009-03-17"}, {"S": "2011-09-21"}, {"S": "2014-07-08"} ] }, "Distemper": {"S": "2015-10-13"} } }, "Breed": {"S": "Beagle"}, "AnimalType": {"S": "Dog"} } }

この時点で、AWS SDK は、さらに処理するためにアプリケーションに応答データを返します。

注記

DynamoDB がリクエストを処理できない場合は、HTTP エラーコードとメッセージが返ります。AWS SDK は、これらを例外形式でアプリケーションに伝達します。詳細については、「DynamoDB でのエラー処理」を参照してください。

データ型記述子

低レベル DynamoDB API プロトコルでは、各属性にデータ型記述子が含まれている必要があります。データ型記述子は、各属性を解釈する方法を DynamoDB に伝えるトークンです。

リクエストの形式レスポンスの形式には、データ型記述子が使用されている例が示されています。-GetItem要求が指定するS向けのPetsキースキーマ属性 (AnimalTypeおよびName)、タイプのstring。-GetItemレスポンスにはペットタイプの属性を持つアイテムstring(S)、number(N)、map(M)、list(L).

DynamoDB データ型記述子の一覧を次に示します。

  • S— 文字列

  • N— 番号

  • B— バイナリ

  • BOOL— ブール値

  • NULL— Null

  • M— マップ

  • L— リスト

  • SS— 文字列セット

  • NS— 数値セット

  • BS— バイナリセット

注記

DynamoDB データ型の詳細については、「」を参照してください。データ型

数値データ

プログラミング言語により、提供される JSON のサポートのレベルが異なります。場合によっては、JSONドキュメントを検証し解析するにあたり、サードパーティーのライブラリを使用することもできます。

JSON Number 型に基づいて構築されたサードパーティーライブラリもあり、intlongdouble など独自の型を提供しています。ただし、DynamoDB のネイティブ数値データ型は、他のデータ型に正確にマッピングされません。そのため、このようなデータ型の区別が競合の原因になる可能性があります。加えて、多くの JSON ライブラリでは固定精度の数値は処理されず、小数点を含む数字列は自動的に倍精度浮動小数点データ型であると推定されます。

これらの問題を解決するために、DynamoDB は、データ損失のない単一の数値型が用意されています。望ましくない暗黙的倍精度値への変換を避けるため、DynamoDB では数値のデータ転送に文字列が使用されます。この方法によって、01、2、03 などの値を適切な順序で配置するなど、適切な並べ替えセマンティクスを維持しながら、柔軟に属性値を更新することが可能になります。

数値の精度がアプリケーションにとって重要な場合は、数値を文字列に変換してから、DynamoDB に渡します。

バイナリデータ

DynamoDB では、バイナリ属性がサポートされています。ただし JSON では、ネイティブではバイナリデータのエンコードがサポートされていません。リクエストでバイナリデータを送信するには、base64 形式でエンコードする必要があります。リクエストを受け取ると、DynamoDB は base64 データをバイナリに復号します。

DynamoDB で使用される base64 エンコーディングスキームについては、RFC 4648Internet Engineering Task Force (IETF) ウェブサイトをご覧ください。