# EasyGQL

EasyGQL(Easy GraphQL)[github网址:https://easygql.github.io/doc/]是由[Zukdoor][https://zukdoor.cloud]于2020年2月份推出的一款多数据库支持的实时GraphQL 引擎。能够让开发者非常方便的进行GraphQL类型定义,并能够为开发者灵活的提供各种类型的graphql接口. EasyGQL架构

  • 前端开发人员使用EasyGQL控制台,创建、维护和管理GraphQL Schema信息。
  • EasyGQL引擎根据定义好的Schema信息,提供可供前端开发人员直接使用的满足GraphQL规范的数据接口。
  • 系统用户通过网页直接访问EasyGQL提供的数据接口,完成业务请求。

用户可以通过使用已经在docker hub发布的EasyGQL镜像,快速使用了及了解EasyGQL的使用。

# 快速部署

第一步:获取docker-compose文件

从以下路径获取EasyGQL的docker-compose文件

# in a new directory
wget https://raw.githubusercontent.com/easygql/easygql-engine/master/docker-compose.yml

# 第二步:启动EasyGQL和PostgreSQL

$ docker-compose up -d

检查一下容器正在运行:

$ docker ps
13d6e5cb0a6f        easygql_engine      "java -Djava.securit…"   2 weeks ago         Up 2 seconds        0.0.0.0:9995->9995/tcp   easygql_engine
e2c3081210f2        postgres            "docker-entrypoint.s…"   2 weeks ago         Up 24 hours         0.0.0.0:5432->5432/tcp   easygql_postgresql

# 第三步:打开EasyGQL控制台

在浏览器中输入http://http://127.0.0.1:9995/dataexplorer/schemadb,进入graphiql界面,进行API调试 new_chatdemo

# 第四步:创建聊天室

# 4.1 创建一个Schema

使用API "SchemaCreate"进行Schema的创建,第一个参数name为schema名字,databaseKind默认值为PostgreSQL,description为schema的描述性文字。

mutation  {
 SchemaCreate(name:"testcase1",databasekind:PostgreSQL,description:"testcase2"){
   id_list
   affected_rows
 }
}

返回值如下:

{
  "data": {
    "SchemaCreate": {
      "id_list": [
        "5ead209e857aba000157d91f"
      ],
      "affected_rows": 1
    }
  }
}

# 4.2 添加对象

使用API "objecttypesInSchema_ObjectInput" 具体API含义见第六章对象类型。在这个API中,from_id表示Schema的ID,to_object为往schema中增加的对象类型列表。该API实现向已经创建好的Schema中新增一组对象类型。 创建一个对象类型,必须字段有:

  • name表示对象类型的名字
  • description表示对象类型的描述性文字
mutation  {
  objecttypesInSchema_ObjectInput(from_id:"5ead209e857aba000157d91f",to_object:[
  {
   name:"message",
   description:" message information"
  }
  ]){
   inputNestIDList  
}
}

返回值如下:

{
  "data": {
    "objecttypesInSchema_ObjectInput": {
      "inputNestIDList": [
        "5e76ca2c158b0124a8ff7fe8"
      ]
    }
  }
}

调用该API后,返回1个ID,对应message这个对象的ID

# 4.3 为对象添加字段

使用scalarfieldsInContentType_ObjectInput为对象类型添加标量字段的API,其中from_id为对象类型的ID,to_object为新增字段的数组。 新增一个标量字段有以下参数:

  • name为标量字段的字段名,必填
  • type为标量字段的字段类型,EasyGQL支持的标量类型见第三章标量类型。
  • description为标量字段的描述性文字。 为聊天记录添加字段:
mutation  {
  scalarfieldsInContentType_ObjectInput(from_id:"5e76ca2c158b0124a8ff7fe9",to_object:[
    { 
      name:"content",
      type:String,
      description:"content"  
    },
    {
      
      name:"from",
      type:ID  ,
      description:" room information"
    },
        {
      
      name:"timeinfo",
      type:String  ,
      description:"timeinfo"
    }
  ]){
    inputNestIDList
  }
}

返回值如下:

{
  "data": {
    "scalarfieldsInContentType_ObjectInput": {
      "inputNestIDList": [
        "5e76ca2c158b0124a8ff7ff2",
        "5e76ca2c158b0124a8ff7ff3",
        "5e76ca2c158b0124a8ff7ff4"
      ]
    }
  }
}

从返回值可以看到content、from、timeinfo的ID分别为"5e76ca2c158b0124a8ff7ff2"、"5e76ca2c158b0124a8ff7ff3"、"5e76ca2c158b0124a8ff7ff4"。

# 4.4 发布并启动Schema

Schema得发布并启动才能正式对外提供服务,SchemaPublish这个接口默认会将当前最新的Schema信息发布成GraphQL接口并启动Schema。

mutation {
  SchemaPublish(schemaid:"5ead209e857aba000157d91f") {
    OperationResult
  }
}

返回值如下:

{
  "data": {
    "SchemaPublish": {
      "OperationResult": "true"
    }
  }
}

OperationResult表示发布并启动结果。

# 4.5 编写前端聊天室内程序

具体代码见:github网址

# 4.6 测试

在工程代码下,输入

npm run serve

打开浏览器,输入网址:

http://localhost:8080/

在界面上输入用户名,进入聊天室 可以查看历史聊天记录,并与他人交互 聊天图片1 ![聊天图片2](/doc/img/chat_screenshot .png)