如何在 Open FaaS 中 return HTTP 状态码?

how to return HTTP status code in Open FaaS?

openfaas中部署的一个函数如何return给调用者不同的HTTP状态码?喜欢 4xx 代码。

根据文档,看门狗会处理 stdoutstderr 的 http 状态 200 或 5xx。

有没有办法改变 400、409 等状态?我正在使用 faas-cli

下载的 csharp 模板

你不能,正如此处所述https://github.com/openfaas/faas-netes/issues/147

建议的解决方案是return一个带状态码的payload,在接收端解析payload。

默认 python 模板显示为 return 200,即使您 system.exit(1) 或抛出异常。我假设其他旧模板的行为类似,这是经典看门狗的预期。

但是,如果您使用的语言模板 supports running the new of-watchdog, I think it can return non-200 codes, like 400, 404, etc. 您可以使用 faas-cli 下载这些模板,它们来自 openfaas-incubator 项目和社区。

我刚刚确认使用来自 openfaas-incubator 的 python3-http language/template,并且 csharp-httprequest from distantcam 非 200 代码可以像 400 一样 returned, 404 等

这将列出可用模板:

faas-cli template store list

要安装我测试过的 csharp 模板:

faas-cli template store pull distantcam/csharp-httprequest

csharp-httprequest 的 OOTB 处理程序可以像这样轻松修改为 return a 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 中研究了很多关于如何做到这一点之后,不要使用随意的模板,您应该使用 python-flask 模板。它就像一个魅力。