885 lines
27 KiB
YAML
885 lines
27 KiB
YAML
|
|
openapi: 3.0.3
|
||
|
|
info:
|
||
|
|
title: JormunDB DynamoDB Wire API
|
||
|
|
version: 0.1.0
|
||
|
|
description: |
|
||
|
|
DynamoDB-compatible JSON-over-HTTP API implemented by JormunDB.
|
||
|
|
Requests are POSTed to a single endpoint (/) and routed by the required `X-Amz-Target` header.
|
||
|
|
servers:
|
||
|
|
- url: http://localhost:8002
|
||
|
|
|
||
|
|
paths:
|
||
|
|
/:
|
||
|
|
post:
|
||
|
|
summary: DynamoDB JSON API endpoint
|
||
|
|
description: |
|
||
|
|
Send DynamoDB JSON protocol requests to this endpoint and set `X-Amz-Target` to the operation name,
|
||
|
|
e.g. `DynamoDB_20120810.GetItem`. The request and response media type is typically
|
||
|
|
`application/x-amz-json-1.0`.
|
||
|
|
parameters:
|
||
|
|
- $ref: '#/components/parameters/XAmzTarget'
|
||
|
|
- $ref: '#/components/parameters/XAmzDate'
|
||
|
|
- $ref: '#/components/parameters/Authorization'
|
||
|
|
- $ref: '#/components/parameters/XAmzSecurityToken'
|
||
|
|
- $ref: '#/components/parameters/XAmzContentSha256'
|
||
|
|
requestBody:
|
||
|
|
required: true
|
||
|
|
content:
|
||
|
|
application/x-amz-json-1.0:
|
||
|
|
schema:
|
||
|
|
oneOf:
|
||
|
|
- $ref: '#/components/schemas/CreateTableRequest'
|
||
|
|
- $ref: '#/components/schemas/DeleteTableRequest'
|
||
|
|
- $ref: '#/components/schemas/DescribeTableRequest'
|
||
|
|
- $ref: '#/components/schemas/ListTablesRequest'
|
||
|
|
- $ref: '#/components/schemas/PutItemRequest'
|
||
|
|
- $ref: '#/components/schemas/GetItemRequest'
|
||
|
|
- $ref: '#/components/schemas/DeleteItemRequest'
|
||
|
|
- $ref: '#/components/schemas/UpdateItemRequest'
|
||
|
|
- $ref: '#/components/schemas/QueryRequest'
|
||
|
|
- $ref: '#/components/schemas/ScanRequest'
|
||
|
|
- $ref: '#/components/schemas/BatchWriteItemRequest'
|
||
|
|
- $ref: '#/components/schemas/BatchGetItemRequest'
|
||
|
|
- $ref: '#/components/schemas/TransactWriteItemsRequest'
|
||
|
|
- $ref: '#/components/schemas/TransactGetItemsRequest'
|
||
|
|
examples:
|
||
|
|
CreateTable:
|
||
|
|
summary: Create a table with a HASH key
|
||
|
|
value:
|
||
|
|
TableName: ExampleTable
|
||
|
|
KeySchema:
|
||
|
|
- AttributeName: pk
|
||
|
|
KeyType: HASH
|
||
|
|
AttributeDefinitions:
|
||
|
|
- AttributeName: pk
|
||
|
|
AttributeType: S
|
||
|
|
responses:
|
||
|
|
'200':
|
||
|
|
description: Successful operation response
|
||
|
|
content:
|
||
|
|
application/x-amz-json-1.0:
|
||
|
|
schema:
|
||
|
|
oneOf:
|
||
|
|
- $ref: '#/components/schemas/CreateTableResponse'
|
||
|
|
- $ref: '#/components/schemas/DeleteTableResponse'
|
||
|
|
- $ref: '#/components/schemas/DescribeTableResponse'
|
||
|
|
- $ref: '#/components/schemas/ListTablesResponse'
|
||
|
|
- $ref: '#/components/schemas/PutItemResponse'
|
||
|
|
- $ref: '#/components/schemas/GetItemResponseUnion'
|
||
|
|
- $ref: '#/components/schemas/DeleteItemResponse'
|
||
|
|
- $ref: '#/components/schemas/UpdateItemResponseUnion'
|
||
|
|
- $ref: '#/components/schemas/QueryResponse'
|
||
|
|
- $ref: '#/components/schemas/ScanResponse'
|
||
|
|
- $ref: '#/components/schemas/BatchWriteItemResponse'
|
||
|
|
- $ref: '#/components/schemas/BatchGetItemResponse'
|
||
|
|
- $ref: '#/components/schemas/TransactWriteItemsResponse'
|
||
|
|
- $ref: '#/components/schemas/TransactGetItemsResponse'
|
||
|
|
'400':
|
||
|
|
description: Client error (ValidationException, SerializationException, etc.)
|
||
|
|
content:
|
||
|
|
application/x-amz-json-1.0:
|
||
|
|
schema:
|
||
|
|
oneOf:
|
||
|
|
- $ref: '#/components/schemas/DynamoDbError'
|
||
|
|
- $ref: '#/components/schemas/TransactionCanceledException'
|
||
|
|
'500':
|
||
|
|
description: Server error
|
||
|
|
content:
|
||
|
|
application/x-amz-json-1.0:
|
||
|
|
schema:
|
||
|
|
$ref: '#/components/schemas/DynamoDbError'
|
||
|
|
|
||
|
|
components:
|
||
|
|
parameters:
|
||
|
|
XAmzTarget:
|
||
|
|
name: X-Amz-Target
|
||
|
|
in: header
|
||
|
|
required: true
|
||
|
|
description: |
|
||
|
|
DynamoDB JSON protocol operation selector.
|
||
|
|
JormunDB recognizes targets with the `DynamoDB_20120810.` prefix.
|
||
|
|
Note: `UpdateTable` may be recognized but not implemented.
|
||
|
|
schema:
|
||
|
|
type: string
|
||
|
|
enum:
|
||
|
|
- DynamoDB_20120810.CreateTable
|
||
|
|
- DynamoDB_20120810.DeleteTable
|
||
|
|
- DynamoDB_20120810.DescribeTable
|
||
|
|
- DynamoDB_20120810.ListTables
|
||
|
|
- DynamoDB_20120810.UpdateTable
|
||
|
|
- DynamoDB_20120810.PutItem
|
||
|
|
- DynamoDB_20120810.GetItem
|
||
|
|
- DynamoDB_20120810.DeleteItem
|
||
|
|
- DynamoDB_20120810.UpdateItem
|
||
|
|
- DynamoDB_20120810.Query
|
||
|
|
- DynamoDB_20120810.Scan
|
||
|
|
- DynamoDB_20120810.BatchGetItem
|
||
|
|
- DynamoDB_20120810.BatchWriteItem
|
||
|
|
- DynamoDB_20120810.TransactGetItems
|
||
|
|
- DynamoDB_20120810.TransactWriteItems
|
||
|
|
example: DynamoDB_20120810.GetItem
|
||
|
|
|
||
|
|
XAmzDate:
|
||
|
|
name: X-Amz-Date
|
||
|
|
in: header
|
||
|
|
required: false
|
||
|
|
schema:
|
||
|
|
type: string
|
||
|
|
description: Optional SigV4 timestamp header (kept for SDK compatibility).
|
||
|
|
|
||
|
|
Authorization:
|
||
|
|
name: Authorization
|
||
|
|
in: header
|
||
|
|
required: false
|
||
|
|
schema:
|
||
|
|
type: string
|
||
|
|
description: Optional SigV4 Authorization header (kept for SDK compatibility).
|
||
|
|
|
||
|
|
XAmzSecurityToken:
|
||
|
|
name: X-Amz-Security-Token
|
||
|
|
in: header
|
||
|
|
required: false
|
||
|
|
schema:
|
||
|
|
type: string
|
||
|
|
description: Optional SigV4 session token header (kept for SDK compatibility).
|
||
|
|
|
||
|
|
XAmzContentSha256:
|
||
|
|
name: X-Amz-Content-Sha256
|
||
|
|
in: header
|
||
|
|
required: false
|
||
|
|
schema:
|
||
|
|
type: string
|
||
|
|
description: Optional SigV4 payload hash header (kept for SDK compatibility).
|
||
|
|
|
||
|
|
schemas:
|
||
|
|
EmptyObject:
|
||
|
|
type: object
|
||
|
|
description: Empty JSON object.
|
||
|
|
additionalProperties: false
|
||
|
|
|
||
|
|
# -------------------------
|
||
|
|
# AttributeValue & helpers
|
||
|
|
# -------------------------
|
||
|
|
AttributeValue:
|
||
|
|
description: DynamoDB AttributeValue (JSON wire format).
|
||
|
|
type: object
|
||
|
|
minProperties: 1
|
||
|
|
maxProperties: 1
|
||
|
|
oneOf:
|
||
|
|
- $ref: '#/components/schemas/AttrS'
|
||
|
|
- $ref: '#/components/schemas/AttrN'
|
||
|
|
- $ref: '#/components/schemas/AttrB'
|
||
|
|
- $ref: '#/components/schemas/AttrBOOL'
|
||
|
|
- $ref: '#/components/schemas/AttrNULL'
|
||
|
|
- $ref: '#/components/schemas/AttrSS'
|
||
|
|
- $ref: '#/components/schemas/AttrNS'
|
||
|
|
- $ref: '#/components/schemas/AttrBS'
|
||
|
|
- $ref: '#/components/schemas/AttrL'
|
||
|
|
- $ref: '#/components/schemas/AttrM'
|
||
|
|
|
||
|
|
AttrS:
|
||
|
|
type: object
|
||
|
|
additionalProperties: false
|
||
|
|
required: [S]
|
||
|
|
properties:
|
||
|
|
S:
|
||
|
|
type: string
|
||
|
|
example: hello
|
||
|
|
|
||
|
|
AttrN:
|
||
|
|
type: object
|
||
|
|
additionalProperties: false
|
||
|
|
required: [N]
|
||
|
|
properties:
|
||
|
|
N:
|
||
|
|
type: string
|
||
|
|
description: Numeric values are encoded as strings in DynamoDB's JSON protocol.
|
||
|
|
example: "42"
|
||
|
|
|
||
|
|
AttrB:
|
||
|
|
type: object
|
||
|
|
additionalProperties: false
|
||
|
|
required: [B]
|
||
|
|
properties:
|
||
|
|
B:
|
||
|
|
type: string
|
||
|
|
description: Base64-encoded binary value.
|
||
|
|
example: AAECAwQ=
|
||
|
|
|
||
|
|
AttrBOOL:
|
||
|
|
type: object
|
||
|
|
additionalProperties: false
|
||
|
|
required: [BOOL]
|
||
|
|
properties:
|
||
|
|
BOOL:
|
||
|
|
type: boolean
|
||
|
|
example: true
|
||
|
|
|
||
|
|
AttrNULL:
|
||
|
|
type: object
|
||
|
|
additionalProperties: false
|
||
|
|
required: [NULL]
|
||
|
|
properties:
|
||
|
|
NULL:
|
||
|
|
type: boolean
|
||
|
|
enum: [true]
|
||
|
|
example: true
|
||
|
|
|
||
|
|
AttrSS:
|
||
|
|
type: object
|
||
|
|
additionalProperties: false
|
||
|
|
required: [SS]
|
||
|
|
properties:
|
||
|
|
SS:
|
||
|
|
type: array
|
||
|
|
items: { type: string }
|
||
|
|
example: [a, b]
|
||
|
|
|
||
|
|
AttrNS:
|
||
|
|
type: object
|
||
|
|
additionalProperties: false
|
||
|
|
required: [NS]
|
||
|
|
properties:
|
||
|
|
NS:
|
||
|
|
type: array
|
||
|
|
description: Numeric set values are encoded as strings.
|
||
|
|
items: { type: string }
|
||
|
|
example: ["1", "2"]
|
||
|
|
|
||
|
|
AttrBS:
|
||
|
|
type: object
|
||
|
|
additionalProperties: false
|
||
|
|
required: [BS]
|
||
|
|
properties:
|
||
|
|
BS:
|
||
|
|
type: array
|
||
|
|
description: Base64-encoded binary set values.
|
||
|
|
items: { type: string }
|
||
|
|
example: [AAE=, AgM=]
|
||
|
|
|
||
|
|
AttrL:
|
||
|
|
type: object
|
||
|
|
additionalProperties: false
|
||
|
|
required: [L]
|
||
|
|
properties:
|
||
|
|
L:
|
||
|
|
type: array
|
||
|
|
items:
|
||
|
|
$ref: '#/components/schemas/AttributeValue'
|
||
|
|
|
||
|
|
AttrM:
|
||
|
|
type: object
|
||
|
|
additionalProperties: false
|
||
|
|
required: [M]
|
||
|
|
properties:
|
||
|
|
M:
|
||
|
|
$ref: '#/components/schemas/AttributeMap'
|
||
|
|
|
||
|
|
AttributeMap:
|
||
|
|
type: object
|
||
|
|
additionalProperties:
|
||
|
|
$ref: '#/components/schemas/AttributeValue'
|
||
|
|
example:
|
||
|
|
pk: { S: "user#1" }
|
||
|
|
sk: { S: "meta" }
|
||
|
|
age: { N: "30" }
|
||
|
|
|
||
|
|
ExpressionAttributeNames:
|
||
|
|
type: object
|
||
|
|
additionalProperties: { type: string }
|
||
|
|
example:
|
||
|
|
"#pk": "pk"
|
||
|
|
|
||
|
|
ExpressionAttributeValues:
|
||
|
|
type: object
|
||
|
|
additionalProperties:
|
||
|
|
$ref: '#/components/schemas/AttributeValue'
|
||
|
|
example:
|
||
|
|
":v": { S: "user#1" }
|
||
|
|
|
||
|
|
Key:
|
||
|
|
allOf:
|
||
|
|
- $ref: '#/components/schemas/AttributeMap'
|
||
|
|
description: Primary key map (HASH, optionally RANGE) encoded as an AttributeMap.
|
||
|
|
|
||
|
|
ReturnValues:
|
||
|
|
type: string
|
||
|
|
description: ReturnValues selector used by UpdateItem.
|
||
|
|
enum: [NONE, ALL_OLD, UPDATED_OLD, ALL_NEW, UPDATED_NEW]
|
||
|
|
example: ALL_NEW
|
||
|
|
|
||
|
|
# -------------------------
|
||
|
|
# Table shapes
|
||
|
|
# -------------------------
|
||
|
|
ScalarAttributeType:
|
||
|
|
type: string
|
||
|
|
enum: [S, N, B]
|
||
|
|
example: S
|
||
|
|
|
||
|
|
AttributeDefinition:
|
||
|
|
type: object
|
||
|
|
additionalProperties: false
|
||
|
|
required: [AttributeName, AttributeType]
|
||
|
|
properties:
|
||
|
|
AttributeName: { type: string }
|
||
|
|
AttributeType: { $ref: '#/components/schemas/ScalarAttributeType' }
|
||
|
|
|
||
|
|
KeyType:
|
||
|
|
type: string
|
||
|
|
enum: [HASH, RANGE]
|
||
|
|
example: HASH
|
||
|
|
|
||
|
|
KeySchemaElement:
|
||
|
|
type: object
|
||
|
|
additionalProperties: false
|
||
|
|
required: [AttributeName, KeyType]
|
||
|
|
properties:
|
||
|
|
AttributeName: { type: string }
|
||
|
|
KeyType: { $ref: '#/components/schemas/KeyType' }
|
||
|
|
|
||
|
|
ProjectionType:
|
||
|
|
type: string
|
||
|
|
enum: [KEYS_ONLY, INCLUDE, ALL]
|
||
|
|
example: ALL
|
||
|
|
|
||
|
|
Projection:
|
||
|
|
type: object
|
||
|
|
additionalProperties: false
|
||
|
|
required: [ProjectionType]
|
||
|
|
properties:
|
||
|
|
ProjectionType: { $ref: '#/components/schemas/ProjectionType' }
|
||
|
|
NonKeyAttributes:
|
||
|
|
type: array
|
||
|
|
items: { type: string }
|
||
|
|
|
||
|
|
GlobalSecondaryIndex:
|
||
|
|
type: object
|
||
|
|
additionalProperties: false
|
||
|
|
required: [IndexName, KeySchema, Projection]
|
||
|
|
properties:
|
||
|
|
IndexName: { type: string }
|
||
|
|
KeySchema:
|
||
|
|
type: array
|
||
|
|
items: { $ref: '#/components/schemas/KeySchemaElement' }
|
||
|
|
minItems: 1
|
||
|
|
Projection: { $ref: '#/components/schemas/Projection' }
|
||
|
|
|
||
|
|
TableStatus:
|
||
|
|
type: string
|
||
|
|
enum: [CREATING, UPDATING, DELETING, ACTIVE, ARCHIVING, ARCHIVED]
|
||
|
|
example: ACTIVE
|
||
|
|
|
||
|
|
TableDescription:
|
||
|
|
type: object
|
||
|
|
additionalProperties: false
|
||
|
|
required: [TableName, TableStatus]
|
||
|
|
properties:
|
||
|
|
TableName: { type: string }
|
||
|
|
TableStatus: { $ref: '#/components/schemas/TableStatus' }
|
||
|
|
CreationDateTime:
|
||
|
|
type: integer
|
||
|
|
format: int64
|
||
|
|
description: Unix epoch seconds.
|
||
|
|
KeySchema:
|
||
|
|
type: array
|
||
|
|
items: { $ref: '#/components/schemas/KeySchemaElement' }
|
||
|
|
AttributeDefinitions:
|
||
|
|
type: array
|
||
|
|
items: { $ref: '#/components/schemas/AttributeDefinition' }
|
||
|
|
GlobalSecondaryIndexes:
|
||
|
|
type: array
|
||
|
|
items:
|
||
|
|
allOf:
|
||
|
|
- $ref: '#/components/schemas/GlobalSecondaryIndex'
|
||
|
|
- type: object
|
||
|
|
properties:
|
||
|
|
IndexStatus:
|
||
|
|
type: string
|
||
|
|
enum: [ACTIVE]
|
||
|
|
|
||
|
|
# -------------------------
|
||
|
|
# Error shapes
|
||
|
|
# -------------------------
|
||
|
|
DynamoDbError:
|
||
|
|
type: object
|
||
|
|
additionalProperties: false
|
||
|
|
required: [__type, message]
|
||
|
|
properties:
|
||
|
|
__type:
|
||
|
|
type: string
|
||
|
|
description: DynamoDB error type identifier.
|
||
|
|
example: com.amazonaws.dynamodb.v20120810#ValidationException
|
||
|
|
message:
|
||
|
|
type: string
|
||
|
|
example: Invalid request
|
||
|
|
|
||
|
|
TransactionCanceledException:
|
||
|
|
type: object
|
||
|
|
additionalProperties: false
|
||
|
|
required: [__type, message, CancellationReasons]
|
||
|
|
properties:
|
||
|
|
__type:
|
||
|
|
type: string
|
||
|
|
enum: [com.amazonaws.dynamodb.v20120810#TransactionCanceledException]
|
||
|
|
message:
|
||
|
|
type: string
|
||
|
|
CancellationReasons:
|
||
|
|
type: array
|
||
|
|
items:
|
||
|
|
type: object
|
||
|
|
additionalProperties: false
|
||
|
|
required: [Code, Message]
|
||
|
|
properties:
|
||
|
|
Code: { type: string, example: ConditionalCheckFailed }
|
||
|
|
Message: { type: string, example: The conditional request failed }
|
||
|
|
|
||
|
|
# -------------------------
|
||
|
|
# API: CreateTable
|
||
|
|
# -------------------------
|
||
|
|
CreateTableRequest:
|
||
|
|
type: object
|
||
|
|
additionalProperties: true
|
||
|
|
required: [TableName, KeySchema, AttributeDefinitions]
|
||
|
|
properties:
|
||
|
|
TableName: { type: string }
|
||
|
|
KeySchema:
|
||
|
|
type: array
|
||
|
|
items: { $ref: '#/components/schemas/KeySchemaElement' }
|
||
|
|
minItems: 1
|
||
|
|
AttributeDefinitions:
|
||
|
|
type: array
|
||
|
|
items: { $ref: '#/components/schemas/AttributeDefinition' }
|
||
|
|
minItems: 1
|
||
|
|
GlobalSecondaryIndexes:
|
||
|
|
type: array
|
||
|
|
items: { $ref: '#/components/schemas/GlobalSecondaryIndex' }
|
||
|
|
description: |
|
||
|
|
CreateTable request. JormunDB focuses on TableName, KeySchema, AttributeDefinitions, and optional GSI definitions.
|
||
|
|
|
||
|
|
CreateTableResponse:
|
||
|
|
type: object
|
||
|
|
additionalProperties: false
|
||
|
|
required: [TableDescription]
|
||
|
|
properties:
|
||
|
|
TableDescription:
|
||
|
|
type: object
|
||
|
|
additionalProperties: false
|
||
|
|
required: [TableName, TableStatus, CreationDateTime]
|
||
|
|
properties:
|
||
|
|
TableName: { type: string }
|
||
|
|
TableStatus: { $ref: '#/components/schemas/TableStatus' }
|
||
|
|
CreationDateTime: { type: integer, format: int64 }
|
||
|
|
|
||
|
|
# -------------------------
|
||
|
|
# API: DeleteTable / DescribeTable / ListTables
|
||
|
|
# -------------------------
|
||
|
|
DeleteTableRequest:
|
||
|
|
type: object
|
||
|
|
additionalProperties: true
|
||
|
|
required: [TableName]
|
||
|
|
properties:
|
||
|
|
TableName: { type: string }
|
||
|
|
|
||
|
|
DeleteTableResponse:
|
||
|
|
type: object
|
||
|
|
additionalProperties: false
|
||
|
|
required: [TableDescription]
|
||
|
|
properties:
|
||
|
|
TableDescription:
|
||
|
|
type: object
|
||
|
|
additionalProperties: false
|
||
|
|
required: [TableName, TableStatus]
|
||
|
|
properties:
|
||
|
|
TableName: { type: string }
|
||
|
|
TableStatus:
|
||
|
|
type: string
|
||
|
|
enum: [DELETING]
|
||
|
|
|
||
|
|
DescribeTableRequest:
|
||
|
|
type: object
|
||
|
|
additionalProperties: true
|
||
|
|
required: [TableName]
|
||
|
|
properties:
|
||
|
|
TableName: { type: string }
|
||
|
|
|
||
|
|
DescribeTableResponse:
|
||
|
|
type: object
|
||
|
|
additionalProperties: false
|
||
|
|
required: [Table]
|
||
|
|
properties:
|
||
|
|
Table: { $ref: '#/components/schemas/TableDescription' }
|
||
|
|
|
||
|
|
ListTablesRequest:
|
||
|
|
type: object
|
||
|
|
additionalProperties: true
|
||
|
|
description: ListTables request. JormunDB ignores request fields for this operation.
|
||
|
|
|
||
|
|
ListTablesResponse:
|
||
|
|
type: object
|
||
|
|
additionalProperties: false
|
||
|
|
required: [TableNames]
|
||
|
|
properties:
|
||
|
|
TableNames:
|
||
|
|
type: array
|
||
|
|
items: { type: string }
|
||
|
|
|
||
|
|
# -------------------------
|
||
|
|
# API: PutItem / GetItem / DeleteItem
|
||
|
|
# -------------------------
|
||
|
|
PutItemRequest:
|
||
|
|
type: object
|
||
|
|
additionalProperties: true
|
||
|
|
required: [TableName, Item]
|
||
|
|
properties:
|
||
|
|
TableName: { type: string }
|
||
|
|
Item: { $ref: '#/components/schemas/AttributeMap' }
|
||
|
|
ConditionExpression: { type: string }
|
||
|
|
ExpressionAttributeNames: { $ref: '#/components/schemas/ExpressionAttributeNames' }
|
||
|
|
ExpressionAttributeValues: { $ref: '#/components/schemas/ExpressionAttributeValues' }
|
||
|
|
|
||
|
|
PutItemResponse:
|
||
|
|
$ref: '#/components/schemas/EmptyObject'
|
||
|
|
|
||
|
|
GetItemRequest:
|
||
|
|
type: object
|
||
|
|
additionalProperties: true
|
||
|
|
required: [TableName, Key]
|
||
|
|
properties:
|
||
|
|
TableName: { type: string }
|
||
|
|
Key: { $ref: '#/components/schemas/Key' }
|
||
|
|
ProjectionExpression: { type: string }
|
||
|
|
ExpressionAttributeNames: { $ref: '#/components/schemas/ExpressionAttributeNames' }
|
||
|
|
|
||
|
|
GetItemResponse:
|
||
|
|
type: object
|
||
|
|
additionalProperties: false
|
||
|
|
required: [Item]
|
||
|
|
properties:
|
||
|
|
Item: { $ref: '#/components/schemas/AttributeMap' }
|
||
|
|
|
||
|
|
GetItemResponseUnion:
|
||
|
|
oneOf:
|
||
|
|
- $ref: '#/components/schemas/EmptyObject'
|
||
|
|
- $ref: '#/components/schemas/GetItemResponse'
|
||
|
|
|
||
|
|
DeleteItemRequest:
|
||
|
|
type: object
|
||
|
|
additionalProperties: true
|
||
|
|
required: [TableName, Key]
|
||
|
|
properties:
|
||
|
|
TableName: { type: string }
|
||
|
|
Key: { $ref: '#/components/schemas/Key' }
|
||
|
|
ConditionExpression: { type: string }
|
||
|
|
ExpressionAttributeNames: { $ref: '#/components/schemas/ExpressionAttributeNames' }
|
||
|
|
ExpressionAttributeValues: { $ref: '#/components/schemas/ExpressionAttributeValues' }
|
||
|
|
|
||
|
|
DeleteItemResponse:
|
||
|
|
$ref: '#/components/schemas/EmptyObject'
|
||
|
|
|
||
|
|
# -------------------------
|
||
|
|
# API: UpdateItem
|
||
|
|
# -------------------------
|
||
|
|
UpdateItemRequest:
|
||
|
|
type: object
|
||
|
|
additionalProperties: true
|
||
|
|
required: [TableName, Key, UpdateExpression]
|
||
|
|
properties:
|
||
|
|
TableName: { type: string }
|
||
|
|
Key: { $ref: '#/components/schemas/Key' }
|
||
|
|
UpdateExpression: { type: string }
|
||
|
|
ConditionExpression: { type: string }
|
||
|
|
ExpressionAttributeNames: { $ref: '#/components/schemas/ExpressionAttributeNames' }
|
||
|
|
ExpressionAttributeValues: { $ref: '#/components/schemas/ExpressionAttributeValues' }
|
||
|
|
ReturnValues: { $ref: '#/components/schemas/ReturnValues' }
|
||
|
|
|
||
|
|
UpdateItemResponse:
|
||
|
|
type: object
|
||
|
|
additionalProperties: false
|
||
|
|
required: [Attributes]
|
||
|
|
properties:
|
||
|
|
Attributes: { $ref: '#/components/schemas/AttributeMap' }
|
||
|
|
|
||
|
|
UpdateItemResponseUnion:
|
||
|
|
oneOf:
|
||
|
|
- $ref: '#/components/schemas/EmptyObject'
|
||
|
|
- $ref: '#/components/schemas/UpdateItemResponse'
|
||
|
|
|
||
|
|
# -------------------------
|
||
|
|
# API: Query / Scan
|
||
|
|
# -------------------------
|
||
|
|
QueryRequest:
|
||
|
|
type: object
|
||
|
|
additionalProperties: true
|
||
|
|
required: [TableName, KeyConditionExpression]
|
||
|
|
properties:
|
||
|
|
TableName: { type: string }
|
||
|
|
IndexName: { type: string }
|
||
|
|
KeyConditionExpression: { type: string }
|
||
|
|
FilterExpression: { type: string }
|
||
|
|
ProjectionExpression: { type: string }
|
||
|
|
ExpressionAttributeNames: { $ref: '#/components/schemas/ExpressionAttributeNames' }
|
||
|
|
ExpressionAttributeValues: { $ref: '#/components/schemas/ExpressionAttributeValues' }
|
||
|
|
Limit:
|
||
|
|
type: integer
|
||
|
|
format: int32
|
||
|
|
minimum: 1
|
||
|
|
description: Maximum items to return (default 100 if omitted/0 in JormunDB).
|
||
|
|
ExclusiveStartKey: { $ref: '#/components/schemas/Key' }
|
||
|
|
ScanIndexForward:
|
||
|
|
type: boolean
|
||
|
|
description: Sort order for RANGE key queries (if applicable).
|
||
|
|
|
||
|
|
ScanRequest:
|
||
|
|
type: object
|
||
|
|
additionalProperties: true
|
||
|
|
required: [TableName]
|
||
|
|
properties:
|
||
|
|
TableName: { type: string }
|
||
|
|
IndexName: { type: string }
|
||
|
|
FilterExpression: { type: string }
|
||
|
|
ProjectionExpression: { type: string }
|
||
|
|
ExpressionAttributeNames: { $ref: '#/components/schemas/ExpressionAttributeNames' }
|
||
|
|
ExpressionAttributeValues: { $ref: '#/components/schemas/ExpressionAttributeValues' }
|
||
|
|
Limit:
|
||
|
|
type: integer
|
||
|
|
format: int32
|
||
|
|
minimum: 1
|
||
|
|
description: Maximum items to return (default 100 if omitted/0 in JormunDB).
|
||
|
|
ExclusiveStartKey: { $ref: '#/components/schemas/Key' }
|
||
|
|
|
||
|
|
ItemsPage:
|
||
|
|
type: object
|
||
|
|
additionalProperties: false
|
||
|
|
required: [Items, Count, ScannedCount]
|
||
|
|
properties:
|
||
|
|
Items:
|
||
|
|
type: array
|
||
|
|
items: { $ref: '#/components/schemas/AttributeMap' }
|
||
|
|
Count:
|
||
|
|
type: integer
|
||
|
|
format: int32
|
||
|
|
ScannedCount:
|
||
|
|
type: integer
|
||
|
|
format: int32
|
||
|
|
LastEvaluatedKey:
|
||
|
|
$ref: '#/components/schemas/Key'
|
||
|
|
|
||
|
|
QueryResponse:
|
||
|
|
allOf:
|
||
|
|
- $ref: '#/components/schemas/ItemsPage'
|
||
|
|
|
||
|
|
ScanResponse:
|
||
|
|
allOf:
|
||
|
|
- $ref: '#/components/schemas/ItemsPage'
|
||
|
|
|
||
|
|
# -------------------------
|
||
|
|
# API: BatchWriteItem
|
||
|
|
# -------------------------
|
||
|
|
WriteRequest:
|
||
|
|
type: object
|
||
|
|
additionalProperties: false
|
||
|
|
properties:
|
||
|
|
PutRequest:
|
||
|
|
type: object
|
||
|
|
additionalProperties: false
|
||
|
|
required: [Item]
|
||
|
|
properties:
|
||
|
|
Item: { $ref: '#/components/schemas/AttributeMap' }
|
||
|
|
DeleteRequest:
|
||
|
|
type: object
|
||
|
|
additionalProperties: false
|
||
|
|
required: [Key]
|
||
|
|
properties:
|
||
|
|
Key: { $ref: '#/components/schemas/Key' }
|
||
|
|
oneOf:
|
||
|
|
- required: [PutRequest]
|
||
|
|
- required: [DeleteRequest]
|
||
|
|
|
||
|
|
BatchWriteItemRequest:
|
||
|
|
type: object
|
||
|
|
additionalProperties: true
|
||
|
|
required: [RequestItems]
|
||
|
|
properties:
|
||
|
|
RequestItems:
|
||
|
|
type: object
|
||
|
|
description: Map of table name to write requests.
|
||
|
|
additionalProperties:
|
||
|
|
type: array
|
||
|
|
items: { $ref: '#/components/schemas/WriteRequest' }
|
||
|
|
|
||
|
|
BatchWriteItemResponse:
|
||
|
|
type: object
|
||
|
|
additionalProperties: false
|
||
|
|
required: [UnprocessedItems]
|
||
|
|
properties:
|
||
|
|
UnprocessedItems:
|
||
|
|
type: object
|
||
|
|
additionalProperties:
|
||
|
|
type: array
|
||
|
|
items: { $ref: '#/components/schemas/WriteRequest' }
|
||
|
|
|
||
|
|
# -------------------------
|
||
|
|
# API: BatchGetItem
|
||
|
|
# -------------------------
|
||
|
|
KeysAndAttributes:
|
||
|
|
type: object
|
||
|
|
additionalProperties: true
|
||
|
|
required: [Keys]
|
||
|
|
properties:
|
||
|
|
Keys:
|
||
|
|
type: array
|
||
|
|
items: { $ref: '#/components/schemas/Key' }
|
||
|
|
ProjectionExpression: { type: string }
|
||
|
|
ExpressionAttributeNames: { $ref: '#/components/schemas/ExpressionAttributeNames' }
|
||
|
|
|
||
|
|
BatchGetItemRequest:
|
||
|
|
type: object
|
||
|
|
additionalProperties: true
|
||
|
|
required: [RequestItems]
|
||
|
|
properties:
|
||
|
|
RequestItems:
|
||
|
|
type: object
|
||
|
|
additionalProperties:
|
||
|
|
$ref: '#/components/schemas/KeysAndAttributes'
|
||
|
|
|
||
|
|
BatchGetItemResponse:
|
||
|
|
type: object
|
||
|
|
additionalProperties: false
|
||
|
|
required: [Responses, UnprocessedKeys]
|
||
|
|
properties:
|
||
|
|
Responses:
|
||
|
|
type: object
|
||
|
|
additionalProperties:
|
||
|
|
type: array
|
||
|
|
items: { $ref: '#/components/schemas/AttributeMap' }
|
||
|
|
UnprocessedKeys:
|
||
|
|
type: object
|
||
|
|
additionalProperties:
|
||
|
|
$ref: '#/components/schemas/KeysAndAttributes'
|
||
|
|
|
||
|
|
# -------------------------
|
||
|
|
# API: TransactWriteItems / TransactGetItems
|
||
|
|
# -------------------------
|
||
|
|
TransactWriteItemsRequest:
|
||
|
|
type: object
|
||
|
|
additionalProperties: true
|
||
|
|
required: [TransactItems]
|
||
|
|
properties:
|
||
|
|
TransactItems:
|
||
|
|
type: array
|
||
|
|
minItems: 1
|
||
|
|
maxItems: 100
|
||
|
|
items:
|
||
|
|
$ref: '#/components/schemas/TransactWriteItem'
|
||
|
|
|
||
|
|
TransactWriteItem:
|
||
|
|
type: object
|
||
|
|
additionalProperties: false
|
||
|
|
oneOf:
|
||
|
|
- required: [Put]
|
||
|
|
- required: [Delete]
|
||
|
|
- required: [Update]
|
||
|
|
- required: [ConditionCheck]
|
||
|
|
properties:
|
||
|
|
Put:
|
||
|
|
$ref: '#/components/schemas/TransactPut'
|
||
|
|
Delete:
|
||
|
|
$ref: '#/components/schemas/TransactDelete'
|
||
|
|
Update:
|
||
|
|
$ref: '#/components/schemas/TransactUpdate'
|
||
|
|
ConditionCheck:
|
||
|
|
$ref: '#/components/schemas/TransactConditionCheck'
|
||
|
|
|
||
|
|
TransactPut:
|
||
|
|
type: object
|
||
|
|
additionalProperties: true
|
||
|
|
required: [TableName, Item]
|
||
|
|
properties:
|
||
|
|
TableName: { type: string }
|
||
|
|
Item: { $ref: '#/components/schemas/AttributeMap' }
|
||
|
|
ConditionExpression: { type: string }
|
||
|
|
ExpressionAttributeNames: { $ref: '#/components/schemas/ExpressionAttributeNames' }
|
||
|
|
ExpressionAttributeValues: { $ref: '#/components/schemas/ExpressionAttributeValues' }
|
||
|
|
|
||
|
|
TransactDelete:
|
||
|
|
type: object
|
||
|
|
additionalProperties: true
|
||
|
|
required: [TableName, Key]
|
||
|
|
properties:
|
||
|
|
TableName: { type: string }
|
||
|
|
Key: { $ref: '#/components/schemas/Key' }
|
||
|
|
ConditionExpression: { type: string }
|
||
|
|
ExpressionAttributeNames: { $ref: '#/components/schemas/ExpressionAttributeNames' }
|
||
|
|
ExpressionAttributeValues: { $ref: '#/components/schemas/ExpressionAttributeValues' }
|
||
|
|
|
||
|
|
TransactUpdate:
|
||
|
|
type: object
|
||
|
|
additionalProperties: true
|
||
|
|
required: [TableName, Key, UpdateExpression]
|
||
|
|
properties:
|
||
|
|
TableName: { type: string }
|
||
|
|
Key: { $ref: '#/components/schemas/Key' }
|
||
|
|
UpdateExpression: { type: string }
|
||
|
|
ConditionExpression: { type: string }
|
||
|
|
ExpressionAttributeNames: { $ref: '#/components/schemas/ExpressionAttributeNames' }
|
||
|
|
ExpressionAttributeValues: { $ref: '#/components/schemas/ExpressionAttributeValues' }
|
||
|
|
|
||
|
|
TransactConditionCheck:
|
||
|
|
type: object
|
||
|
|
additionalProperties: true
|
||
|
|
required: [TableName, Key, ConditionExpression]
|
||
|
|
properties:
|
||
|
|
TableName: { type: string }
|
||
|
|
Key: { $ref: '#/components/schemas/Key' }
|
||
|
|
ConditionExpression: { type: string }
|
||
|
|
ExpressionAttributeNames: { $ref: '#/components/schemas/ExpressionAttributeNames' }
|
||
|
|
ExpressionAttributeValues: { $ref: '#/components/schemas/ExpressionAttributeValues' }
|
||
|
|
|
||
|
|
TransactWriteItemsResponse:
|
||
|
|
$ref: '#/components/schemas/EmptyObject'
|
||
|
|
|
||
|
|
TransactGetItemsRequest:
|
||
|
|
type: object
|
||
|
|
additionalProperties: true
|
||
|
|
required: [TransactItems]
|
||
|
|
properties:
|
||
|
|
TransactItems:
|
||
|
|
type: array
|
||
|
|
minItems: 1
|
||
|
|
maxItems: 100
|
||
|
|
items:
|
||
|
|
type: object
|
||
|
|
additionalProperties: false
|
||
|
|
required: [Get]
|
||
|
|
properties:
|
||
|
|
Get:
|
||
|
|
$ref: '#/components/schemas/TransactGet'
|
||
|
|
|
||
|
|
TransactGet:
|
||
|
|
type: object
|
||
|
|
additionalProperties: true
|
||
|
|
required: [TableName, Key]
|
||
|
|
properties:
|
||
|
|
TableName: { type: string }
|
||
|
|
Key: { $ref: '#/components/schemas/Key' }
|
||
|
|
ProjectionExpression: { type: string }
|
||
|
|
ExpressionAttributeNames: { $ref: '#/components/schemas/ExpressionAttributeNames' }
|
||
|
|
|
||
|
|
TransactGetItemResult:
|
||
|
|
oneOf:
|
||
|
|
- $ref: '#/components/schemas/EmptyObject'
|
||
|
|
- type: object
|
||
|
|
additionalProperties: false
|
||
|
|
required: [Item]
|
||
|
|
properties:
|
||
|
|
Item: { $ref: '#/components/schemas/AttributeMap' }
|
||
|
|
|
||
|
|
TransactGetItemsResponse:
|
||
|
|
type: object
|
||
|
|
additionalProperties: false
|
||
|
|
required: [Responses]
|
||
|
|
properties:
|
||
|
|
Responses:
|
||
|
|
type: array
|
||
|
|
items: { $ref: '#/components/schemas/TransactGetItemResult' }
|