Erlang OpenAPI生成器中存根的使用

Erlang OpenAPI生成器中存根的使用,erlang,swagger,openapi,Erlang,Swagger,Openapi,我正在尝试使用Erlang构建自己的RESTAPI。我遵循指南,可在以下网址找到: 现在我陷入了最后一点:从Erlang shell应用程序运行后:确保所有应用程序都已启动(http\u服务器)。我认为应用程序正在运行,因为从netstat-nlt | grep LISTEN我可以看到进程正在127.0.0.1:8080上侦听。 例如,如果我尝试运行: curl-X GET”http://127.0.0.1:8080/v2/pet/44362“-H”接受:应用程序/json“ 我没有从服务器获

我正在尝试使用Erlang构建自己的RESTAPI。我遵循指南,可在以下网址找到:

现在我陷入了最后一点:从Erlang shell
应用程序运行后:确保所有应用程序都已启动(http\u服务器)。
我认为应用程序正在运行,因为从
netstat-nlt | grep LISTEN
我可以看到进程正在
127.0.0.1:8080
上侦听。 例如,如果我尝试运行:

curl-X GET”http://127.0.0.1:8080/v2/pet/44362“-H”接受:应用程序/json“

我没有从服务器获得任何响应,在服务器上我只看到
尝试处理操作:GetPetById“
,其他什么都没有发生。我认为它应该返回404错误


我遗漏了什么?

您遗漏的第一件事是
-I
标记到
curl
curl
如果您不告诉它,它不会打印http响应代码

$ curl -i -X GET "http://127.0.0.1:8080/v2/pet/44362" -H "accept: application/json"
将显示服务器实际响应http代码
401
(未经授权),查看
GetPetById
(您尝试的端点的
operationId
)的OpenAPI模式,我们可以看到它需要一个api密钥作为http请求中名为
api\u key
的头(请参阅OpenAPI模式中的
securityDefinitions
部分)

curl -i -X GET "http://127.0.0.1:8080/v2/pet/2342" -H "api_key: asdf" -H "accept: application/json"
(您可以将任何值用于
api\u键

但是,这不会给出您期望的答案(响应代码
404
),相反,您会得到
501
(未实现)。 这是因为openapi生成器工具只生成为每个端点处理程序构建实际逻辑所需的支架。生成器工具无法知道您希望如何处理传入请求,因此它生成一个通用处理程序,返回
501
响应

查看
openapi\u default\u logic\u handler.erl
文件,您将在那里找到请求处理程序
handle\u request/3
。 处理
GetPetById
端点的最小更改是:

handle\u请求('GetPetById',\u请求,\u上下文)->
%这是针对所有id的硬编码404响应。
%在此处添加您的逻辑,例如尝试从数据库获取id
{404, #{}, #{}};
处理请求(操作ID、请求、上下文)->
错误\记录器:错误\消息(
“未实现要处理的请求:~p~n”,
[{OperationID,Req,Context}]
),
{501, #{}, #{}}.
还要注意的是,在文件
openapi\u default\u logic\u handler.erl
中定义了函数
authorize\u api\u key/2
。在这里,您可以对
api\u key
头值进行验证,默认情况下,它允许任何值