Как вернуть код состояния HTTP в Open FaaS?

Как функция, развернутая в openfaas, может вернуть вызывающему абоненту другой код состояния HTTP? Вроде 4хх кодов.

Согласно документации, сторожевой таймер будет обрабатывать stdout или же stderr для статуса http 200 или 5xx.

Есть ли способ изменить статус, как 400, 409 и т. Д.? Я использую шаблон csharp, загруженный faas-cli

3 ответа

Решение

Вы не можете, как указано здесь https://github.com/openfaas/faas-netes/issues/147

Предлагаемое решение - вернуть полезную нагрузку с кодом состояния и проанализировать полезную нагрузку на принимающей стороне.

Похоже, что шаблон python по умолчанию возвращает 200, даже если вы system.exit(1) или генерируете исключение. Я предполагаю, что другие старые шаблоны ведут себя аналогичным образом, и это ожидается от классического сторожевого пса.

Однако, если используемый вами языковой шаблон поддерживает запуск нового of-watchdog, я думаю, он может возвращать коды, отличные от 200, например 400, 404 и т. Д. Вы можете загрузить эти шаблоны с помощью faas-cli, они из openfaas -инкубатор проекта и сообщества.

Я только что подтвердил использование языка / шаблона python3-http из openfaas-incubator и csharp-httprequest из distantcam, что коды, отличные от 200, могут быть возвращены как 400, 404 и т. Д.

Это будет список доступных шаблонов:

faas-cli template store list

Чтобы установить шаблон csharp, с которым я тестировал:

faas-cli template store pull distantcam/csharp-httprequest

Обработчик OOTB для csharp-httprequest можно легко изменить следующим образом, чтобы он возвращал 400:

using Microsoft.AspNetCore.Http;
using System.IO;
using System.Threading.Tasks;

namespace Function
{
    public class FunctionHandler
    {
        public async Task<(int, string)> Handle(HttpRequest request)
        {
            var reader = new StreamReader(request.Body);
            var input = await reader.ReadToEndAsync();

            return (400, $"Hello! Your input was {input}");
        }
    }
}

После долгих исследований о том, как это сделать на питоне, не используйте случайный шаблон, вам следует использовать шаблон python-flask . Работает как часы.

Другие вопросы по тегам