当前位置: 首页 > news >正文

grandstack graphql 工具基本试用

 

grandstack 是一个方便graphql 应用开发的工具

使用docker-compose 运行

环境准备

官方的starter 比较好,已经是使用docker-compose 创建好了所有的依赖,但是目前使用的版本镜像有bug,我修改了版本,可以运行
参考github 项目 https://github.com/rongfengliang/grand-stack-starter

  • clone starter
git clone https://github.com/grand-stack/grand-stack-starter.git
  • docker-compose 文件
version: '3'
services:
  neo4j:
    build: ./neo4j
    ports:
      - 7474:7474
      - 7687:7687
    environment:
      - NEO4J_dbms_security_procedures_unrestricted=apoc.*
      - NEO4J_apoc_import_file_enabled=true
      - NEO4J_apoc_export_file_enabled=true
      - NEO4J_dbms_shell_enabled=true
  api:
    build: ./api
    ports:
      - 4000:4000
    links:
    - neo4j
    depends_on:
    - neo4j
  ui:
    build: ./ui
    ports:
      - 3000:3000
    links:
    - api
    depends_on:
    - api

starter 说明

因为grandstack 数据存储服务、查询服务使用的核心是neo4j 所以需要启动ne4j

  • neo4j server
docker 配置比较简单,主要是插件添加以及一些简单的参数配置
Dockerfile
FROM neo4j:3.4.5

ENV NEO4J_AUTH=neo4j/letmein

ENV APOC_VERSION 3.4.0.2
ENV APOC_URI https://github.com/neo4j-contrib/neo4j-apoc-procedures/releases/download/${APOC_VERSION}/apoc-${APOC_VERSION}-all.jar
RUN wget -P /var/lib/neo4j/plugins ${APOC_URI}

ENV GRAPHQL_VERSION 3.4.0.1
ENV GRAPHQL_URI https://github.com/neo4j-graphql/neo4j-graphql/releases/download/${GRAPHQL_VERSION}/neo4j-graphql-${GRAPHQL_VERSION}.jar
RUN wget -P /var/lib/neo4j/plugins ${GRAPHQL_URI}

EXPOSE 7474 7473 7687

CMD ["neo4j"]

启动配置
  neo4j:
    build: ./neo4j
    ports:
      - 7474:7474
      - 7687:7687
    environment:
      - NEO4J_dbms_security_procedures_unrestricted=apoc.*
      - NEO4J_apoc_import_file_enabled=true
      - NEO4J_apoc_export_file_enabled=true
      - NEO4J_dbms_shell_enabled=true
  • api server 配置
定义graphql api 的schema 以及使用ne4j 进行graphql 查询的转换
简单schenma,集成了neo4j 指令

type User {
  id: ID!
  name: String
  friends: [User] @relation(name: "FRIENDS", direction: "BOTH")
  reviews: [Review] @relation(name: "WROTE", direction: "OUT")
  avgStars: Float @cypher(statement: "MATCH (this)-[:WROTE]->(r:Review) RETURN toFloat(avg(r.stars))")
  numReviews: Int @cypher(statement: "MATCH (this)-[:WROTE]->(r:Review) RETURN COUNT(r)")
}
查询指令解析配置,很传统,比较简单
import { neo4jgraphql } from "neo4j-graphql-js";
import fs from 'fs';
import path from 'path';
export const typeDefs = 
  fs.readFileSync(process.env.GRAPHQL_SCHEMA || path.join(__dirname, "schema.graphql"))
    .toString('utf-8');

export const resolvers = {
  Query: {
    usersBySubstring: neo4jgraphql // resovler for neo4j
  }
};

graphql server 启动

import { typeDefs, resolvers } from "./graphql-schema";
import { ApolloServer, gql, makeExecutableSchema } from "apollo-server";
import { v1 as neo4j } from "neo4j-driver";
import { augmentSchema } from "neo4j-graphql-js";
import dotenv from "dotenv";

dotenv.config();

const schema = makeExecutableSchema({
  typeDefs,
  resolvers
});

// augmentSchema will add autogenerated mutations based on types in schema
const augmentedSchema = augmentSchema(schema);

const driver = neo4j.driver(
  process.env.NEO4J_URI || "bolt://localhost:7687",
  neo4j.auth.basic(
    process.env.NEO4J_USER || "neo4j",
    process.env.NEO4J_PASSWORD || "neo4j"
  )
);

const server = new ApolloServer({
  // using augmentedSchema (executable GraphQLSchemaObject) instead of typeDefs and resolvers
  //typeDefs,
  //resolvers,
  context: { driver },
  // remove schema and uncomment typeDefs and resolvers above to use original (unaugmented) schema
  schema: augmentedSchema
});

server.listen(process.env.GRAPHQL_LISTEN_PORT, '0.0.0.0').then(({ url }) => {
  console.log(`GraphQL API ready at ${url}`);
});
  • UI

    基于react 的,也比较简单,就是集成graphql api

项目使用的react 脚手架生成的,主要是apollo-boost react-apollo的集成使用,同时项目使用了pwa
技术,还是挺好的参考
UI/src/UserList.js 比较重要,包含了数据查询的使用,主要是apollo client 的使用

运行&&测试

  • 启动服务
docker-compose  build
docker-compose up -d
  • 访问测试
graphql api 地址
http://hostip:4000


添加数据

  • neo4j 数据

  • ui

说明

总的来说集成neo4j 是很不错,因为graphql 做的就是graph 查询,neo4j 就是干这个的,但是从实际来说neo4j 并不是免费的(单机是,集群不是)
同时类似的一些图数据库已经直接集成了graphql 了比如dgraph 、startdog

参考资料

https://grandstack.io/docs/getting-started-grand-stack-starter.html
https://github.com/grand-stack/grand-stack-starter.git
https://github.com/rongfengliang/grand-stack-starter

 
 
 
 

相关文章:

  • wamp配置多域名虚拟目录
  • html的进一步了解(更新中···)
  • 在Win7上安装MySql5.2遇到Write configuration file的解决
  • ScheduledThreadPoolExecutor
  • [十七]JavaIO之CharArrayReader 和 CharArrayWriter
  • 域账号加到本机管理员组和本机Power Users组
  • vue router跳转方法
  • weblogic修改应用服务器启动密码
  • 嵌入式开发常用的一些命令
  • 数据结构 - 树
  • 別再把沒時間學習當藉口
  • Python学习笔记(2)——第一个Python程序
  • Asp.net下C#调用Word功能的实例与总结
  • 利用的Google的vision library实现人脸检测功能
  • C语言读写伯克利DB 3
  • 《微软的软件测试之道》成书始末、出版宣告、补充致谢名单及相关信息
  • 【391天】每日项目总结系列128(2018.03.03)
  • JavaScript标准库系列——Math对象和Date对象(二)
  • Javascript基础之Array数组API
  • Linux中的硬链接与软链接
  • niucms就是以城市为分割单位,在上面 小区/乡村/同城论坛+58+团购
  • node 版本过低
  • PAT A1017 优先队列
  • Python打包系统简单入门
  • vue2.0开发聊天程序(四) 完整体验一次Vue开发(下)
  • 阿里云应用高可用服务公测发布
  • 分类模型——Logistics Regression
  • 收藏好这篇,别再只说“数据劫持”了
  • 我的业余项目总结
  • 详解移动APP与web APP的区别
  • 最近的计划
  • ​【已解决】npm install​卡主不动的情况
  • ​MySQL主从复制一致性检测
  • ​软考-高级-信息系统项目管理师教程 第四版【第14章-项目沟通管理-思维导图】​
  • #162 (Div. 2)
  • (Ruby)Ubuntu12.04安装Rails环境
  • (多级缓存)多级缓存
  • (附源码)ssm高校志愿者服务系统 毕业设计 011648
  • (含react-draggable库以及相关BUG如何解决)固定在左上方某盒子内(如按钮)添加可拖动功能,使用react hook语法实现
  • (一)UDP基本编程步骤
  • .bat批处理(九):替换带有等号=的字符串的子串
  • .mysql secret在哪_MYSQL基本操作(上)
  • .NET Core实战项目之CMS 第十二章 开发篇-Dapper封装CURD及仓储代码生成器实现
  • .Net Winform开发笔记(一)
  • .NET开发人员必知的八个网站
  • .NET设计模式(8):适配器模式(Adapter Pattern)
  • .NET正则基础之——正则委托
  • .net之微信企业号开发(一) 所使用的环境与工具以及准备工作
  • @ConfigurationProperties注解对数据的自动封装
  • @开发者,一文搞懂什么是 C# 计时器!
  • [ IOS ] iOS-控制器View的创建和生命周期
  • [C#]winform制作仪表盘好用的表盘控件和使用方法
  • [daily][archlinux][game] 几个linux下还不错的游戏
  • [ffmpeg] av_opt_set 解析
  • [GN] DP学习笔记板子