Skip to content

jackie1in/graphql-grpc-exmaple

Repository files navigation

目录说明

├── README.md readme
├── asset readme资源文件
├── docker-compose.yaml docker-compose配置文件
├── graphql-api nodjs graphql网关
├── graphql-gateway-java java graphql网关
├── post-api-java post后端服务
├── protos protos文件
├── schema graphql文件
└── vue-apollo-sample 前端vue程序

运行环境

基础环境 版本
node 10.16.0
python(node-gyp依赖python,用于编译node项目) 3.7
jdk(开发,生产使用jre) 1.8.0_211
gradle 4.8.1

docker/docker-compose启动

版本(docker/docker-compose)

版本

下载

git clone https://github.com/silencecorner/graphql-grpc-exmaple.git

编译

docker-compose build

运行

docker-compose up -d

只postgres用学习调试

docker-compose up -d postgres

访问地址

docker-compose启动

java网关

nodejs网关

本地启动

java网关

nodejs网关

停止删除镜像

停止

docker-compose down

停止删除镜像

docker-compose down --rmi all

说明

docker版本

docker最低版本为17.05.0-ce才支持stage构建

lombok idea配置

lombok idea配置

pb依赖文件生成

当clone下来是发现未找到grpc接口、类的定义,不要慌,build一下就可以啦!

linux/mac下

./gradlew build -x test

windows下

gradlew.bat build -x test

依赖问题

因为一些原因项目依赖未下载完成,导致一堆红色报错,这是需要去重新拉去依赖可以执行以下命令

linux/mac下

./gradlew build --refresh-dependencies -x test

windows下

gradlew.bat build --refresh-dependencies -x test

npm配置

https://segmentfault.com/a/1190000016090267?utm_source=tag-newest

原demo

https://medium.com/@svengau_17540/when-graphql-meets-grpc-3e9729d32e05

proto-loader

https://github.com/grpc/grpc-node/tree/master/packages/proto-loader
https://github.com/protobufjs/protobuf.js

apoll-sever

https://www.apollographql.com/docs/apollo-server/

grphql-api

修改为yarn运行,yarn可以静态安装依赖,避免网络请求依赖下载不下来

安装依赖

yarn run install:offline

运行dev

yarn run dev

graphql操作

mutation {
  addAuthor(
    request: { name: "海哥" }
  ) {
    id
    name
  }
}
mutation {
  addPost(
    request: { title: "第一个例子", body: "这是个我们网关的第一个例子" }
  ) {
    id
    title
    body
    createdAt
    author{
      id
      name
    }
  }
}

query{
  getAuthor(request:{id: 1}){
    id
    name
    posts(request:{page: 1,limit: 10}){
      page
      count
      limit
      nodes{
        id
        title
        body
        createdAt
      }
    }
  }
}
mutation{
	updatePost(request: {id: 1,body: "44441111"}){
    id
    title
     body
    createdAt
  }
}
query {
  posts: listPosts(request: { page: 1, limit: 20 }) {
    page
    limit
    count
    nodes: nodes {
      id
      title
      body
      createdAt
      author {
        id
        name
      }
    }
  }
}

proto文件管理

注意事项

  • proto文件名规范

本身编译时是支持文件名相同,只要的package不同就行,但是会觉得很怪,使用gradle插件编译的时候会出bug

问题修复

新特性

使用protoc-gen-validate做参数校验

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy