본문 바로가기

DynamoDB Low-Level API



DynamoDB Low-Level API 는 실제 DynamoDB 에 요청하는 마지막 단계 인터페이스로, 이 HTTP(S) 요청은 올바른 형식이어야 한다.


  • HTTP(S) 요청은 POST 방식이어야 한다.
  • Authorization 헤더에는 DynamoDB 가 요청을 인증하는 데 필요한 정보가 포함되어야 한다.
  • X-Amz-Target 헤더에는 DynamoDB 작업의 이름(GetItem, PutItem 등...) 이 포함되어야 한다.
  • 요청 본문은 JSON 형식이어야 한다.


응답도 JSON 형식으로 반환된다.

DynamoDB 가 요청을 처리할 수 없는 경우, HTTP 오류 코드와 메시지를 반환하므로 오류 처리를 해주면 된다.

이런 요청과 응답 모두 AWS SDK 가 구성하므로 개발자는 어플리케이션 로직에만 집중하면 된다.



Pets Table 에서 특정 키의 Item 을 GetItem 으로 읽어오는 요청 예)


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"}
    }
}
cs



Data Type Descriptors


요청/응답 JSON 데이터에는 각 Attribute 의 데이터 타입 서술자(Data Type Descriptors) 를 포함시켜야 한다.

String (S), Number (N), Binary (B), Boolean (BOOL), Null (NULL), Map (M), List (L), String Set (SS), Number Set (NS), Binary Set (BS)


특히, JSON 으로 요청할 때 int, long, double 같은 숫자 형식은 DynamoDB 의 데이터 타입에 정확히 매핑하기 위해 숫자값을 문자열로 변환해야 한다.

binary 데이터를 DynamoDB 로 보내려면 Base64 형식으로 인코딩해야 한다. (DynamoDB 는 요청을 받아 Base64 를 다시 binary 로 디코딩한다.)