Skip to content

Latest commit

 

History

History
137 lines (123 loc) · 9.06 KB

README.md

File metadata and controls

137 lines (123 loc) · 9.06 KB

API:

Общие сведения:

REST API, представляет собой набор контроллеров, в каждом есть свои методы.

Точки входа API

Адрес для запроса формируется по следующему правилу: https://address:port/{controllerName}/{methodName}. Для [GET] параметры передаются в query запроса (например, https://localhost:5001/cars/remove?id=1), для [POST] - JSON в теле запроса

Cars

Методы для работы со справочником автомобилей.

Методы

  • [GET] Get - Получить список автомобилей. Принимает объект GetCarsRequestModel model, в котором могут быть переданы параметры для фильтрации и сортировки, может быть передан в теле запроса. Возвращает массив Car из справочника
  • [POST] Add - Добавляет автомобиль в справочник. Принимает AddCarRequestModel model с параметрами для добавления. Возвращает AddResponseModel
  • [GET] Remove - Удаляет автомобиль из справочника. Принимает ulong id - ID автомобиля для удаления. Возвращает RemoveResponseModel

Manufacturers

Методы для работы со справочником автомобилей

Методы

  • [GET] Get - Получить список Производителей. Принимает объект GetManufacturersRequestModel model, в котором могут быть переданы параметры для фильтрации и сортировки, может быть передан в теле запроса. Возвращает массив CarManufacturer из справочника
  • [POST] Add - Добавляет производителя в справочник. Принимает AddManufacturerRequestModel model с параметрами для добавления. Возвращает AddResponseModel.
  • [GET] Remove - Удаляет производителя из справочника. Принимает ulong id - ID производителя для удаления. Возвращает RemoveResponseModel.

Db

Методы для работы со служебной информацией о базе данных

Методы

  • [GET] Stats - Возвращает объект DbStats, содержащий служебную информацию о базе данных

Objects description

  • AddCarRequestModel - все параметры обязательны

    • string LicensePlateNumber - номерной знак
    • string Model - модель
    • string HexColorCode - код цвета
    • DateTime ManufacturedDate - дата производства
    • ulong ManufacturerId - ID производителя
  • GetCarsRequestModel - все параметры являются опциональными

    • ulong[] CarIds - Список разрешенных ID автомобилей
    • ulong[] ManufacturerIds - Список разрешенных ID производителей
    • string[] HexColorCodes - Список разрешенных цветов
    • string[] Models - Список разрешенных моделй
    • DateTime FromDate - Минимальная дата производства
    • DateTime ToDate - Максимальная дата производства
    • string OrderByProperty - Имя одного из свойств из модели Car, по которому будет сортироваться результат
    • bool OrderByDescending - Направление сортировки, true - по убыванию, false - по возврастанию. По умолчанию false.
  • Car - возвращаемая модель, гарантируется что все поля не пустые

    • ulong Id
    • DateTime CreationTime - Дата добавления в базу
    • string LicensePlateNumber - Номерной знак
    • string Model - Модель
    • string HexColorCode - Цветовой код
    • DateTime ManufacturedDate - Дата производства
    • ulong ManufacturerId - ID производителя
  • AddManufacturerRequestModel - Все параметры - обязательны

    • string Name - Имя производителя
  • GetManufacturersRequestModel

    • ulong[] Ids - Список разрешенных ID производителей
    • string[] Names - Список разрешенных имён производителей
    • string OrderByProperty - Имя одного из свойств из модели CarManufacturer, по которому будет сортироваться результат
    • bool OrderByDescending - Направление сортировки, true - по убыванию, false - по возврастанию. По умолчанию false.
  • CarManufacturer

    • ulong Id
    • DateTime CreationTime - Дата добавления в базу
    • string Name - Название производителя
  • DbStats

    • DateTime FirstRecordTime - Дата добавления первой записи в базу. Null, когда база пуста
    • DateTime LastRecordTime - Дата добавления последней записи в базу. Null, когда база пуста
    • int TablesCount - Общее количество таблиц в базе
    • long RecordsCount - Общее количество записей во всех таблицах
  • RemoveResponseModel

    • bool NotExists - true, если запись с таким ID не существует
    • bool Exception - true, если произошла ошибка в ходе удаления
    • string Message - Описание ответа. Содержит информацию об ошибке, если Exception = true
    • bool IsSuccessful - true, если добавление прошло успешно
  • AddResponseModel

    • ulong Id - ID, присвоенный добавленной модели
    • bool IsSuccessful - true, если добавление прошло успешно
    • bool IsAlreadyExists - true, если запись с такими же параметрами уже была добавлена
    • bool Exception - true, если произошла ошибка в ходе добавления
    • string Message - Описание ответа. Содержит информацию об ошибке, если Exception = true

Использованный стек технологий:

  • Язык - C# 8.0
  • API - ASP.NET Core MVC 3.1
  • Сериализация - Newtonsoft JSON Serializer
  • Файловая реализация базы данных - самописная

Несколько слов о самой реализации

Решение может быть не оптимальным, поскольку с ASP.NET работал впервые - как раз изучал его до получения тестового. При решении старался сделать упор на читаемость кода, гибкость и расширяемость приложения
Вся работа ведётся через Controller's, для работы с сущностями из базы был вынесен отдельный базовый контроллер - BaseCrudController, который деалет практически всю работу с моделями, остается лишь определить сами модели и логику их работы, "грязно" реализовывать приходится только Get-методы - нужно определить вручную фильтрацию запроса к базе на основании полученной модели. Можно автоматизировать этот процесс, но это либо закапываться в глубины Expression's, либо писать парсер для SQL, или ещё что похуже, а это требует много времени.

Сохранение запросов к сервису - Запросы сохраняются в файл, форматирование не идеально, но может быть изменено в одном место под возникающие потребности. Статистика запросов к сервису - Done! Пишется в файл, может быть так же расширено. Оба пункта реализованы через встроенные в конвейер обработки запросов Middleware.