REST API, представляет собой набор контроллеров, в каждом есть свои методы.
Адрес для запроса формируется по следующему правилу:
https://address:port/{controllerName}/{methodName}
. Для [GET]
параметры передаются в query запроса (например,
https://localhost:5001/cars/remove?id=1
), для [POST] - JSON в
теле запроса
Методы для работы со справочником автомобилей.
- [GET] Get - Получить список автомобилей. Принимает объект GetCarsRequestModel model, в котором могут быть переданы параметры для фильтрации и сортировки, может быть передан в теле запроса. Возвращает массив Car из справочника
- [POST] Add - Добавляет автомобиль в справочник. Принимает AddCarRequestModel model с параметрами для добавления. Возвращает AddResponseModel
- [GET] Remove - Удаляет автомобиль из справочника. Принимает ulong id - ID автомобиля для удаления. Возвращает RemoveResponseModel
Методы для работы со справочником автомобилей
- [GET] Get - Получить список Производителей. Принимает объект GetManufacturersRequestModel model, в котором могут быть переданы параметры для фильтрации и сортировки, может быть передан в теле запроса. Возвращает массив CarManufacturer из справочника
- [POST] Add - Добавляет производителя в справочник. Принимает AddManufacturerRequestModel model с параметрами для добавления. Возвращает AddResponseModel.
- [GET] Remove - Удаляет производителя из справочника. Принимает ulong id - ID производителя для удаления. Возвращает RemoveResponseModel.
Методы для работы со служебной информацией о базе данных
- [GET] Stats - Возвращает объект DbStats, содержащий служебную информацию о базе данных
-
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.