Erlang OpenAPI生成器中存根的使用
我正在尝试使用Erlang构建自己的RESTAPI。我遵循指南,可在以下网址找到: 现在我陷入了最后一点:从Erlang shellErlang 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“ 我没有从服务器获
应用程序运行后:确保所有应用程序都已启动(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
头值进行验证,默认情况下,它允许任何值