При работе с Azure Functions обычно создаются функции, вызываемые по протоколу HTTP, которые обрабатывают входящие запросы. По умолчанию, код, предоставленный в Visual Studio для этих функций, считывает тело HTTP-запроса и пытается извлечь необходимые параметры. Однако, такой подход может быть неэффективным и неудобным, особенно когда вы уже знаете структуру тела запроса.
В этой статье мы рассмотрим, как указать структуру JSON тела запроса в Azure Function, что приведет к более чистому и эффективному коду.
Определение структуры тела запроса
Чтобы указать структуру JSON тела запроса, мы можем создать новый класс в нашем проекте. Этот класс будет представлять структуру тела запроса и предоставлять конструкторы для каждого поля.
Например, предположим, что мы хотим предоставить функции следующее тело запроса:
{ "container": "my-datalake", "folder": "clean/excel-files/", "filename": "myExcelFile.xlsx", "tablename": "mySQLTable" }
Мы можем определить класс с именем “BodyRequest” с свойствами, соответствующими каждому полю:
namespace dotnet.Model { public class BodyRequest { public string container { get; set; } public string folder { get; set; } public string filename { get; set; } public string tablename { get; set; } } }
Использование указанного формата тела запроса
После того, как мы определили класс, представляющий структуру тела запроса, мы можем заменить параметр HttpRequest в нашей Azure Function экземпляром этого нового класса.
Таким образом, мы можем напрямую обращаться к свойствам класса без необходимости десериализации или разбора:
public static async TaskRun( [HttpTrigger(AuthorizationLevel.Function, "post", Route = null)] BodyRequest req, ILogger log) { // Обращение к свойствам объекта req string container = req.container; string folder = req.folder; string filename = req.filename; string tablename = req.tablename; // Остальной код функции... }
Обработка отсутствующих или неожиданных полей
Если поле отсутствует в теле запроса, соответствующее свойство в классе BodyRequest будет установлено в значение null. Это позволяет гибко обрабатывать необязательные поля.
Если тело запроса содержит поле, которое не указано в формате тела, оно будет проигнорировано. Это гарантирует, что неожиданные поля не вызывают ошибки в функции.
Однако важно отметить, что указание значения с типом данных, который не может быть неявно преобразован, может вызвать ошибку. Например, попытка присвоить строковое значение свойству с типом integer вызовет ошибку.
Заключение
Указывая структуру JSON тела запроса в Azure Function, мы можем улучшить эффективность и читаемость кода. Такой подход позволяет нам напрямую обращаться к свойствам тела запроса без необходимости дополнительной десериализации или разбора.
В следующий раз, когда вы создадите HTTP-вызываемую Azure Function, рассмотрите возможность использования этой техники для упрощения вашего кода и повышения его поддерживаемости.
Спасибо за чтение!