¶GraphQLの構成

GraphQLは大きく分けて「クエリ言語(フロント側 front、リクエスト, request)」と「スキーマ言語(サーバー側 server、レスポンス, response)」の2つによって構成されています。

クエリ言語とは?

GraphQLサーバーに対してリクエストをするための言語(合計3種類)

クエリの種類 意味 効果
query データ取得系 GET
mutation データ更新系 POST/PUT/DELETE...etc
subscription イベントの通知 Websocket

¶下準備@orgpi58g.yushei.net

プロジェクトを作った後に、npm経由でGraphQL.jsをインストールします。

$ fnm current
v20.10.0
$ node --version
v20.10.0
$ npm --version
10.2.3
$ yarn --version
1.22.21
$ mkdir GraphQLPrac && cd $_
$ touch server.js
$ npm init
This utility will walk you through creating a package.json file.
It only covers the most common items, and tries to guess sensible defaults.

See `npm help init` for definitive documentation on these fields
and exactly what they do.

Use `npm install <pkg>` afterwards to install a package and
save it as a dependency in the package.json file.

Press ^C at any time to quit.
package name: (graphqlprac) 
version: (1.0.0) 
description: graphQL Pratice
entry point: (server.js) 
test command: 
git repository: 
keywords: 
author: alexlai@munetaka,me
license: (ISC) 
About to write to /opt/xfs/build/GraphQLPrac/package.json:

{
  "name": "graphqlprac",
  "version": "1.0.0",
  "description": "graphQL Pratice",
  "main": "server.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "start": "node server.js"
  },
  "author": "alexlai@munetaka,me",
  "license": "ISC"
}


Is this OK? (yes)

$ npm install express express-graphql graphql --save
npm WARN deprecated express-graphql@0.12.0: This package is no longer maintained. We recommend using `graphql-http` instead. Please consult the migration document https://github.com/graphql/graphql-http#migrating-express-grpahql.

added 68 packages, and audited 69 packages in 3s

11 packages are looking for funding
  run `npm fund` for details

found 0 vulnerabilities
const express = require('express');
const { graphqlHTTP } = require('express-graphql');
const { buildSchema } = require('graphql');

// GraphQLスキーマ言語を記述してスキーマを構築する
// スキーマはあくまで定義のみで実際のデータ操作は行わない
const schema = buildSchema(`
  type Query {
    hello: String
  }
`);

// ルートは、APIエンドポイントごとにリゾルバ関数を提供します
// リゾルバとは特定のフィールドのデータを返す関数(メソッド)であり、実際のデータ操作を行う部分
const root = {
  hello: () => {
    return 'Hello world!';
  },
};

// Expressでサーバーを立てます
// graphiql: true としたので、GraphQLを利用できる
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');