ノードを使用したGraphSQLサーバーの構築JS・アンド・エクスプレス
ノードを使用したGraphSQLサーバーの構築JS・アンド・エクスプレス
私に従って、トピックや改善についてのご提案を取るに満足
この記事はGraphSQLのシリーズの一部です.
GraphQL enables us to build a server that a client can query in any way they want. I’m of course talking about content negotiation, the ability to ask the server exactly for the fields or resources they want, at any depth.
前記事でBuilding your first GraphQL Server , 私は、GraphSQLサーバーを作る異なったアーティファクトとタイプをカバーしました.この記事では、クライアントが消費することができるGraphSQLによって供給されたサービスのビルド方法について詳しく説明します.また、Graphqlと呼ばれるプレイグラウンド環境を紹介します.
この記事では以下を説明します.
なぜGraphql、Graphqlは素晴らしい新技術はなぜそれが関連している理由をカバーしようとすると、なぜそれは建物のAPIを楽しく簡単になる
ブロックを構築するには、GraphSQLのサーバー側を構築するために必要なビルディングブロックを使いましょう
サーバーを構築するには、ノードを使用します.エクスプレスGraphqlというライブラリを可能にする
クエリは、通常のクエリのような私たちのサーバーのクエリのさまざまな方法を、パラメトリッククエリとどのように突然変異でデータを変更する方法
なぜ
残りの上にGraphSQLを選ぶ理由はたくさんあります.
あなたが必要とするデータは、コンテンツの交渉を使用してすべてのテクニックと同様に、あなたが必要なデータのクエリを取得する能力を取得する場合は、正確には、あなたが求める列を取得することを意味し、それは最小限に戻る答えを保持します.特に携帯電話の最初と3 G/4 Gの接続を持つtoworldの世界では、サイズの最小値にデータ応答を維持することは本当に素晴らしいことです.
つのエンドポイント、あなたが特定のエンドポイントを照会するエンドポイントからのデータ特定のデータを望むように.あなたが必要とするデータが1つ以上のエンドポイントから一緒にパズルに必要なものですか?その時点で、呼び出しの束を実行したり、新しいエンドポイントを構築します.に関係なく、選択のアプローチは、時間を管理し、エンドポイントを知って過ごす必要があります.それがちょうど1つの終点であるので、Graphqlはここで輝きます.
シリアル化、あなたが残りを呼び出すとき、あなたはあなたが得る応答JSONを得ます.ただし、列の名前を変更するなどのデータに余分なマッサージを行う必要があります.GraphSQLを使用すると、クエリ自体でこれを指定できます
深さ、通常は残りの部分の順序で簡単に特定のものです.どのような場合は、順序で注文項目を取得する場合でも、製品は、顧客の枝?ほとんどの場合、余分なラウンドトリップを避けるために、いくつかの呼び出しを行うか、特定のレポートクエリを作成する必要があります.GraphSQLを使用すると、グラフで必要な深さをクエリすることができますし、任意の深さで必要なデータを引き出す.もちろん、効率的にこれを行うことは、Graphqlでの大きな課題の一つです.Graphelは銀の弾丸ではないが、それは人生をより容易にする
ビルディングブロック
GraphSQLサーバーは次のようになります.
依存関係のインストール
必要な依存関係をインストールすることから始めましょう.以下が必要です.
エクスプレス+グラフク
インストールのみで始めましょう
graphql
and express
それを理解するにはnpm install express graphql
その後、作成しましょうexpress
HTTPサーバ// schema.mjs
import {
graphql,
GraphQLSchema,
GraphQLObjectType,
GraphQLString,
GraphQLList
} from "graphql";
let humanType = new GraphQLObjectType({
name: "Human",
fields: () => ({
id: { type: GraphQLString },
description: { type: GraphQLString },
name: { type: GraphQLString }
})
});
import people from "./data/people";
let schema = new GraphQLSchema({
query: new GraphQLObjectType({
name: "RootQueryType",
fields: {
hello: {
type: GraphQLString,
resolve() {
return "world";
}
},
person: {
type: humanType,
resolve() {
return people[0];
}
},
people: {
type: new GraphQLList(humanType),
resolve() {
return people;
}
}
}
})
});
export { graphql };
export default schema;
これは宣言するかなり単純なスキーマですhello
, person
and people
Queryableキーワードとしても作成humanType
カスタムタイプとして.ファイル終了時のコメント
.mjs
. 我々がここでしていることは、実験的支援を活用することですESM/EcmaScript
モジュールNODEJSで現在実行されている方法は、私たちにファイルを.mjs
.次に、このように見えるだけで基本的なエクスプレスアプリケーションですアプリ自体です
// app.mjs
import express from "express";
const app = express();
const port = 3000;
import schema, { graphql } from "./schema";
app.get("/", (req, res) => {
let query = `{ hello, person { name }, people { name, description } }`;
graphql(schema, query).then(result => {
res.json(result);
});
});
app.listen(port, () => console.log(`Example app listening on port port!`));
上では、以下のように呼び出します.app.get("/", (req, res) => {
});
その後、我々はgraphql
パラメータをパラメータで呼び出すschema
and query
, 以下のように:graphql(schema, query).then(result => {
res.json(result);
});
上で見ることができるようにgraphql
我々が戻って、約束を得ることを意味しますthen()
コールバック私たちのクエリから結果を見ることができます.一緒に、我々は方法を見ることができますgraphql
and express
は対話できる.最後に、これを実行するには
start
コマンドでpackage.json
ESMモジュールの実験的サポートを起動するファイル.以下のようになります.// excerpt from package.json
"start": "node — experimental-modules app.mjs"
エクスプレスの追加
我々は、ちょうど我々が使うことができる方法を示しました
express
and graphql
そして、残りのAPIを作成しますが、我々は追加することによってこれを行うことができますexpress-graphql
, では次のようにしましょう.npm install express-graphql
最初に何かをしましょうbuildSchema()
このようにスキーマを設定し、スキーマを設定します.var { buildSchema } = require("graphql");
var schema = buildSchema(`
type Product {
name: String,
id: Int
},
type Query {
hello: String,
products: [Product]
}
`);
上記のカスタムタイプを定義することができますProduct
また、クエリを定義するhello
and products
.また、次の定義を持つリゾルバ関数も必要です.
const getProducts = () => {
return Promise.resolve([{
title: 'Movie'
}]);
}
var root = {
hello: () => {
return "Hello world!";
},
products: () => {
return getProducts();
}
};
最後に、コードを少しクリーンアップできますので、サーバーを起動するコードは次のようになります.var graphqlHTTP = require("express-graphql");
app.use(
'/graphql',
graphqlHTTP({
schema: schema,
rootValue: root,
graphiql: true
})
);
それは、我々は実際にルートを定義する必要はありませんが、我々はそれをGraphSQLに任せる.私たちはgraphqlHTTP()
関数はexpress-graphql
現在、我々はすべてのビットを適所に持ちます.graphiql
私たちは
graphqlHTTP()
関数は、以下のプロパティを設定した設定オブジェクトを指定します.graphiql
, 我々はそれを望むのでtrue
ヒアgraphiql
私たちはhttp://localhost:4000/graphql
そして、Voila、これはあなたが見なければならないものです:OK偉大な、視覚的なインターフェイスは、今何ですか?
さて、今ではGraphSQLクエリの作成を開始できます.何を問い合わせるかを知るには、スキーマで定義したものを見てください.
私たちは、私たちが
hello
and products
スキーマに設定します.では、こうしましょう.OK、それから、あなたは
play
アイコン.あなたが見ることができるように、これはあなたの質問をデバッグする非常に役に立つツールです、しかし、それはあなたの突然変異をデバッグするのにも用いられることができます.パラメータ化クエリ
パラメータをパラメータとしてGraphqlに問い合わせを書きましょう:
上記のキーワードを使用してクエリを定義する方法を見ることができます
query
. その後、名前を与えるQuery
括弧が続く.括弧内では、入力パラメータ$
文字.この場合、我々のパラメータid
, つまり、そのフルネームは$id
. 我々が得たものを見ましょうquery Query($id: Int!) {
// our actual query
}
さあ、実際の問い合わせを書く時が来たので、次のようにしましょう.product(id: $id) {
name
}
ご覧の通り、我々は$id
クエリの構成と結果は以下のようになります.query Query($id: Int!) {
product(id: $id) {
name
}
}
NOTE: at the bottom of the screen we have a section called
query variables
that lets us define variables we want to use as input. So when we define something as$name_of_variable
it will look into thequery variables
section
突然変異を呼び出す
突然変異を呼び出すには
mutation
キーワード.次の突然の呼び出しを作成しましょう.mutation MyMutation {
addProduct(name: "product", description: "description of a product")
}
NOTE: if we return a complex object we need to select what columns we want, like so
mutation MyMutation {
addProduct(name: "product", description: "description of a product"){
col1,
col2
}
}
概要
APIをビルドするには、NPMライブラリを使用しました
express
, graphql
. ただし、加えることでexpress-graphql
我々は、視覚環境にアクセスしたgraphiql
これにより、クエリを実行し、突然変異を実行することができますあなたが既存のレポを見たいならば、見てくださいDemo repo
私に従って、トピックや改善についてのご提案を取るに満足
Reference
この問題について(ノードを使用したGraphSQLサーバーの構築JS・アンド・エクスプレス), 我々は、より多くの情報をここで見つけました https://dev.to/azure/building-a-graphql-server-with-nodejs-andexpress-5hfhテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol