У систему приходить структурована інформація, але її типи не можуть бути визначені на етапі розробки. Типи об'єктів, як і самі дані додаються через 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 і зв'язує їх між собою