[译] Introducing Horizon

原文:Introducing Horizon: build realtime apps without writing backend code前端

今天咱们很是荣幸地宣布 Horizon 第一次正式发布,一个开源的后端服务,能够帮助开发者构建和扩展实时 web 应用,Horizon 包括:程序员

  • 一个使用 Nodejs 和 RethinkDB 构建的后端服务器,支持数据持久化,实时流,输入校验,用户认证,还有权限体系web

  • 一个 JavaScript 客户端库,开发者能够在前端将 json 文档存储到数据库中,执行查询,以及订阅实时更新数据库

  • 一个命令行工具,能够生成项目模板,启动一个本地的 Horizon 开发服务器,还能帮助你将本身的 Horizon 应用部署到云端json

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

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

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

为何是 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 只是一个起点,远不是最终的目标。你会在项目进度中看到新功能和改进。现有功能包括:查询,实时更新,认证,权限体系,以及对静态资源的支持。

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

长期规划仍在不断壮大,不过下面这个列表,是咱们但愿在将来的版本中包含的功能:

  • 一个内置的管理后台,配备交互式数据浏览器

  • 更好的链接生命周期管理器以及断开链接恢复

  • 支持使用 ReQL 和 JavaScript 自定义 Horizon 命令

  • 支持客户端文件上传

  • 除了 OAuth 之外,提供常规的密码认证

  • 内置分页 API,搭配实时查询使用

  • 原生支持执行开放式更新

  • 支持关系性的查询聚合

  • 内置支持 GraphQL 数据查询

  • 你能够关注 Horizon forum 上的平常更新,咱们会努力完善这些功能和稳定 Horizon 的代码。

社区参与

  • Horizon: the realtime, open-source JavaScript backend

  • Horizon forum

  • GitHub - rethinkdb/horizon: Horizon is a realtime, open-source backend for JavaScript apps

  • Join RethinkDB on Slack

  • https://twitter.com/horizonjs

咱们期待着与你的合做,咱们以推动实时 web 的发展为己任。

译者:

一个程序员的命运啊,固然要靠自我奋斗,但也要考虑到历史行程,我一个前端工程师,怎么就忽然关心起数据库了呢。

这个翻译也没有什么太多内容,大概三件事:

  • 起源,怎么就作了这么个东西;

  • 使用,提供了不少好玩的东西;

  • 展望,有好多牛逼的东西要实现。

若是还有一点什么内容就是鼓励社区参与,这对后续的发展有很大帮助。但这些都是次要的,主要的就是三件事情,很惭愧,就作了一点微小的工做,谢谢你们。

相关文章
相关标签/搜索