gqlgen golang 的graphql server

具体代码参考https://github.com/rongfengliang/gqlgen-demo

特点

  • 模型优先
  • 类型安全
  • 代码生成

安装

go get -u github.com/vektah/gqlgen

创建schema

schema.graphql

type Todo {
id: ID!
text: String!
done: Boolean!
user: User!
} type User {
id: ID!
name: String!
} type Query {
todos: [Todo!]!
} input NewTodo {
text: String!
userId: String!
} type Mutation {
createTodo(input: NewTodo!): Todo!
}

创建model

  • User (model/user.go)
package model

// User user info
type User struct {
ID string
Name string
}
  • Todo (model/todo.go)
package model

// Todo todo ino
type Todo struct {
ID string
Text string
Done bool
UserID string
}

生成graphql 运行时代码

  • 配置模型关联

    gqlgen.yml

schema: schema.graphql
exec:
filename: graph/generated.go
model:
filename: model/generated.go models:
Todo:
model: github.com/rongfengliang/gqlgen-app/model.Todo
User:
model: github.com/rongfengliang/gqlgen-app/model.User
  • 生成bingings
gqlgen

  • 编写 resolver

    graph/graph.go

package graph

import (
"context"
"fmt"
"math/rand" model "github.com/rongfengliang/gqlgen-app/model"
) type App struct {
todos []model.Todo
} func (a *App) Mutation() MutationResolver {
return &mutationResolver{a}
} func (a *App) Query() QueryResolver {
return &queryResolver{a}
} func (a *App) Todo() TodoResolver {
return &todoResolver{a}
} type queryResolver struct{ *App } func (a *queryResolver) Todos(ctx context.Context) ([]model.Todo, error) {
return a.todos, nil
} type mutationResolver struct{ *App } func (a *mutationResolver) CreateTodo(ctx context.Context, input model.NewTodo) (model.Todo, error) {
todo := model.Todo{
Text: input.Text,
ID: fmt.Sprintf("T%d", rand.Int()),
UserID: input.UserId,
}
a.todos = append(a.todos, todo)
return todo, nil
} type todoResolver struct{ *App } func (a *todoResolver) User(ctx context.Context, it *model.Todo) (model.User, error) {
return model.User{ID: it.UserID, Name: "user " + it.UserID}, nil
}

入口代码编写

  • main.go
package main

import (
"fmt"
"log"
"net/http" "github.com/rongfengliang/gqlgen-app/graph"
"github.com/vektah/gqlgen/handler"
) func main() {
http.Handle("/", handler.Playground("Todo", "/query"))
http.Handle("/query", handler.GraphQL(graph.NewExecutableSchema(&graph.App{}))) fmt.Println("Listening on :8080")
log.Fatal(http.ListenAndServe(":8080", nil))
}

运行

go run main.go

效果


集成dep

dep init 

参考资料

https://gqlgen.com/getting-started/
https://github.com/vektah/gqlgen
https://github.com/rongfengliang/gqlgen-demo

 
 
 
 

gqlgen golang graphql server 基本试用的更多相关文章

  1. hasura graphql server event trigger 试用

    hasura graphql server 是一个很不错的graphql 引擎,当前版本已经支持event triiger 了 使用此功能我们可以方便的集成webhook功能,实现灵活,稳定,快捷的消 ...

  2. hasura graphql server 集成gatsby

    hasura graphql server 社区基于gatsby-source-graphql 开发了gatsby-postgres-graphql 插件, 可以快速的开发丰富的网站 基本使用 安装h ...

  3. grandstack graphql 工具基本试用

      grandstack 是一个方便graphql 应用开发的工具 使用docker-compose 运行 环境准备 官方的starter 比较好,已经是使用docker-compose 创建好了所有 ...

  4. golang http server分析(一)

    http:http请求过程实质上是一个tcp连接通信,具体通过socket接口编码实现 在go中是通过listenAndServer()方法对外提供了一个http服务,在该方法中完成了socket的通 ...

  5. graphql-modules 企业级别的graphql server 工具

    graphql-modules 是一个新开源的graphql 工具,是基于apollo server 2.0 的扩展库,该团队 认为开发应该是模块化的. 几张来自官方团队的架构图可以参考,方便比较 a ...

  6. Golang Http Server源码阅读

    建议看这篇文章前先看一下net/http文档 http://golang.org/pkg/net/http/ net.http包里面有很多文件,都是和http协议相关的,比如设置cookie,head ...

  7. golang作为server向android提供数据服务

    中间交换的数据是json ,后台数据库服务器是sqlserver2012 android通过post或者get方式访问 如get方式http://192.168.255.13:7080/tblFile ...

  8. windows openssh server 安装试用

    使用Windows的可能会知道win10 的已经包好了openssh 服务,但是对于其他机器win 7 windows 2008 ,就需要其他的方法了 还好powershell 团队开发了支持wind ...

  9. hasura graphql server 集成gitlab

    默认官方是提供了gitlab 集成的demo的,但是因为gitlab 一些版本的问题, 跑起来总有问题,所以查找相关资料测试了一个可以运行的版本 项目使用docker-compose 运行 参考 ht ...

随机推荐

  1. python面向对象编程基础

    演示了 Python 类与对象的编程基础, 包括属性.方法.继承.组合.动态创建类. python 版本: 2.7.5 class SimpleClass(object): ''' a simple ...

  2. kafka环境安装

    源码包下载: http://archive.apache.org/dist/kafka/1.0.0/ 集群环境: master 192.168.1.99 slave1 192.168.1.100 sl ...

  3. Java基础学习笔记(一)

    Java基础学习笔记(一) Hello World 基础代码学习 代码编写基础结构 class :类,一个类即一个java代码,形成一个class文件,写于每个代码的前端(注意无大写字母) XxxYy ...

  4. 如何在 OSX 中使用多个JDK版本

    升级macbook小白的硬盘成SSD后,重新安装了系统和JDK8,但是启动eclipse还是报告需要安装JDK6,于是也按照提示安装了Apple JDK6,这导致系统中有两个JDK,一个是Oracle ...

  5. Bzoj1101: [POI2007]Zap 莫比乌斯反演+整除分块

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1101 莫比乌斯反演 1101: [POI2007]Zap 设 \(f(i)\) 表示 \(( ...

  6. Python学习札记(三十三) 面向对象编程 Object Oriented Program 4

    参考:继承和多态 NOTE 著名的开闭原则: 对扩展开放:允许新增Animal子类: 对修改封闭:不需要修改依赖Animal类型的Animal_func()等函数. 1.eg. #!/usr/bin/ ...

  7. python函数返回局部变量,局部&全局变量同名问题

    其实关于返回局部变量不只是python的问题,凡是使用堆栈结构处理函数的语言都会有这样的问题,切记不要返回局部变量.因为当创建函数的堆栈撤销,所有对局部变量的修改都灰飞烟灭.来看我的小例子 def h ...

  8. BZOJ4811 [Ynoi2017]由乃的OJ

    本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000 作者博客:http://www.cnblogs.com/ljh2000-jump/ ...

  9. zookeeper和Eureka对CAP理论的支持

    著名的CAP理论指出,一个分布式系统不可能同时满足C(一致性).A(可用性)和P(分区容错性).由于分区容错性在是分布式系统中必须要保证的,因此我们只能在A和C之间进行权衡.在此Zookeeper保证 ...

  10. [原]visual studio 将(无扩展名)文件以某种(C++)方式阅读(映射)

    工具 选项 文本编辑器 文件扩展名 选择“将无扩展····”后面设置一下就可以