Как правильно организовать архитектуру Wep Api?
Пример: есть контроллер students, в котором get-метод возвращает студента по id в бд. Если мне нужно получить студентов только с 1 группы, мне нужно создавать новый контроллер studentSelectByGroupe c одним методом? А потом мне нужно выбрать только с одного отделения, опять новый контроллер?
Получается, при большом приложении построенным на Api, нужно плодить очень много файлов-контроллеров? Или все-же можно нарушать REST и делать в одном контролере много разных методов? Но при этом же, как я понимаю, нарушается солид?
Как правильно построить Api?
У вас должен быть один Controller, где вы описываете необходимые методы именно этого контролла.
К примеру, работаем со студентами. У нас есть общий Controller под студентов StudentsController (к прмеру). В нем мы реализовываем то, что будет связано со студентами (удаление, добавление, получение и так далее). :
public class StudentsController : Controller
{
//.....
// GET: api/Students
[HttpGet]
public IEnumerable GetStudents()
{
return Context.Students.Take(15);
}
// GET: api/Students/5
[HttpGet("{id}")]
public async Task<IActionResult> GetStudent([FromRoute] string id)
{
var filtersModel = await Context.Students.Where(s => s.Group == id);
return Ok(filtersModel);
}
//...
}
Вот к примеру (писал на коленке, за работоспособность не отвечаю, но саму суть уловите), у нас есть один Controller и с помощью него мы получаем по ссылке сайт.рр/api/Students список 15-ти студентов, а если в запрос добавим ещё и id студента (сайт.рр/api/Students/petrov33), то мы получаем объект нужного нам студента.
То есть Controller это у вас именно сайт.рр/api/**Students** в адресе и методы внутри должны быть все связаны с этим Controller. Не стоит писать в Controller студентов логику вывода бухгалтерии или книг, ведь не логично, если вы будете писать сайт.рр/api/Students/книги/Война_и_Мир (если только конечно книги, это не книги самого студента, тогда да..)
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости