你可能不知道哈皮。我猜你可能用过joi这个模块,是开发出来的。joi是一个非常有用的验证模块。我们有理由相信这个团队的核心项目hapi也不错。
2011年8月5日,沃尔马实验室的成员艾伦·哈默提交了哈比神的第一份承诺。哈比神最初是邮政大厦的一部分,最初是基于特快专递建造的。后来,它发展成自己的框架,正如Eran在他的博客中所说:
哈比神基于配置优于编码的思想,业务逻辑必须与传输层分离…
哈比神的最新版本是16.1.0(版本帝,特别喜欢升级到大版本),有4879个提交,现在还由Eran Hammer维护。
1.hapi简介
哈比神的发音是happy,我一般读成h-api,哈哈
总之
Web和服务应用程序框架
(网络和服务)应用程序框架,在开始时命名,很容易理解,是一个非常好的网络和服务开发框架。一般我们看到的大多是web框架,很少强调服务。hapi中的api很可能在名字的开头就确定了它的位置。我总是喜欢把hapi和restify放在一起。从名称和框架功能来看,他们对api服务的支持比那些所谓的web框架要好。
让我们看一个更详细的定义
hapi是一个简单易用的以配置为中心的框架,内置了对输入验证、缓存、身份验证和其他构建web和服务应用程序的基本设施的支持。hapi使开发人员能够以高度模块化的方式专注于编写可重用的应用程序逻辑。
以配置为中心以配置为中心
内置用于构建web和服务应用程序:身份验证、缓存、身份验证和其他基础架构
哈比神允许开发人员更专注于编写可重用的应用程序逻辑
2、优点高性能——当沃尔玛实验室开发哈比神时,他们遵循基准驱动开发。因此,hapi是一个高性能框架
安全性——Eran Hammer(哈比神开发者领袖)是OAuth(安全授权)规范的原始作者。他担心hapi的安全,并审查了哈比神的所有法规。许多成员是哈比神的核心贡献者,这意味着许多人关注代码安全性。
可扩展性——处理高并发性非常好
移动优化(面向移动电子商务的轻量级构建)
插件架构——扩展/添加自己的模块(良好的生态)
基于配置的开发和强大的统计/日志记录
内置缓存(Redis、MongoDB或Memcached)
核心代码已经过100%测试/代码覆盖率-确保质量的严格方法
可测试性——hapi内置了端到端测试,因为它包含模块
核心功能是内置的,而其他功能则以插件的形式呈现:
3、hello world3.1准备工作
mkdir myproject
cd myproject
npm init -y
npm安装-保存hapi
touch app.js
3.2 app.js代码
使用strict ';
const哈比神= require(' hapi ');
const server =新哈比神。server();
server.connection({ port: 3000,host:' localhost ' });
server.route({
方法:“GET”,
路径:“/”,
处理程序:函数(请求,回复){
回复('你好,世界!');
}
});
server.route({
方法:“GET”,
路径:“/{name}”,
处理程序:函数(请求,回复){
回复(' Hello,'+encodeURIComponent(request . params . name)+'!');
}
});
server . start((err)= gt。{
if (err) {
抛出err
}
console . log(` server running at:$ { server . info . uri } `);
});
回复类似于koa中的ctx.body,会根据其类型来判断。比如,如果是对象类型,返回json就方便了。
3.3流程
连接
路线
开始
很好理解,特别是路由,显式声明,类似于express。命名航路的写法略有不同,在express中是/:name,在hapi中是/{name}。
3.4实施
节点应用程序
服务器运行于:http://localhost:3000
综上所述,表象很简单,明显比明示更坚决,但当体系复杂到一定程度,其实也是一样的。hapi只是插入这些实现,并延迟学习,直到您使用它们。懒人认为你看起来很美,但事实也是如此。有点混乱。换个角度看,作为主要的api框架,不应该这样设计吗?想复杂就复杂。如果想简单的得到一个微服务默认,那就很简单了,是很多人心目中的理想框架。
4.依赖项":{
“接受”:“2.x.x”,
“弹药”:“2.x.x”,
“boom”:“4 . x . x”,
“call”:“4 . x . x”,
“catbox”:“7 . x . x”,
“catbox-memory”:“2 . x . x”,
" crypt les ":" 3 . x . x ",
“重”:“4.x.x”,
“Hoek”:“4 . x . x”,
“铁”:“4.x.x”,
“项目”:“2.x.x”,
“joi”:“10 . x . x”,
“mimos”:“3 . x . x”,
“讲台”:“^1.2.x”,
“拍摄”:“3.x.x”,
“州名”:“5.x.x”,
“潜台词”:“^4.3.x”,
" topo": "2.x.x "
},
" devDependencies": {
“代码”:“4.x.x”,
“车把”:“4.x.x”,
“惰性”:“4.x.x”,
“lab”:“11 . x . x”,
“愿景”:“4.x.x”,
“沉船”:“10.x.x”
},
接受:HTTP接受-*头解析。
另一个类似的快递和koa使用https://github.com/jshttp/accepts,高级内容协商,所以他们是相似的
只想说接受的代码很丑。。。
弹药
是HTTP范围处理工具
相当于快递中的https://github.com/jshttp/range-parser
繁荣
HTTP友好错误对象
例如
boom . NotFound(' missing ');
生成以下响应负载:
{
“状态代码”:404,
“错误”:“未找到”,
"消息":"丢失"
}
感觉像是体力劳动
打电话给
HTTP路由。
常量路由器=新呼叫。router();
router.add({ method: 'get ',path: '/a{b?}c{d}' },'/a{b?} c { d } ');
简单来说,就是所谓配置集中化中的路由配置。所谓的正则化看起来也很奇怪,和express完全不同,因为没有path-to-regexp作为依赖。凑合吧
catbox
多策略对象缓存服务支持内存缓存、redis、MongoDB、memcached、riak、Amazon S3、rethinkdb、couchbase、aerospike和LevelDB。基本都是xxStore。
盒式存储器
catbox的内存适配器,即默认的缓存是作为内存实现的。
神秘
通用加密工具,简单来说就是加密和boom的包。仅提供三种方法
沉重的
用于测量进程负载的模块,用于统计服务器信息。
岩石边坡工程
在扩展的hapi世界中共享的节点实用程序
提供各种独立的、类似于lodash或下划线的辅助方法,都是实用的方法。但好像叠起来就没有设计感了。
新手的时候练一下挺好的。
铁
一个用于加密和解密json对象的工具模块
项目
它是实现的简化版本,提供串行、并行等方法,有点痛苦
蔡淳佳
对象模式验证,可能是hapi中最著名的模块,也常见于express和其他项目。好用。
希腊拟曲
mime数据库接口是Mime数据库的封装
讲台
有额外特性的Node(半)兼容事件发射器对Node.js的默认事件发射器并不满意,很多人想自己写一个更强大的,据说是因为Node.js拒绝添加额外的功能来保证效率。
射击
将伪造的HTTP请求/响应注入节点HTTP服务器,用于模拟服务器逻辑、编写测试或调试。
简单来说,就是e2e测试的工具。伪造意味着伪造,所以每个人都应该知道它的意图。
国家地位
HTTP状态管理工具,提供报头、cookie、加密解密、格式化等方法
潜台词
HTTP负载解析器类似于express中的body-parser,但是它有更多的功能
地形图
具有分组和排序的工具模块
代码
BDD风格的断言库,expect风格的,不知道为什么不能用它的名字。。。。
惰性的
类似于https://github.com/expressjs/serve-static,但更具综合性,如etag、compress等
吐出来,就叫。。。。
视觉
hapi.js的模板渲染支持
与https://github.com/tj/consolidate.js,相似,它们都与模板渲染相关。不知道为什么发明了轮子。。。大概是为了统一hoek对错误的处理?
残骸
超文本传输协议客户端工具只是简单的超文本传输协议客户端。类似于请求模块
综上
命名不舒服,类似代码,惰性,让人绝望
代码不舒服,完全没有doc,缺乏设计感
很多轮子大概是历史原因。比如很多图书馆在2011年就没那么健全了,干脆自己建。
社区中没有现有内容的重用
5、插件代码中没有太多参考,我们来看看hapi更强大的插件。从官方文档来看,有12个类别,包括授权、认证、文档、国际化、日志、安全、会话、模板、工具、验证和hapi自己使用的扩展。它看起来不错,所以我们试着看看它的插件是否真的强大和丰富。
授权做
有两个插件,rbac和acl。如果做过权限管理,应该熟悉这两个概念。
Acl是最早也是最基本的访问控制机制,它的原理很简单:每个资源都配有一个列表,这个列表记录了哪些用户可以在这个资源上执行CRUD中的那些操作。当系统试图访问该资源时,首先会检查该列表中当前用户是否有访问权限,以确定当前用户是否可以执行相应的操作。
Rbac根据用户的角色对用户进行分类,并通过用户的角色决定用户是否可以对某个资源进行操作。rbac相对于acl的最大优势在于它简化了用户和权限的管理。通过对用户进行分类,角色和权限是相关联的,而用户和权限是间接相关联的。Rbac模型使得访问控制,尤其是对用户的授权管理非常简单,易于维护,因此得到了广泛的应用。
如果你做一些后台管理系统,你应该选择至少一个acl或rbac。可以说hapi开箱即用,可以省去我们很多麻烦。express中虽然也有类似的功能,但好像都很强,而且大部分都是自己写的。
认证
先说说我熟悉的
hapi-auth-basic &。哈比神-auth-cookie很常见
hapi-auth-jwt &。哈比神-auth-jwt2: jwt是成本最低的令牌授权机制,应用广泛
哈比神-护照-saml是著名的护照模块的扩展。Passport主要提供对oauth授权的支持,支持google、github、twitter、facebook、OpenID、BrowserID、HTML表单等各种授权。这是一个非常强大的模块
哈比神-session-mongo使用mongodb来存储会话和集成auth,这在以前是因为懒惰而做的。
还有一些不熟悉的
贝尔和护照模块做类似的事情
哈比神-auth-anonymous的手机匿名用户政策,很有意思
哈比神-tiny-auth必须提供用户名和密码才能查看api,这很弱
认证分类下总共有16个插件,整体上非常丰富,集成了我们日常应用的大部分功能。考虑到hapi从2011年到现在近六年来提供了这么多插件,这是了不起的。
6、样板
哈比神有许多样板。由于它主要提供api服务,让我们挑选一个与api相关的样板文件,看看它的最佳实践:
6.1目录结构
。
├── api/
|├──·汉德勒/
| | └── home.js *样本处理器
| └──索引. js *休息路线
├──配置/
| ├──清单. js *服务器配置
| └──秘钥
├──测试/
| └── api.js * API测试
├──服务器. js *服务器定义(使用Glue插件读取清单)
├──认证策略
└──包. json
以server.js为入口,结合auth.js的授权策略,将具体的api扔进api目录,结构相当清晰。配置和测试遵循大多数框架的配置。有趣的config/secret.js和Secret key需要在部署时进行配置,但是很多框架并不这么做。
从这个目录来看,更适合微服的小巧美观的api服务。
6.2插件
hapi.js的胶水服务器编辑器
在标题、查询或Cookies中使用JSON网络令牌(jwt)的安全Hapi.js认证插件。
简单的hapi插件,用于在启动时显示路由表。
良好-哈比神过程监视器。它侦听哈比神服务器实例发出的事件,并允许注册输出订阅事件的自定义报告程序。
良好控制台-良好过程监视器的控制台报告。
好-挤压-简单的事件过滤转换流。
实验室节点测试实用程序。
代码- BDD断言库。
nodemon -监视node.js应用程序中的任何更改,并自动重新启动服务器。
一个完全可插入的工具,用于识别和报告Java中的模式。
带有帮助验证正确导入的规则的插件。
一个命令行界面工具,用于并行或顺序运行多个网络处理器。
6.3入职培训
胶水是按配置组装的工具,hapi以配置为中心,也有胶水的功劳
哈比神-认证-jwt2用于认证
Blipp是一个打印路由表的模块。如果你熟悉铁路,你必须知道耙路线
Good系列用于进程监控和插件机制,支持控制台、挤压等。
测试部分采用hapi默认lab+代码
Elint,nodemon,NPM-run-都挺满意的
7、总结7.1 hapi更好
定位非常准确,以api为切入点,区分express等传统web框架
背后有沃尔玛的应用和支持,项目还比较健康,已经大规模应用
基本上可以开箱即用,和thinkjs差不多,但是比thinkjs插件丰富多了
文件没问题
辅助工具还是很完善的,尤其是devops相关的,比express好很多等等
7.2坏点
框架的api和代码有沃尔玛风格,不太规范
没有内置的新功能,它仍然是相当传统的
哈比神充满了配置和插件,褒贬不一。我不太喜欢它的视图设计。有兴趣的话可以考成绩,应该不比express好。
作为api类的服务,hapi是一个不错的选择
1.《inert 我看hapi》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。
2.《inert 我看hapi》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。
3.文章转载时请保留本站内容来源地址,https://www.lu-xu.com/fangchan/860675.html