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 ... 
随机推荐
- JAVA构建高并发商城秒杀系统——架构分析
			面试场景 我们打算组织一个并发一万人的秒杀活动,1元秒杀100个二手元牙刷,你给我说说解决方案. 秒杀/抢购业务场景 商品秒杀.商品抢购.群红包.抢优惠劵.抽奖....... 秒杀/抢购业务特点 秒杀 ... 
- Broken pipe错误原因
			这个异常是由于以下几个原因造成. 1.客户端再发起请求后没有等服务器端相应完,点击了stop按钮,导致服务器端接收到取消请求. 通常情况下是不会有这么无聊的用户,出现这种情况可能是由于用户提交了 ... 
- bzoj1619 / P2919 [USACO08NOV]守护农场Guarding the Farm
			P2919 [USACO08NOV]守护农场Guarding the Farm 相似题:P3456 [POI2007]GRZ-Ridges and Valleys 按海拔是否相同分块 每次bfs海拔相 ... 
- 一个Golang例子:for + goroutine + channel
			Rob Pike 在 Google I/O 2012 - Go Concurrency Patterns 里演示了一个例子(daisy chain). 视频地址:https://www.youtube ... 
- UVa 10054 项链(欧拉回路)
			https://vjudge.net/problem/UVA-10054 题意:有一种由彩色珠子连接成的项链.每个珠子的两半由不同颜色组成.相邻两个珠子在接触的地方颜色相同.现在有一些零碎的珠子,需要 ... 
- Linux的硬链接和软链接
			1.Linux链接概念Linux链接分两种,一种被称为硬链接(Hard Link),另一种被称为符号链接(Symbolic Link), 也就是软链接.默认情况下,ln命令产生硬链接. [硬连接]硬连 ... 
- 农历03__ZC
			代码,改自 农历01(http://www.cnblogs.com/cppskill/p/5930558.html) 1.main.cpp #include "Lunar_ZC.h" ... 
- Java中的注解基础
			一.元注解 元注解的作用就是负责注解其他注解. 1.@Target @Target用来指明注解所修饰的目标,包括packages.types(类.接口.枚举.Annotation类型).类型成员(方法 ... 
- PHP-----------HTTP请求的第三方接口
			开发中常常遇到接口请求这个功能,后台也不例外,因为遇到了,所以写一篇. 前段时间做商城后台时,需要用到第三方物流接口查询物流信息. post: /**** * @param $url * @param ... 
- ubuntu下修改matlab R2016b的快捷键为windows下相同
			选为: windows默认类. 
