当前位置: 首页 > 知识库问答 >
问题:

我应该如何将Swagger与Hapi一起使用?

太叔豪
2023-03-14

我有一个正常工作的普通Hapi应用程序,我计划迁移到Swagger。我使用官方说明安装了swagger-node,并在执行“swagger项目创建”时选择了Hapi。但是,我现在很困惑,因为似乎有几个库用于集成swagger-node和hapi:

    < li>hapi-swagger:最受欢迎的一款 < Li > hapi-waggered:有点流行 < li>swagger-hapi:不受欢迎且不太活跃,但被官方Swagger Node.js库(即swagger-node)用作哈比神项目的默认设置

我认为swagger-hapi是“官方”方法,直到我试图找到有关Hapi路线上各种配置的信息(例如授权、范围等)。)。似乎这些方法也有根本的不同,swagger-hapi将Swagger定义作为输入并自动生成路线,而hapi-swagger和hapi-swagger似乎彼此有相似的方法,仅从普通的旧Hapi路线定义生成Swagger API留档。

考虑到贡献者的数量和下载量,happy-swagger似乎是要走的路,但我不确定如何继续。有没有一种“官方”的Swagger方法来设置happy,如果有,我如何设置身份验证(最好是通过使用happy-auth-jwt2或其他类似的JWT解决方案)和授权?

编辑:我还发现了swaggerize-happy,这似乎是由PayPal的开源kraken.js团队维护的,这表明它可能有某种企业支持(总是一件好事)。swaggerize-happy似乎与happy-swagger非常相似,尽管后者似乎提供了更多开箱即用的功能(主要是Swagger Editor)。

共有3个答案

通奕
2023-03-14

我们正在使用惰性,视觉和快乐摇摆来构建和托管摇摆不定的文档。我们完全按照这个顺序加载这些插件,不配置惰性或Vision,只在happy-swagger配置中设置标题等基本属性。

申屠锦
2023-03-14

我们用了惰性,视觉,快乐的摇摆。

import * as Inert from '@hapi/inert';
import * as Vision from '@hapi/vision';
import Swagger from './plugins/swagger';
...
...
// hapi server setup
...
const plugins: any[] = [Inert, Vision, Swagger];
await server.register(plugins);
...
// other setup
import * as HapiSwagger from 'hapi-swagger';

import * as Package from '../../package.json';

const swaggerOptions: HapiSwagger.RegisterOptions = {
  info: {
    title: 'Some title',
    version: Package.version
  }
};

export default {
  plugin: HapiSwagger,
  options: swaggerOptions
};
司业
2023-03-14

编辑:第3点。从你的问题和理解swagger-happy实际上做了什么是非常重要的。它不直接服务于swagger-ui html。它不是为了,但它正在实现整个摇摆不定的想法(第1点和第2点中的其他项目实际上有点逆转)。请参阅下文。

事实证明,当您使用swagger node和swagger hapi时,您不需要您提到的所有其他包,除了直接使用Swager ui(其他所有人都使用它-他们将其包装在依赖项中)

我想分享我对这个hapi/swagger难题的理解,希望我花的这8个小时也能帮助到其他人。

像hapi-swaged、hapi-Swaged ui和hapi-SWager这样的库-它们都遵循相同的方法-可以这样描述:

在定义路由时记录API。

他们在某种程度上远离了swagger-node的主要思想和使用swagger-cli创建的样板hello_world项目,您提到过您使用了它。

虽然swagger-node和swagger-happy(注意它与happy-swagger不同)在说:

< code >在一个集中的地方定义所有API文档和路径**,即swagger.yaml**

然后你只需要专注于编写控制器逻辑。swagger cli提供的样板项目已经公开了这种集中式的place swagger。通过/swaggerendpoint将yaml转换为json。

现在,因为上面所有的包都在使用swagger ui项目来显示ui,它只是一堆静态html-为了使用它,您有两个选项:

> < li>

1)从您的应用程序中自行托管此静态html

2)将其托管在单独的Web应用程序上,甚至直接从文件系统加载索引.html。

在这两种情况下,您只需要用您的swagger json提供swagger用户界面-如上所述,它已经由/swaggerendpoint公开。

如果您选择选项2 ),唯一需要注意的是,您需要为那个endpoint启用cors,这碰巧非常容易。只需更改default.yaml,也可以使用cors风笛。请查看这个线程如何做到这一点。

正如@Kitanotori在上面所说,我也看不出以编程方式记录代码有什么意义。在一个地方描述所有的东西,让代码和文档引擎都理解它,这个想法很棒。

 类似资料:
  • 我是通过阅读Spring Boot in Action这本书开始学习Spring Boot的,我正在学习这本书中的示例,试图自己运行它们,但我在使用时遇到了问题。 我已经翻遍了这一章,寻找我可能的不匹配。然而,它就是不起作用。 这个项目应该是一个简单的阅读清单。 代码如下: 读者@实体: Jpa接口:

  • 我正在尝试使用swagger记录akka-超文本传输协议API 我拥有的是: 这会生成一个json,我可以在swagger UI中查看它。但是,我不能使用生成的示例,因为缺少auth选项。 我没有找到任何使用swagger-akka-http的例子,只有一些使用 config的例子 在< code>yaml中,可能是这样的: 但是,我没有。除了通过注释之外,我也不能控制生成的。 在IIUC中,提及

  • 问题内容: 如何将chmod与Node.js一起使用? 程序包中有一个方法应该执行此操作,但是我不知道第二个参数是什么。 fs.chmod(路径,模式,[回调]) 异步chmod(2)。除了可能的异常外,没有其他参数被赋予完成回调。 fs.chmodSync(路径,模式) 同步chmod(2)。 (来自Node.js文档) 如果我做类似的事情 没有任何反应(文件未更改为该模式)。 也不起作用。 我

  • 我在Ubuntu 14.04中安装了phpbrew以使用PHP5.4。它工作得很好,但当我尝试使用composer时除外,composer会忽略phpbrew并安装与PHP5.5相关的依赖项。 有没有办法强制composer与phpbrew config兼容?我试图在我的作曲家中添加:php:“5.4”。json,但是它说这个要求在我的php版本中是不可能的。

  • 我是Micronaut框架的新手,我正在尝试使用entitymanager创建我的存储库。我这样创建了我的存储库 我使用这个类实现接口并注入entitymanager 问题是我一直有这个错误: PS:我已经启用了注释处理

  • 我正在尝试将composer与我的WampServer一起使用。 我所有文件的路径都是,但当我运行composer时,它会将供应商文件和其他东西安装到其他地方。 我甚至不知道我的项目在哪里,我也不能改变我的项目在哪里的路径。我已经尝试了所有的方法,但它似乎仍然没有在我的项目文件夹中安装供应商文件。