1.プロジェクトに行くためにgraphiqlクライアントを追加します
Graphiqlは、インタラクティブなGraphQLブラウザークライアントです。
goプロジェクトで使用するには、いくつかの依存関係を持つhtmlページを追加する必要があります。
最新バージョンが必要な場合は、ノードとパッケージのインストールに役立ちます。 プロジェクトは大きく成長します。 HTMLを1つの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 }, }, }, })
Resolve関数はデータを取得します。 データは、データベースからマイクロコントローラーへの任意のソースから取得できます。
突然変異
データ突然変異
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 }, }, }, })
データの編集も、解決機能を使用して行われます。
Resolveは、ライトイベントを作成したり、温度を調整したりすることもできます。
興味深い点は、返されたデータのタイプにgraphql.Fieldsを含めることができ、独自のResolve関数も持つことです。
4.型付き言語?
データ交換にはいくつかの制限(機能)があります。
goでは、変数にはデフォルト値があります
Intは0、String = ""
graphqlでは、変数が設定されていない場合があります。
したがって、そのようなパラメーターには、変数へのリンクを使用します
続けて、
graphql apiをOpen Data Registryに作成する方法を書きます。
プログラマは地球上で最も怠け者だからです。 APIを実行して、処理を少なくします。
TODO:
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
解決する
構造ごとにフィールドのジェネレーターを作成します
問い合わせ
ジェネレーターでクエリを作成する方法がわかりませんでした
提案を待っています。