Первое, что вам не хватает, это флаг -i
на curl
.curl
не печатает код ответа http, если вы не сообщаете его.
$ curl -i -X GET "http://127.0.0.1:8080/v2/pet/44362" -H "accept: application/json"
Показывает, что сервер фактически отвечает кодом http 401
(неавторизовано), глядя на OpenAPIСхема для GetPetById
(operationId
для конечной точки, которую вы пытаетесь), мы видим, что для этого требуется ключ API в качестве заголовка с именем api_key
в запросе http (см. раздел securityDefinitions
в схеме OpenAPI).Итак, настоящая команда curl
, которая нам нужна, это
curl -i -X GET "http://127.0.0.1:8080/v2/pet/2342" -H "api_key: asdf" -H "accept: application/json"
(вы можете использовать любое значение для api_key
)
Однако это не даст ожидаемого ответа (ответкод 404
), вместо этого вы получите 501
(не реализовано).Это связано с тем, что инструмент генератора openapi генерирует только те леса, которые необходимы для построения фактической логики для каждого обработчика конечной точки.У инструмента генератора нет способа узнать, как вы хотите обрабатывать входящие запросы, поэтому он генерирует общий обработчик, который возвращает ответ 501
.
Просмотрите файл openapi_default_logic_handler.erl
, там вы найдете handle_request/3
, который является обработчиком запроса.Минимальное изменение для обработки конечной точки GetPetById
будет:
handle_request('GetPetById', _Req, _Context) ->
% This is a hardcoded 404 response for all id's.
% add your logic here to e.g try to fetch the id from a database
{404, #{}, #{}};
handle_request(OperationID, Req, Context) ->
error_logger:error_msg(
"Got not implemented request to process: ~p~n",
[{OperationID, Req, Context}]
),
{501, #{}, #{}}.
Также обратите внимание, что в файле openapi_default_logic_handler.erl
определена функция authorize_api_key/2
.Здесь вы можете реализовать проверку значения заголовка api_key
, по умолчанию оно допускает любое значение.