У систему приходить структурована інформація, але її типи не можуть бути визначені на етапі розробки. Типи об'єктів, як і самі дані додаються через API.
- Створити API-сервіс, який дозволяє працювати з сутностями будь-яких типів.
- Реалізувати CRUD для типів сутностей. Наприклад, створимо тип
Person
, з атрибутамиname
,age
таworkIn
(workIn
- це посилання на інший тип,Organization
- має 1 атрибутname
):POST /api/types/person
{ "name": "Person", "attributes": { "name": { "type": "string" }, "age": { "type": "integer" }, "workIn": { "type": "Organization" } } }
- Реалізувати CRUD (
create
,read
,update
,delete
) сутностей і читання всієї колекції. Атрибути, яких не має в сутності не повинні прийматись. - Запит
POST /api/entities/person
повинен створити сутністьPerson
з атрибутамиname
,age
:
{
"name": "Тарас Шевченко",
"age": "33"
}
Для лінкування організації використовується id:
{
"name": "Тарас Шевченко",
"age": "33",
"workIn": "5"
}
- Запит
GET /api/entities/person
повинен повернути всіхPerson
-ів
Примітка: URL-и та структура JSON не принципова, можна змінювати якщо треба
- Покажи на що здатний, похизуйся (best practices, SOLID, GoF), але знай міру ;)
- ASP .NET Core
- Логіка в коді має бути прозорою
- Використовуй SQL базу данних (ми використовуємо PostgreSQL)
- Використовуй EAV структуру таблиць
- Правильно обробляй помилки
- REST API повинен слідувати best practices включаючи правильну видачу статус кодів
- "Охайність" коду, інструкція по запуску
- Назва змінних
- Скільки запитів іде в базу при збереженні і вибірці
- Чи оптимізована база під read чи під write яким чином?
- Створювати динамічно таблички або view не можна.
- Додати можливість валідувати атрибути, бажано щоб це розширялось легко (e.g.,
required
,maxlength
,minlength
) - Додати підтримку типізації атрибутів (integer, datetime, geoPoint, etc)
- Зробити НЕ на Entity Framework
- Зробити можливість створювати сутність з пов'язаною сутністю в одній транзакції:
POST /api/entities/person
{
"name": "Тарас Шевченко",
"age": "33",
"workIn": {
"name": "Університет мовних наук"
}
}
Даний запит створює Person
, Organization
і зв'язує їх між собою