gqlgen golang graphql server 基本试用
gqlgen golang 的graphql server
特点
- 模型优先
- 类型安全
- 代码生成
安装
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 基本试用的更多相关文章
- hasura graphql server event trigger 试用
hasura graphql server 是一个很不错的graphql 引擎,当前版本已经支持event triiger 了 使用此功能我们可以方便的集成webhook功能,实现灵活,稳定,快捷的消 ...
- hasura graphql server 集成gatsby
hasura graphql server 社区基于gatsby-source-graphql 开发了gatsby-postgres-graphql 插件, 可以快速的开发丰富的网站 基本使用 安装h ...
- grandstack graphql 工具基本试用
grandstack 是一个方便graphql 应用开发的工具 使用docker-compose 运行 环境准备 官方的starter 比较好,已经是使用docker-compose 创建好了所有 ...
- golang http server分析(一)
http:http请求过程实质上是一个tcp连接通信,具体通过socket接口编码实现 在go中是通过listenAndServer()方法对外提供了一个http服务,在该方法中完成了socket的通 ...
- graphql-modules 企业级别的graphql server 工具
graphql-modules 是一个新开源的graphql 工具,是基于apollo server 2.0 的扩展库,该团队 认为开发应该是模块化的. 几张来自官方团队的架构图可以参考,方便比较 a ...
- Golang Http Server源码阅读
建议看这篇文章前先看一下net/http文档 http://golang.org/pkg/net/http/ net.http包里面有很多文件,都是和http协议相关的,比如设置cookie,head ...
- golang作为server向android提供数据服务
中间交换的数据是json ,后台数据库服务器是sqlserver2012 android通过post或者get方式访问 如get方式http://192.168.255.13:7080/tblFile ...
- windows openssh server 安装试用
使用Windows的可能会知道win10 的已经包好了openssh 服务,但是对于其他机器win 7 windows 2008 ,就需要其他的方法了 还好powershell 团队开发了支持wind ...
- hasura graphql server 集成gitlab
默认官方是提供了gitlab 集成的demo的,但是因为gitlab 一些版本的问题, 跑起来总有问题,所以查找相关资料测试了一个可以运行的版本 项目使用docker-compose 运行 参考 ht ...
随机推荐
- uwsgi手动安装时报错ValueError: invalid literal for int() with base 10: '32_1'
安装uwsgi,安装步骤如下 wget https://projects.unbit.it/downloads/uwsgi-latest.tar.gz tar zxvf uwsgi-latest.ta ...
- 理解Linux系统中的load average(图文版)
本文转自:http://heipark.iteye.com/blog/1340384 一.什么是load average? linux系统中的Load对当前CPU工作量的度量 (WikiPedia: ...
- springcloud18---springCloudConfig
package com.itmuch.cloud; import org.springframework.beans.factory.annotation.Value; import org.spri ...
- Ecplise项目转移到Android Studio,以及Genymotion模拟器介绍
一.移植android项目 今天简单分享一个从ecplise开发项目转移到Android Studio的方法,之前一直在ecplise上开发android项目,但是因为google现在主打Androi ...
- 【Java----字符串转义与反转义】
apache工具包common-lang中有一个很有用的处理字符串的工具类,其中之一就是StringEscapeUtils,这个工具类是在2.3版本以上加上的去的,利用它能很方便的进行html,xml ...
- BZOJ3944: Sum(杜教筛模板)
BZOJ3944: Sum(杜教筛模板) 题面描述 传送门 题目分析 求\(\sum_{i=1}^{n}\mu(i)\)和\(\sum_{i=1}^{n}\varphi(i)\) 数据范围线性不可做. ...
- calcite介绍
前言 calcite是一个可以将任意数据查询转换成基于sql查询的引擎,引擎特性也有很多,比如支持sql树的解析,udf的扩展,sql执行优化器的扩展等等.目前已经被很多顶级apache项目引用,比如 ...
- JDK 1.8 ConcurrentHashMap 源码剖析
转载两篇不错的文章: 第一篇: 前言 HashMap是我们平时开发过程中用的比较多的集合,但它是非线程安全的,在涉及到多线程并发的情况,进行put操作有可能会引起死循环,导致CPU利用率接近100%. ...
- Java发送带html标签内容的邮件
package test; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeMessage; im ...
- IE8 JSON is not defined
问题原因: 昨天遇到了一个问题.就是用ajax从后台查询数据时,返回信息无法显示,经过提示发现是IE控制台提示: JSON is not defined 错误. 而且这个问题在本人自己的电脑上是不存在 ...