1. Tambahkan klien graphiql ke proyek

Graphiql adalah klien browser GraphQL interaktif.
Untuk menggunakannya dalam proyek go, Anda perlu menambahkan halaman html dengan beberapa dependensi.
Jika Anda perlu memiliki versi terbaru, itu akan membantu untuk menginstal node dan paket. Proyek ini akan berkembang pesat. Ada opsi untuk mengumpulkan HTML menjadi satu file go dan menarik dependensi dengan cdn saat startup.
Versi go-graphiql saya .
Agar berfungsi, Anda hanya perlu menambahkan:
http.HandleFunc("/cli", graphiql.ServeGraphiQL)
Hasilnya adalah:

2. Mari kita lihat bagaimana API bekerja dalam hal browser
Di browser, buka konsol pengembang dan tambahkan kode 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)
Hasil Eksekusi:

Ada kesalahan di API. Anda perlu mengubah teks pesan.
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)
Hasil Eksekusi:

3. Mari kita lihat cara kerjanya dari sudut pandang server.
Alur kerja dijelaskan oleh objek:
schema, err := graphql.NewSchema(graphql.SchemaConfig{ Query: types.RootQuery, Mutation: types.RootMutation, })
Pertanyaan
Pengambilan data
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 }, }, }, })
Fungsi Selesaikan mendapatkan data untuk kami. Data dapat dari sumber apa saja dari Database ke pengontrol mikro
Mutasi
Mutasi data
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 }, }, }, })
Mengedit data juga terjadi menggunakan fungsi Putuskan.
Menyelesaikan juga dapat membuat acara ringan atau mengatur suhu.
Suatu hal yang menarik adalah bahwa jenis data yang dikembalikan juga dapat memiliki graphql. Hasil yang juga akan memiliki fungsi Selesaikan sendiri.
4. Bahasa yang diketik?
Ada beberapa batasan (fitur) pertukaran data.
Dalam perjalanannya, variabel memiliki nilai default
Int adalah 0, String = ""
Dalam graphql, mungkin ada situasi ketika variabel tidak disetel.
Oleh karena itu, untuk parameter seperti itu kami menggunakan tautan ke variabel
Dalam kelanjutan,
Saya akan menulis cara membuat graphql api ke Open Data Registry.
Karena programmer adalah orang yang paling malas di planet ini. Kami akan melakukan API sehingga kami melakukan sesuatu yang kurang.
TODO:
Kit starter api
skema
Ada proyek menarik yang membuat skema untuk teks.
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
resolusi
Saya akan membuat generator untuk bidang berdasarkan struktur
permintaan
tidak tahu cara membuat kueri dengan generator
Menunggu saran.