[译] Introducing Horizon: build realtime apps without writing backend code

简介:
原文: Introducing Horizon: build realtime apps without writing backend code

今天我们非常荣幸地宣布 Horizon 第一次正式发布,一个开源的后端服务,可以帮助开发者构建和扩展实时 web 应用,Horizon 包括:

  • 一个使用 Nodejs 和 RethinkDB 构建的后端服务器,支持数据持久化,实时流,输入校验,用户认证,还有权限体系
  • 一个 JavaScript 客户端库,开发者可以在前端将 json 文档存储到数据库中,执行查询,以及订阅实时更新
  • 一个命令行工具,可以生成项目模板,启动一个本地的 Horizon 开发服务器,还能帮助你将自己的 Horizon 应用部署到云端

Horizon 服务器是一个完整的后端服务,开发者可以用来驱动他们的应用。它非常适合用来实现快速原型:简单地通过命令行运行 Horizon 服务器,利用 Horizon 客户端库来提升你前端的用户体验。有了 Horizon,前端开发者不写一行后端代码就能开发出一个完整的应用。

Horizon 是一个开源软件,就是说你可以按照自己的喜好使用和修改。开发的时在自己的笔记本上运行一个本地实例,之后可以部署到任何你想到部署的地方:低廉的 VPS 主机,公有云,或者你自己的裸机上。Horizon 依靠 RethinkDB 可靠的集群,在你用户增长之后可以很方便地进行扩展。

除了开源的 Horizon 后端,我们还构建了一个可以用来部署,管理和扩展 Horizon 应用的云服务,Horizon Cloud 管理 Horizon 后端服务和底层的 RethinkDB 数据库,还能按照需求自动进行扩展。Horizon Cloud 还对备份和恢复,不停机版本更新,监控和其他实用功能提供了内置支持。开发者可以使用 Horizon 命令行工具将自己的应用部署到 Horizon Cloud。Horizon Cloud 目前还处于内测阶段,但用不了多久就会和大家见面。

为什么是 Horizon

去年在介绍 RethinkDB 1.16 带来的 changefeeds 时,我们分享了推动实时 web 的计划。不再需要通过轮询的方式获取数据更新,开发者可以告诉数据库将应用的实时结果作为持续的流推送过来。当我们与用户分享这一功能时,有个问题翻来覆去地被问起:我可以从浏览器的 web 应用中直接访问 RethinkDB 的实时更新吗?

changefeeds 在最开始是为后端开发者设计的 ,由他们决定如何将实时更新传输到前端。在我们推出这个功能后不久,我们开始琢磨如果能将实时数据流直接暴露给浏览器会不会非常牛逼。WebSocket 抽象库, GraphQL 那样的新数据检索技术,以及 RxJS Observables 强大的异步流本源,给前端提供了新的si去检索和处理数据。Web 应用正在不断进化,早已超出 REST 和 XMLHttpRequest 所能承载的能力。Horizon 是为未来而生,它用实时数据流贯通数据库和前端。

Horizon 能减少开发人员在构建和扩展 web 应用时面对的麻烦。它消除了重复的模板和繁琐的步骤,就像手写 CRUD 端点,用户认证,以及 session 管理。我们致力于填补数据持久层和前端之间的鸿沟,将开发者从不断发明轮子的轮回中解脱出来,使其能把更多的时间集中在实现业务逻辑上。

上手 Horizon

开始使用 Horizon 之前,先要从 NPM 上安装 Horizon 库包,其中包含了一个名为 hz 的命令行工具,你可以用它来生成和运行你的首个项目。你可以在Horizon 官网找到详细安装说明简明教程

Horizon 客户端库提供了简明的 API,你可以通过链式方法表达数据库查询。查询返回 RxJS Observables,便于你对流查询结果进行合并和处理。在这背后,Horizon 的数据集合基于 RethinkDB 的表。在开发模式下运行 Horizon 时,服务器将自动创建所需的表和索引。

下面的例子展示了如何在浏览器或其他前端环境使用 Horizon 客户端库。这段代码展示了如何将 JSON 文档存储在一个 Horizon 集合中,以及从集合记录中获取一个过滤后的子集:

var horizon = Horizon();
var messages = horizon("messages");
messages.store({
  sender: "Bob",
  time: new Date(),
  text: "Hello, World!"
});
messages.findAll({sender: "Bob"}).fetch()
        .subscribe(m => console.log(m));

如果想不停地执行查询并获得实时更新的流数据,只需要使用 `watch` 方法,接下来的例子便展示了如何通过 Horizon 查询来实现在线游戏中的实时排行榜:

var users = horizon("users");
users.order("score", "descending").limit(5).watch()
     .subscribe(items => console.log(items))

上边的查询按照用户的分数倒序排列并给出前五名。每当数值发生变化,`subscribe` 回调将获得一个包含更新内容的完整数组,它会自动维护排序顺序,并根据需要添加和删除用户。

Horizon 服务器将客户端的查询翻译成 ReQL,即 RethinkDB 的查询语言。查询翻译过程中利用自动生成的索引,最大限度提高效率和性能。Horizon 查询语言设计的要比 ReQL 简单易用,易于开发者学习和进行服务器优化。下面是支持的命令列表:

  • find, findAll
  • above, below, limit, order
  • remove, removeAll
  • store, upsert, replace
  • watch, fetch

你可以查阅 Horizon 文档 来学习更多关于客户端库 API 的用法。我们正着手一系列的改进,提高查询语言的能力和表现力,比如一个特性就是可以使你将多个查询组合到模型关系中。

整合 Horizon 与 Javascript 生态系统

Horizon 不具有强制性也不会自以为是--它本身就被设计成能与你了解喜爱的 JavaScript 框架配合使用的。Horizon 服务器具有很强可扩展性,就是说,想定制后端服务的开发者可以根据自己的需要将 Horizon 嵌入到 Node.js 应用中,还可以按照需要添加新功能。你甚至可以将 Horizon 整合到现有的 Node.js 后端应用中,可以和常规的框架比如 Express,Koa,Hapi 等愉快的玩耍。

Horizon 客户端库使用一个简单的基于 WebSocket 的协议与服务器进行通信,不过我们提供了一个纯净的抽象层,你不必管理持久性连接,也不用关心 WebSockets 具体怎么工作。Horizon 客户端库可以很好地搭配任何前端框架使用,如 React,Angular,Ember,以及 vanilla JavaScript(全球最流行的 JavaScript 框架 :)。你还可以与 redux 那样的前端状态管理器搭配使用。

你可以在 Horizon 的官方 Github 仓库找到一个示例,展示了如何把 Horizon 与形形色色的前端和后端的框架整合到一起。React 开发者还可以去看一下 lovli.js,一个由 Patrick Neschkudla 编写的实用模板,其中用到了 Horizon,React,以及 Redux。

我们期待某一天能将 Horizon 客户端库搬到移动平台上,我们也在积极的与社区合作,以确保 Horizon JavaScript 客户端能在 Electron 和 React Native 上正常工作。JavaScript 正在渗透到各个地方,从嵌入式物联网系统到桌面和移动应用程序。我们相信 Horizon 能提供一些理由让开发者选择 JavaScript。

此外,我们还为客户端库与 Horizon 后端通信的底层协议编写了文档。开发者可以利用该协议构建其他语言版本的客户端库。该协议包括简单的JSON文件。它基于 engine.io,一个支持多个网络传输的实时框架。

规划

今天发布的 Horizon 只是一个起点,远不是最终的目标。你会在项目进度中看到新功能和改进。现有功能包括:查询,实时更新,认证,权限体系,以及对静态资源的支持。

一些主打功能还不够成熟。权限系统和校验支持是近期刚加入的,很晚才列入到开发周期中。在我们着手改进这些功能的时候,你可能会遇到一些不完善的地方。

长期规划仍在不断壮大,不过下面这个列表,是我们希望在未来的版本中包含的功能:

你可以关注 Horizon forum 上的日常更新,我们会努力完善这些功能和稳定 Horizon 的代码。

社区参与

我们期待着与你的合作,我们以推进实时 web 的发展为己任。


目录
相关文章
|
开发框架 .NET
Deployment of VC2008 apps without installing anything
If you create a default CRT/MFC application with VS2008, this application will not run on other computers.
1158 0
|
并行计算
Howto: Deploy VC2008 apps without installing vcredist_x86.exe
There are several reasons for xcopy deployment of an application (also known as application local). One main reason is that you are independent of what the target computer has installed.
972 0
|
1月前
|
JSON 自然语言处理 前端开发
【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡
【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡
141 72
【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡
|
2月前
|
前端开发 安全 开发工具
【11】flutter进行了聊天页面的开发-增加了即时通讯聊天的整体页面和组件-切换-朋友-陌生人-vip开通详细页面-即时通讯sdk准备-直播sdk准备-即时通讯有无UI集成的区别介绍-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
【11】flutter进行了聊天页面的开发-增加了即时通讯聊天的整体页面和组件-切换-朋友-陌生人-vip开通详细页面-即时通讯sdk准备-直播sdk准备-即时通讯有无UI集成的区别介绍-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
207 90
【11】flutter进行了聊天页面的开发-增加了即时通讯聊天的整体页面和组件-切换-朋友-陌生人-vip开通详细页面-即时通讯sdk准备-直播sdk准备-即时通讯有无UI集成的区别介绍-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
|
28天前
|
安全 API Swift
如何在苹果内购开发中获取App Store Connect API密钥-共享密钥理解内购安全-优雅草卓伊凡
如何在苹果内购开发中获取App Store Connect API密钥-共享密钥理解内购安全-优雅草卓伊凡
106 15
如何在苹果内购开发中获取App Store Connect API密钥-共享密钥理解内购安全-优雅草卓伊凡
|
23天前
|
Web App开发 编解码 算法
布谷一对一直播源码开发:阿里云视频语音通话社交交友App的必备功能
在当今移动社交领域,一对一视频和语音通话功能已成为用户期待的基础配置。从熟人社交到陌生人交友,从专业咨询到情感陪伴,实时音视频互动能力直接决定了社交App的用户留存和市场竞争力。山东布谷科技将深入探讨一对一直播源码开发高质量一对一视频和语音通话功能的关键要素和技术实现方案。
布谷一对一直播源码开发:阿里云视频语音通话社交交友App的必备功能
|
16天前
|
人工智能 小程序 API
【一步步开发AI运动APP】四、使用相机组件抽帧
本文介绍了如何使用`ai-camera`组件开发AI运动APP,助力开发者深耕AI运动领域。`ai-camera`是专为AI运动场景设计的相机组件,支持多平台,提供更强的抽帧处理能力和API。文章详细讲解了获取相机上下文、执行抽帧操作以及将帧保存到相册的功能实现,并附有代码示例。无论是AI运动APP还是其他场景,该组件都能满足预览、拍照、抽帧等需求。下篇将聚焦人体识别检测,敬请期待!
|
9天前
|
人工智能 开发框架 小程序
工会成立100周年纪念,开发职工健身AI运动小程序、APP方案推荐
为庆祝中华全国总工会成立100周年,特推出基于AI技术的智能健身系统,以小程序和APP形式呈现,助力职工健康生活。方案包括:1) 小程序插件,支持多种运动识别,开箱即用;2) APP插件,提供更高精度的运动检测;3) 成熟的「AI乐运动」系统,支持赛事活动管理。这些方案满足不同需求,推动全民健身体验升级,彰显工会对职工健康的关怀。
|
12天前
|
人工智能 小程序 开发者
【一步步开发AI运动APP】六、运动计时计数能调用
本文章介绍了如何通过【一步步开发AI运动APP】系列博文,利用uniAPP插件开发高性能的AI运动应用。文中详细说明了创建运动分析器、进行运动分析、监听计数变化以及停止/重置分析等功能实现步骤。插件内置多种常见运动(如跳绳、俯卧撑等),支持自定义扩展,满足健身、体测等场景需求。示例代码展示了人体检测、运动计时计数及UI更新的完整流程,帮助开发者快速上手并深耕AI运动领域。
|
8天前
|
缓存 开发工具 开发者
鸿蒙NEXT开发App相关工具类(ArkTs)
这段代码展示了一个名为鸿蒙NEXT开发 `AppUtil` 的工具类,主要用于管理鸿蒙应用的上下文、窗口、状态栏、导航栏等配置。它提供了多种功能,例如设置灰阶模式、颜色模式、字体类型、屏幕亮度、窗口属性等,并支持获取应用包信息(如版本号、包名等)。该工具类需在 UIAbility 的 `onWindowStageCreate` 方法中初始化,以便缓存全局变量。代码由鸿蒙布道师编写,适用于鸿蒙系统应用开发,帮助开发者更便捷地管理和配置应用界面及系统属性。

热门文章

最新文章