[译] 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.
1133 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.
949 0
|
2月前
|
JSON 小程序 JavaScript
uni-app开发微信小程序的报错[渲染层错误]排查及解决
uni-app开发微信小程序的报错[渲染层错误]排查及解决
695 7
|
2月前
|
小程序 JavaScript 前端开发
uni-app开发微信小程序:四大解决方案,轻松应对主包与vendor.js过大打包难题
uni-app开发微信小程序:四大解决方案,轻松应对主包与vendor.js过大打包难题
750 1
|
1天前
|
JSON 缓存 前端开发
HarmonyOS NEXT 5.0鸿蒙开发一套影院APP(附带源码)
本项目基于HarmonyOS NEXT 5.0开发了一款影院应用程序,主要实现了电影和影院信息的展示功能。应用包括首页、电影列表、影院列表等模块。首页包含轮播图与正在热映及即将上映的电影切换显示;电影列表模块通过API获取电影数据并以网格形式展示,用户可以查看电影详情;影院列表则允许用户选择城市后查看对应影院信息,并支持城市选择弹窗。此外,项目中还集成了Axios用于网络请求,并进行了二次封装以简化接口调用流程,同时添加了请求和响应拦截器来处理通用逻辑。整体代码结构清晰,使用了组件化开发方式,便于维护和扩展。 该简介概括了提供的内容,但请注意实际开发中还需考虑UI优化、性能提升等方面的工作。
33 11
|
4天前
|
供应链 搜索推荐 API
1688APP原数据API接口的开发、应用与收益(一篇文章全明白)
1688作为全球知名的B2B电商平台,通过开放的原数据API接口,为开发者提供了丰富的数据资源,涵盖商品信息、交易数据、店铺信息、物流信息和用户信息等。本文将深入探讨1688 APP原数据API接口的开发、应用及其带来的商业收益,包括提升流量、优化库存管理、增强用户体验等方面。
30 6
|
5天前
|
机器学习/深度学习 前端开发 算法
婚恋交友系统平台 相亲交友平台系统 婚恋交友系统APP 婚恋系统源码 婚恋交友平台开发流程 婚恋交友系统架构设计 婚恋交友系统前端/后端开发 婚恋交友系统匹配推荐算法优化
婚恋交友系统平台通过线上互动帮助单身男女找到合适伴侣,提供用户注册、个人资料填写、匹配推荐、实时聊天、社区互动等功能。开发流程包括需求分析、技术选型、系统架构设计、功能实现、测试优化和上线运维。匹配推荐算法优化是核心,通过用户行为数据分析和机器学习提高匹配准确性。
28 3
|
11天前
|
移动开发 小程序 PHP
校园圈子论坛系统采取的PHP语音和uni账号开发的小程序APP公众号H5是否只需要4800元?是的,就是只需要4800元
关于校园圈子论坛系统采用PHP语言和uni-app开发的小程序、APP、公众号和H5是否仅需4800元这个问题,实际上很难给出一个确定的答案。这个价格可能受到多种因素的影响
47 8
|
7天前
|
人工智能 小程序 数据处理
uni-app开发AI康复锻炼小程序,帮助肢体受伤患者康复!
近期,多家康复机构咨询AI运动识别插件是否适用于肢力运动受限患者的康复锻炼。本文介绍该插件在康复锻炼中的应用场景,包括康复运动指导、运动记录、恢复程度记录及过程监测。插件集成了人体检测、姿态识别等功能,支持微信小程序平台,使用便捷,安全可靠,帮助康复治疗更加高效精准。
|
28天前
|
人工智能 小程序 搜索推荐
uni app下开发AI运动小程序解决方案
本文介绍了在小程序中实现AI运动识别的解决方案。该方案依托于UNI平台,通过高效便捷的插件形式,实现包括相机抽帧控制、人体识别、姿态识别等在内的多项功能,无需依赖后台服务器,大幅提高识别效率和用户体验。方案内置多种运动模式,支持自定义扩展,适用于AI健身、云上赛事、AI体测等多场景,适合新开发和存量改造项目。

热门文章

最新文章