进行GraphQL API

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


解决

我将按结构为字段生成一个生成器


询问

没有弄清楚如何使用生成器构建查询


等待建议。

Source: https://habr.com/ru/post/zh-CN449286/


All Articles