Как правильно организовать архитектуру Wep Api?

204
16 марта 2018, 11:16

Как правильно организовать архитектуру Wep Api?

Пример: есть контроллер students, в котором get-метод возвращает студента по id в бд. Если мне нужно получить студентов только с 1 группы, мне нужно создавать новый контроллер studentSelectByGroupe c одним методом? А потом мне нужно выбрать только с одного отделения, опять новый контроллер?

Получается, при большом приложении построенным на Api, нужно плодить очень много файлов-контроллеров? Или все-же можно нарушать REST и делать в одном контролере много разных методов? Но при этом же, как я понимаю, нарушается солид?

Как правильно построить Api?

Answer 1

У вас должен быть один 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/книги/Война_и_Мир (если только конечно книги, это не книги самого студента, тогда да..)

READ ALSO
Конвертация даты C#

Конвертация даты C#

Получаю с сервера данные, дата имеет такой формат: 2018-03-15T00:00:00+03:00

243
Операции со строками

Операции со строками

Как можно, перед тем как сделала депозит 1050, спарсить → конвертировать в float → записать данные которые были до депозита (1138

208
C# WPF вылет приложения

C# WPF вылет приложения

На компьютере стояла Windows 7, было произведено обновление до 10Перестали запускаться приложения WPF

189