рдЬрд╛рдУ рдЧреНрд░рд╛рдлрдХреЙрд▓ рдПрдкреАрдЖрдИ рдкрд░ рдЬрд╛рдПрдВ

1. рдкрд░рд┐рдпреЛрдЬрдирд╛ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЧреНрд░рд╛рдлрд┐рдХрд▓ рдХреНрд▓рд╛рдЗрдВрдЯ рдЬреЛрдбрд╝реЗрдВ



Graphiql рдПрдХ рдЗрдВрдЯрд░реЗрдХреНрдЯрд┐рд╡ рдЧреНрд░рд╛рдлрдХреЙрд▓ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреНрд▓рд╛рдЗрдВрдЯ рд╣реИред


рдЗрд╕реЗ рдЧреЛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдХрдИ рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рд╕рд╛рде рдПрдХ html рдкреГрд╖реНрда рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ред
рдпрджрд┐ рдЖрдкрдХреЛ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг рд░рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдиреЛрдб рдФрд░ рдкреИрдХреЗрдЬ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛ред рдкрд░рд┐рдпреЛрдЬрдирд╛ рдмрд╣реБрдд рдмрдврд╝реЗрдЧреАред HTML рдХреЛ рдПрдХ рдЧреЛ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЗрдХрдЯреНрдард╛ рдХрд░рдиреЗ рдФрд░ рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдкрд░ рд╕реАрдбреАрдПрди рдХреЗ рд╕рд╛рде рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рдЦреАрдВрдЪрдиреЗ рдХрд╛ рдПрдХ рд╡рд┐рдХрд▓реНрдк рд╣реИред


рдЧреЛ-рдЧреНрд░рд╛рдлрд┐рдХреНрд▓ рдХрд╛ рдореЗрд░рд╛ рд╕рдВрд╕реНрдХрд░рдгред


рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛:


http.HandleFunc("/cli", graphiql.ServeGraphiQL) 

рдкрд░рд┐рдгрд╛рдо рд╣реИ:



2. рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдПрдкреАрдЖрдИ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ


рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ, рдбреЗрд╡рд▓рдкрд░ рдХрдВрд╕реЛрд▓ рдЦреЛрд▓реЗрдВ рдФрд░ 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 }, }, }, }) 

рд░рд┐рдЬрд╝реЙрд▓реНрдпреВрд╢рди рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рдВрдкрд╛рджрди рдбреЗрдЯрд╛ рднреА рд╣реЛрддрд╛ рд╣реИред
рд╣рд▓ рдкреНрд░рдХрд╛рд╢ рдШрдЯрдирд╛рдУрдВ рдХреЛ рднреА рдмрдирд╛ рд╕рдХрддрд╛ рд╣реИ рдпрд╛ рддрд╛рдкрдорд╛рди рдХреЛ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред


рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рд▓реМрдЯрд╛рдП рдЧрдП рдбреЗрдЯрд╛ рдХреЗ рдкреНрд░рдХрд╛рд░ рдореЗрдВ рдЧреНрд░рд╛рдлрд┐рдХрд▓ рднреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдлреАрд▓реНрдбреНрд╕ рдЬрд┐рдирдореЗрдВ рд╕реНрд╡рдпрдВ рдХреЗ рд░рд┐рдЬрд╝реЙрд▓реНрдпреВрд╢рди рдлрд╝рдВрдХреНрд╢рди рднреА рд╣реЛрдВрдЧреЗред


4. рдЯрд╛рдЗрдк рдХреА рдЧрдИ рднрд╛рд╖рд╛рдПрдБ?


рдбреЗрдЯрд╛ рдПрдХреНрд╕рдЪреЗрдВрдЬ рдХреЗ рдХреБрдЫ рдкреНрд░рддрд┐рдмрдВрдз (рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ) рд╣реИрдВред
рдЬрд╛рдиреЗ рдореЗрдВ, рдЪрд░ рдореЗрдВ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди рд╣реИрдВ
рдЗрдВрдЯ 0 рд╣реИ, рд╕реНрдЯреНрд░рд┐рдВрдЧ = ""


рдЧреНрд░рд╛рдлрд┐рдХрд▓ рдореЗрдВ, рдРрд╕реА рд╕реНрдерд┐рддрд┐ рд╣реЛ рд╕рдХрддреА рд╣реИ рдЬрдм рдПрдХ рдЪрд░ рд╕реЗрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред


рдЗрд╕рд▓рд┐рдП, рдРрд╕реЗ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд▓рд┐рдП рд╣рдо рдПрдХ рдЪрд░ рдХреЗ рд▓рд┐рдВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ


рдирд┐рд░рдВрддрд░рддрд╛ рдореЗрдВ,


рдореИрдВ рд▓рд┐рдЦреВрдВрдЧрд╛ рдХрд┐ рдУрдкрди рдбреЗрдЯрд╛ рд░рдЬрд┐рд╕реНрдЯреНрд░реА рдореЗрдВ рдЧреНрд░рд╛рдлрд┐рдХрд▓ рдПрдкреА рдХреИрд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рдПред
рдХреНрдпреЛрдВрдХрд┐ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдЧреНрд░рд╣ рдкрд░ рд╕рдмрд╕реЗ рдЖрд▓рд╕реА рд▓реЛрдЧ рд╣реИрдВред рд╣рдо рдПрдкреАрдЖрдИ рдХрд░реЗрдВрдЧреЗ рддрд╛рдХрд┐ рд╣рдо рдХреБрдЫ рдХрдо рдХрд░реЗрдВред


рдХрд╛рд░реНрдпрд╕реВрдЪреА:


рдЖрдкреА рд╕реНрдЯрд╛рд░реНрдЯрд░ рдХрд┐рдЯ

рдпреЛрдЬрдирд╛

рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╣реИ рдЬреЛ рдкрд╛рда рдХреЗ рд▓рд┐рдП рдПрдХ рдпреЛрдЬрдирд╛ рдмрдирд╛рддреА рд╣реИред


 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/hi449286/


All Articles