1.添加graphiql客户端去项目

Graphiql是一个交互式GraphQL浏览器客户端。
要在go项目中使用它,您需要添加一个具有多个依赖项的html页面。
如果您需要最新版本,它将有助于安装节点和软件包。 该项目将大大发展。 有一个选项可以将HTML收集到一个go文件中,并在启动时使用cdn提取依赖项。
我的go-graphiql版本。
要工作,您只需添加:
http.HandleFunc("/cli", graphiql.ServeGraphiQL)
结果是:

2.让我们来看看API在浏览器方面的工作方式
在浏览器中,打开开发人员控制台并添加js代码:
let q=`{getMessage}` let v={} let options = (query, variables={}) =>{ return { method: 'POST', headers: { Accept: 'application/json', 'Content-Type': 'application/json', }, body: JSON.stringify({ query, variables }), } }; let o = options(q, v) console.log(o) fetch("http://localhost:9000/graphql",o) .then(response=>response.json()) .then(console.log)
执行结果:

API中存在错误。 有必要更改消息的文本。
q=`mutation { setMessage(msg: "Hello Habr") } ` v={} o = options(q, v) console.log(o) fetch("http://localhost:9000/graphql",o) .then(response=>response.json()) .then(console.log)
执行结果:

3.让我们从服务器的角度来看它的工作方式。
工作流程由对象描述:
schema, err := graphql.NewSchema(graphql.SchemaConfig{ Query: types.RootQuery, Mutation: types.RootMutation, })
询问
资料检索
var RootQuery = graphql.NewObject(graphql.ObjectConfig{ Name: "RootQuery", Fields: graphql.Fields{ "getMessage": &graphql.Field{ Type: graphql.String, Resolve: func(p graphql.ResolveParams) (interface{}, error) { msg := logic.GetMessage() return msg, nil }, }, }, })
解析功能为我们获取数据。 数据可以从数据库到微控制器的任何来源
变异
数据突变
var RootMutation = graphql.NewObject(graphql.ObjectConfig{ Name: "RootMutation", Fields: graphql.Fields{ "setMessage": &graphql.Field{ Type: graphql.String, Args: graphql.FieldConfigArgument{ "msg": &graphql.ArgumentConfig{Type: graphql.NewNonNull(graphql.String)}, }, Resolve: func(p graphql.ResolveParams) (interface{}, error) { msg := p.Args["msg"].(string) logic.SetMessage(msg) return msg, nil }, }, }, })
使用“解析”功能还可以编辑数据。
解决还可以创建光事件或调整温度。
有趣的一点是,返回数据的类型也可以具有graphql.Fields,它们也将具有自己的Resolve函数。
4.输入语言?
数据交换有一些限制(功能)。
在运行中,变量具有默认值
Int为0,字符串=“”
在graphql中,可能存在未设置变量的情况。
因此,对于此类参数,我们使用指向变量的链接
继续,
我将写出如何使graphql api进入Open Data Registry。
因为程序员是地球上最懒惰的人。 我们将使用API,以便减少工作量。
待办事项:
API入门套件
图式
有一个有趣的项目可以为文本创建方案。
func main() { s := ` schema { query: Query } type Query { hello: String! } ` schema := graphql.MustParseSchema(s, &query{}) http.Handle("/query", &relay.Handler{Schema: schema}) log.Fatal(http.ListenAndServe(":8080", nil)) }
github.com/graph-gophers/graphql-go
解决
我将按结构为字段生成一个生成器
询问
没有弄清楚如何使用生成器构建查询
等待建议。