介绍
ssb-replication-graphql 是基于 Secure Scuttlebutt(Secure Scuttlebutt 是一个点对点的去中心化社交网络协议)中的复制协议对 GraphQL 的实现。该 npm 包实现了一个 GraphQL 的服务器,给客户端提供 GraphQL API,并允许客户端读取 SSD(Secure Scuttlebutt 数据)。
本文将为大家介绍如何使用 ssb-replication-graphql 包,实现一个基础的节点间数据同步。
安装
你可以使用 npm 安装 ssb-replication-graphql
npm i ssb-replication-graphql -S
实现
使用 ssb-replication-graphql 实现同步 data 数据到其它节点。
创建 Secure Scuttlebutt
首先,我们需要使用创建 Secure Scuttlebutt(SSB)的包,为数据同步做好准备。
const SecretStack = require('secret-stack') const caps = require('ssb-caps') const stack = SecretStack({ caps }) const sbot = stack({ port: 8008 })
启动 GraphQL 服务器
在启动逻辑中,我们需要让 ssb-replication-graphql 接管我们实例化的 sbot
实例,然后启动 GraphQL 服务器。
const ssbReplicationGraphQL = require('ssb-replication-graphql') ssbReplicationGraphQL({ sbot }).then(({ app }) => { app.listen(3000, err => { if (err) return console.error(err) console.log(`Server is listening on port 3000`) }) })
这样,我们就已经启动了 GraphQL 服务器且让它接管了 SSB 实例 sbot
。
定义 GraphQL Schema
现在让我们通过 GraphQL 风格定义一个 Schema,该 Schema 将用于定义我们数据的结构。
-- -------------------- ---- ------- -- --------- ----- - --- - - ------------------------ ----- --------- - --------------------- ----- ------ - ---- ---- ---- ---------- ---------- - ------- --- -------- ------- ---------- ---- --------- -- --------- ---- - ---- ----- - ----------- ----- ---- --------- ------ - ---- -------- - -------------------- --------- -- - -
在这个例子中,我们定义了一个 Post
类型,该类型将实现 SsbMessage
接口。我们还定义了两个查询(Query
)和一个变更(Mutation
),用来获取或者发布数据。
创造完 schema.js 后,让我们拿到它并初始化 ApolloServer:
-- -------------------- ---- ------- -- --------- ----- - ------------ - - ------------------------ ----- - -------------------- - - -------------------------------- ----- --------------------- - ---------------------------------- ----- - ------------ - - ------------- ----- ------ - --------------------------- ----- -------- -------------- ---- -- - ----- -------- - ----- ------ ----- --------- - --------------------------- ---- -- ----- ------ - ---------------------- --------- --------- -- ------ --- -------------- ------ -- - -------------- ---- ------------- -- - ---------------- --- -- - -- ----- ------ ------------------ ------------------- ------ -- --------- -- ---- ------ -- --
在调用 makeExecutableSchema()
函数时传递了来自 ssbSchema.createResolvers()
函数的 resolvers
参数,Resolver 需要定义怎样获取特定的数据。
这样,你就定义了你的 GraphQL 服务器。
启动服务器
在代码编写完之后,让我们来启动服务器将我们的配置和模式实例化,并让服务器监听给定端口:
createServer({ sbot }).then(({ app }) => { app.listen(4000, err => { if (err) return console.error(err) console.log(`Server is listening on port 4000`) }) })
使用
现在,我们可以使用 GraphQL 客户端来访问 GraphQL API。
查询
下面是如何使用查询函数检索一条信息:
-- -------------------- ---- ------- ----- ------- - ----------- ------------- - ------ ------- --------- -------- -------- - -
这将返回与 id
属性为“abcd123456”匹配的信息。注意:选择的属性必须在类型定义中声明。
变更
现在,让我们创建一个新的信息:
mutation PublishPost { publishPost(content: "Hello World!") { id } }
这将发布新的信息并返回其 ID。
结论
在这篇文章中,我们学习了如何使用 ssb-replication-graphql 包实现基础数据同步,包括:
- 创建并启动一个 SSB 实例
- 定义 GraphQL Schema
- 用 ApolloServer 将 GraphQL Schema 转化为服务器
- 查询和变更,从客户端使用
- 启动服务器,使 GraphQL API 可供使用
使用 ssb-replication-graphql 包可以方便地实现 SSB 节点间数据同步,让我们更专注于业务逻辑。希望这篇文章能够为你提供有价值的指导。
示例代码
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/600672e40520b171f02e1dab