GraphQL における変数の受け渡し

May 03, 2023

概要

GraphQL ではクエリ発行の際に API のエンドポイントに引数を渡すことが可能です。スキーマ言語で引数の存在を定義することで、タイプチェックが自動的に行われます。

動作の確認

以下の例では引数を渡すスキーマを定義しています。なお、引数についてもスカラー型のいずれかを指定します。

server.js
const express = require("express")
const { graphqlHTTP } = require("express-graphql");
const { buildSchema } = require("graphql");

// Defining GraphQL Schema
const schema = buildSchema(`
  type Query {
    rollDice(numDice: Int!, numSides: Int): [Int]
  }
`);

// Resolver function
const root = {
  rollDice: ({numDice, numSides}) => {
    let output = [];
    for (let i = 0; i < numDice; i++) {
      output.push(1 + Math.floor(Math.random() * (numSides || 6)));
    }
    return output;
  }
};

// Launch Express server. Set graphiql: true to use GraphiQL
const app = express();
app.use("/graphql", graphqlHTTP({
  schema: schema,
  rootValue: root,
  graphiql: true
}));
app.listen(4000);
console.log("Running a GraphQL API server at http://localhost:4000/graphql");

あとはサーバーを起動します。

$ node server.js 
Running a GraphQL API server at http://localhost:4000/graphql

以下のクエリを叩いてみます。

query {
  rollDice(numDice:5, numSides:10)
}

すると以下のような結果が得られるはずです。

{
  "data": {
    "rollDice": [
      2,
      4,
      7,
      5,
      5
    ]
  }
}

f:id:shiro_kochi:2018××××××××:plain:w100:left


 © 2023, Dealing with Ambiguity