В современной разработке программного обеспечения интеграция внешних API или веб-сервисов является обычной практикой. При выполнении таких вызовов важно писать чистый и удобный в сопровождении код, который эффективно обрабатывает исключения, отслеживает детали вызовов служб и обеспечивает возможность повторного использования. В этой статье мы рассмотрим весьма общий подход C# к управлению вызовами API и веб-служб с использованием метода ExecuteAsync
. Мы предоставим примеры кода и пояснения, которые помогут вам понять и эффективно реализовать эту стратегию.
Введение
Метод ExecuteAsync
упрощает процесс вызовов API или веб-службы, инкапсулируя общие функции, такие как обработка ошибок, отслеживание вызовов служб и обработка результатов. Он способствует чистоте кода и уменьшает избыточность, делая ваше приложение более надежным и удобным в обслуживании.
Начиная
Давайте начнем с определения метода ExecuteAsync
и его основных компонентов в более общем виде:
public static async Task<TResult> ExecuteAsync<TRequest, TResult>( TRequest request, Func<TRequest, Task<TResult>> apiCall, Action<Exception> errorHandler = null) where TResult : class { // Implementation goes here }
Метод ExecuteAsync
теперь принимает три параметра:
request
: общий входной параметр, представляющий данные, которые вы хотите отправить в API или веб-службу.apiCall
: Делегат, указывающий на асинхронную функцию, представляющую вызов API или веб-службы. Он принимает параметрrequest
и возвращает общийTask<TResult>
.errorHandler
(необязательно): Делегат действия, позволяющий указать пользовательскую логику обработки ошибок.
Ключевые компоненты
1. Обработка ошибок
try { TResult result = await apiCall(request); return result; } catch (Exception ex) { errorHandler?.Invoke(ex); // Custom error handling, if provided throw; }
- Мы используем блок
try-catch
для обработки исключений во время вызова API. - Если возникает ошибка, мы вызываем пользовательский
errorHandler
, если он предусмотрен, для обработки ошибки по мере необходимости.
Пример использования
Теперь давайте посмотрим, как использовать общий метод ExecuteAsync
в вашем коде.
public async Task<IActionResult> GetApiResponseAsync() { var request = new ApiRequest { /* Populate with data */ }; try { var response = await ExecuteAsync( request, async (input) => await ApiService.SendRequestAsync(input), (ex) => { /* Custom error handling logic */ }); return Ok(response); } catch (Exception ex) { return BadRequest(ex.Message); } }
В этом примере мы создаем объект ApiRequest
, представляющий входные данные для вызова API. Затем мы используем ExecuteAsync
для вызова API, передачи данных запроса и корректной обработки любых исключений. При необходимости вы также можете предоставить собственную логику обработки ошибок.
Заключение
Управление вызовами API и веб-служб становится еще более эффективным и гибким благодаря универсальному методу ExecuteAsync
. Используя возможности дженериков, вы можете создавать повторно используемый, чистый и удобный в сопровождении код, который беспрепятственно взаимодействует с различными API и сервисами, обеспечивая при этом надежную обработку ошибок. Такой подход упрощает вашу кодовую базу и повышает общее качество вашего программного обеспечения.
Стеккадемический
Спасибо, что дочитали до конца. Прежде чем уйти:
- Пожалуйста, рассмотрите возможность аплодировать и следовать автору! 👏
- Следуйте за нами в Twitter(X), LinkedIn и YouTube.
- Посетите Stackademic.com, чтобы узнать больше о том, как мы демократизируем бесплатное образование в области программирования во всем мире.