Как вы говорите, для конечных точек API-интерфейса Pypi отсутствует подключаемый модуль.Можно было бы использовать конечную точку altResponse
для настройки загрузки артефактов, но тогда вы будете ограничены GET
запросами без тела запроса, что также не является хорошим вариантом для вас.
Я думаюнаиболее жизнеспособным подходом было бы определение пользовательской конечной точки executions
.При этом вы можете указать приемлемый метод, прочитать тело и установить свой собственный код ответа и тело.Основным недостатком этого является то, что вы не можете настроить путь (это всегда /api/plugins/execute/[execution_name]
), но это можно обойти.
Конечные точки выполнения могут принимать параметры в следующей форме:
/api/plugins/execute/[execution_name]?params=[param_name]=[param_val]
Скажем, ваш плагин принимает параметр path
, представляющий путь API, который будут вызывать ваши старые скрипты.Затем вы можете установить базовый URL-адрес на /api/plugins/execute/[execution_name]?params=path=/
, чтобы путь API добавлялся к параметру.Кроме того, вы можете использовать nginx или другой обратный прокси-сервер, чтобы переписать исходный путь API к этой форме.
(Поскольку вы будете использовать XML-RPC, я не думаю, что вам придется беспокоиться о каких-либоэтого пути, но я все равно включаю его для полноты.)
Некоторые проблемы с этим подходом:
- Конечные точки выполнения допускают только ответы
String
, поэтому отправка двоичных данныхв теле ответа может быть привередливее.Однако для тела запроса такого ограничения не существует. - Если вам требуется более одного метода запроса, вам потребуется более одной конечной точки выполнения.Это означает, что вам нужно будет использовать обратный прокси для перезаписи каждого метода в отдельную конечную точку.Опять же, поскольку XML-RPC просто использует
POST
, это, вероятно, не будет проблемой для вас. - Конечные точки выполнения не могут настраивать заголовки ответа.Поэтому, если ваши сценарии ожидают определенного
Content-Type
или другого заголовка, вам нужно будет использовать обратный прокси-сервер, чтобы вставить его в ответ.