Я создаю Rest API с DynamoDB в качестве бэкэнда.
У меня есть 2 сущности, которые связаны друг с другом: Project
и Version
, отношение: Project
может иметь несколькоVersions
У меня есть 2 конечные точки:
projects / {project}
Возвращает Project
со всеми вложенными Versions
.
Ответвыглядит следующим образом:
{
"name": "php",
"abandoned": false,
"versions": { ... }
}
projects / {project}? version = {version}
Возвращает один Version
для указанного проекта.
Ответ выглядитвот так:
{
"version": "5.3",
"long_term_support": false,
"support_ends": "2011-06-30",
"security_ends": "2012-06-30"
}
Мое текущее определение таблицы выглядит так:
{
"Table": {
"AttributeDefinitions": [
{
"AttributeName": "name",
"AttributeType": "S"
},
{
"AttributeName": "version",
"AttributeType": "S"
}
],
"TableName": "projects",
"KeySchema": [
{
"AttributeName": "name",
"KeyType": "HASH"
},
{
"AttributeName": "version",
"KeyType": "RANGE"
}
],
"TableStatus": "ACTIVE",
"CreationDateTime": 1546603531.869,
"ProvisionedThroughput": {
"NumberOfDecreasesToday": 0,
"ReadCapacityUnits": 0,
"WriteCapacityUnits": 0
},
"TableSizeBytes": 104,
"ItemCount": 4,
"TableArn": "arn:aws:dynamodb:xxx",
"TableId": "xxx"
}
}
Вопрос в том, является ли эта структура оптимальной для моего варианта использования?Я не совсем понимаю, как на самом деле структурировать конкретные метаданные проекта (не версии).Допустим, у меня есть атрибут Project.IsAbandoned
, который будет строкой о том, что проект был заброшен.Так как version
является ключом сортировки, мне пришлось бы придумать константу (скажем, 0
), содержащую все метаданные, такие как IsAbandoned
, для правильного заполнения Project
, прежде чем выполнять итерацию фактического Versions
.