我应该如何使用Swagger和Hapi?

Kit*_*ori 16 node.js swagger hapijs

我有一个普通的Hapi应用程序,我打算迁移到Swagger.我使用官方指令安装了swagger-node,并在执行'swagger project create'时选择了Hapi.但是,我现在感到困惑,因为似乎有几个库用于集成swagger-node和hapi:

  1. hapi-swagger:最受欢迎的一个
  2. hapi-swaggered:有点流行
  3. swagger-hapi:不受欢迎而且不活跃但被官方Swagger Node.js库(即swagger-node)用作Hapi项目的默认值

我虽然swagger-hapi是"官方"的方法,直到我试图找到关于如何在Hapi路线上进行各种配置的信息(例如授权,范围等).似乎这些方法根本不同,swagger-hapi将Swagger定义作为输入并自动生成路径,而hapi-swagger和hapi-swaggered似乎通过仅从普通的旧Hapi生成Swagger API文档而具有相似的方法路线定义.

考虑到贡献者的数量和下载次数,hapi-swagger似乎是要走的路,但我不确定如何继续.是否有"官方"Swagger方式来设置Hapi,如果有,我如何设置身份验证(最好是使用hapi-auth-jwt2或其他类似的JWT解决方案)和授权?

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

akr*_*smv 9

编辑:第3点.从你的问题和理解swagger-hapi实际做什么是非常重要的.它没有直接服务于swagger-ui html.它不打算,但它启用了整个招摇的想法(第1点和第2点中的其他项目实际上有点逆转).请看下面.

事实证明,当你使用swagger-nodeswagger-hapi时,你不需要你提到的所有其他软件包,除了直接使用swagger-ui(无论如何都被其他人使用) - 它们将它包装在他们的依赖)

到目前为止,我想在这个hapi/swagger难题中分享我的理解,希望我花了8个小时也可以帮助其他人.

hapi-swaggered,hapi-swaggered-ui这样的图书馆,也是hapi-swagger--所有这些都遵循相同的方法 - 可以这样描述:

You document your API while you are defining your routes

他们稍微偏离了swagger-node和使用swagger-cli创建的样板hello_world项目的主要思想,你提到过你使用它.

虽然swagger-nodeswagger-hapi(注意它与hapi-swagger不同)说:

You define all your API documentation and routes **in a single centralized place - swagger.yaml**

然后你只专注于编写控制器逻辑.随swagger-cli提供的样板项目已经暴露了这个集中的地方swagger.yaml作为json通过/ swagger端点.

现在,因为所有上述软件包用于显示UI 的swagger-ui项目只是一堆静态html - 为了使用它,你有两个选择:

  • 1)从你的应用程序中自我托管这个静态html

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

在这两种情况下,你只需要用你的招摇json喂swagger-ui - 如上所述已经被/swagger端点暴露了.

如果您选择选项2),唯一需要注意的是您需要为该终点启用cors,这恰好非常容易.只需更改你的default.yaml,也可以使用cors bagpipe.请参阅此主题以了解如何执行此操作.

正如@Kitanotori上面所说,我也没有看到以编程方式记录代码的重点.只是在一个地方描述所有内容并使代码和文档引擎都能理解它的想法非常棒.