0

首先,我对 API 和 Swagger 还是很陌生。我和一些朋友得到了一个任务来记录一个已经存在的公共 API,在我们的例子中是这个:https ://favqs.com/api 。我们决定这样做的方式,也是为了帮助我们熟悉定义和记录 API,将文档的内容从该网页手动导入 Swagger。

到目前为止,我们的流程是:打开https://favqs.com/api,获取路径并在 Swagger 中编写,获取其方法并在 Swagger 中编写,定义模式,编写请求正文,编写响应,添加我们的对所有内容都有自己的描述,编写示例,修复我们犯下的任何语法错误,冲洗并重复。

到目前为止一切顺利,但后来我们注意到,当您针对 Swagger 的模拟服务器测试 API 时,它会自动生成一个小命令,因此我们可以使用 curl 通过 shell 或 powershell 运行相同的测试。这很棒,因为我们可以简单地更改命令中的 URL 来测试真实的、实时的 API。然后我们很快发现我们需要设置我们的 API 密钥才能测试真正的交易,这就是我们目前陷入困境的地方。

API 的文档指定了应如何格式化标头以进行授权,并特别提到格式Authorization: "YOUR_APP_TOKEN"不起作用。现在问题来了:如果您尝试在 Swagger 中设置 apiKey 授权,它将产生 API 不接受的确切结果。

以下是我们当前使用的代码的相关部分:

security:
  - ApiAuthToken: []
components:
  securitySchemes:
    ApiAuthToken:
      type: apiKey
      in: header
      name: Authorization

当然,它会生成 API 不接受的标头格式。

-H 'Authorization: *our API key*' \

要成功使用 API 进行授权,我相信我们必须生成以下标头:

-H 'Authorization: Token token=*our API key*' \

我们探索的第一件事是在 ApiAuthToken 下使用type: object而不是type: apiKey,但这不被 Swagger 接受。然后,我们阅读API 密钥HTTP 授权的 Swagger 文档页面,以及一般身份验证和授权页。到目前为止,我们还没有找到关于如何在 Swagger 中成功描述这个 API 的授权方案的答案。当然,记录这些类型的障碍也是我们任务的一部分,但我们仍然很好奇,想知道是否以及如何在 Swagger 中绕过这些障碍,以及这是否真的是定义 API 的非标准方式或者我们只是不知情。作为评论,我们还注意到此 API 中的其他行为似乎不符合标准,例如即使请求不成功也响应状态码 200,但这超出了这里问题的范围。

请注意,我们使用的是 OpenAPI 3.0。任何帮助表示赞赏。

4

0 回答 0