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


解決する

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


問い合わせ

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


提案を待っています。


Source: https://habr.com/ru/post/J449286/


All Articles