GraphQL APIを実行

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







解決する


構造ごとにフィールドのジェネレーターを作成します







問い合わせ


ジェネレーターでクエリを作成する方法がわかりませんでした







提案を待っています。



All Articles