Как структурировать более сложный API-контроллер - PullRequest
1 голос
/ 10 июня 2019

У меня есть веб-API, который принимает простую строку данных, разделенных запятыми, из части телеметрического оборудования в поле. Затем необходимо выполнить обработку, чтобы установить, выполнять или нет различные действия, а затем выполнить эти действия. Это такие вещи, как хранение данных в базе данных или запуск уведомлений по электронной почте. API просто нужно ответить, чтобы сказать, что данные были получены, и тогда вся работа может произойти на сервере, в то время как API продолжает принимать другие запросы. Каждые несколько секунд от многих тысяч единиц оборудования поступают тысячи запросов.

Поскольку я новичок в ASP.NET MVC, я не уверен, что это лучший способ сделать это. Я бы хотел, чтобы контроллер API выполнил некоторые базовые проверки, а затем ответил успешным ответом (в настоящее время сообщение «Обработано»). Для выполнения работы в фоновом режиме необходимо отправить данные другим процессам. Аппаратное обеспечение, которое делает публикацию, не заинтересовано в успехе последующей работы, поскольку оно должно быстро разорвать соединение до следующего отчета. Поскольку существует так много аппаратных отчетов, действующие соединения должны завершаться и закрываться как можно быстрее.

Должны ли эти дополнительные функции быть асинхронными функциями в отдельных классах? Если это так, то должны ли они быть недействительными, поскольку они могут выполняться в фоновом режиме, пока http-запрос завершен, т.е. их не нужно ждать? Контроллер API становится довольно раздутым из-за кода, так как существует так много возможных подпрограмм.

   public class MyApiController : ApiController
    {
        public class RecievedPost
        {
            public string Data { get; set; }
        }

        private BaseContext db = new BaseContext();

        public HttpResponseMessage PostResponse([FromBody] RecievedPost recievedPost)
        {
            try
            {
                string[] dataArray = recievedPost.Data.Split(',');
                //run various checks and trigger various other processes based on the results.
                }
                return new HttpResponseMessage()
                {
                    Content = new StringContent("Processed")
                };
            }
            catch (Exception ex)
            {
                return new HttpResponseMessage()
                {
                    Content = new StringContent("API Error - " + ex.ToString())
                };
            }
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...