ノードを使用したGraphSQLサーバーの構築JS・アンド・エクスプレス



ノードを使用したGraphSQLサーバーの構築JS・アンド・エクスプレス

私に従って、トピックや改善についてのご提案を取るに満足
この記事はGraphSQLのシリーズの一部です.
  • ノードを使用した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サーバーは次のようになります.
  • スキーマは、スキーマが私たちのエンティティを定義するだけでなく
  • リゾルバ、リゾルバ関数は、サードパーティのAPIまたは当社のデータベースに話をし、我々のユーザーに戻ってデータを返す

  • 依存関係のインストール
    必要な依存関係をインストールすることから始めましょう.以下が必要です.
  • Expressは、当社のWebサーバーを作成するには
  • Graphqlは、GraphSQLをインストールするには、私たちは、私たちは
  • このライブラリを使用すると、GraphSQLとExpress

  • エクスプレス+グラフク
    インストールのみで始めましょう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() 関数は、以下のプロパティを設定した設定オブジェクトを指定します.
  • スキーマ、私たちのGraphSQLスキーマ
  • RootValue , Resolver関数
  • graphiql、使用するかどうかを示す論理値.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 the query 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
    私に従って、トピックや改善についてのご提案を取るに満足