Мы генерируем определение OpenApi с помощью Swagger / Swashbuckle. Затем это определение импортируется в Azure API Management.
У нас есть некоторые параметры строки запроса для запросов на получение, которые мы пометили как обязательные. Наша проверка гарантирует, что параметры строки запроса присутствуют и действительны, в противном случае мы возвращаем 400 Bad Request с подробной информацией о том, какие параметры являются недопустимыми / отсутствующими. Соответствующая часть определения OpenAPI приведена ниже. Два параметра строки запроса (помечены как обязательные) и один параметр пути (помечены как обязательные).
Моя проблема в том, как определение OpenApi преобразуется в операции APIM.
Обязательные параметры строки запроса добавляются как параметры шаблона, и они добавляются к URL-адресу операции. Это означает, что если они не предоставлены, APIM не может сопоставить запрос с операцией, и мы возвращаем 404 вызывающей стороне, а не полезные 400, которые вернет бэкэнд.
Я не могу легко добавить пустые значения в строку запроса. Я не могу сделать это во входящей политике операции, так как она не соответствует операции. Выполнение этого в глобальной политике входящего трафика означало бы, что мне пришлось бы самому идентифицировать операцию (это лишь одна из многих). Точно так же, хотя я могу вернуть 400 неверных запросов в политике onerror, я не могу легко сказать вызывающему, что было не так с запросом.
Я думаю, это встроено в процесс импорта. Когда я изменил параметры шаблона на параметры запроса на портале и экспортировал, определение OpenApi было практически идентичным. Когда я повторно импортировал экспортированный шаблон, произошло то же самое. Я также попытался пройти через Wadl, который выглядел более многообещающим, но я не смог повторно импортировать этот шаблон.
Есть ли способ переместить параметры строки запроса шаблона в параметры строки запроса? Есть другие варианты?