目次

    ライブラリのインストール

    まず初めにApollo-serverライブラリをインストールします。

    $ npm install apollo-server graphql


    Graphスキーマの定義

    続いて、GraphQLスキーマの定義をしていきます。 今回はBookというオブジェクトを用意してその中にtitleとauthorというフィールドを記述します。 このオブジェクトはGraphQLで最も基本的なスキーマであり、サービスから取得できるオブジェクトの種類と、サービスに含まれるフィールドのみで表現します。

    index.js

    const { ApolloServer, gql } = require('apollo-server');
    const typeDefs = gql`

    type Book {
    title: String
    author: String
    }

    type Query {
    books: [Book]
    }
    `;


    データセットの定義

    スキーマの定義ができたら、同じファイルの下部にデータを定義していきます。 本来であれば、Apollo Serverから取得した値を変数に格納して利用しますが、 今回は変数booksに2つのオブジェクトを入れていきます。

    const books = [
    {
    title: 'The Awakening',
    author: 'Kate Chopin',
    },
    {
    title: 'City of Glass',
    author: 'Paul Auster',
    },
    ];


    リゾルバーの定義

    上記でデータを定義しましたが、apollo server側はクエリ実行時にこのデータセットを使用することを認識していない状態です。 これを認識させるためにリゾルバーを作成していきます。 Index.js のbooksの変数のデータセットの下に以下を記述します。

    const resolvers = {
    Query: {
    books: () => books,
    },
    };


    Apollo サーバーのインスタンス作成

    これまでにスキーマ、データセット、リゾルバーを定義してきました。 この情報を初期化する際にApollo Serverに知らせる必要があります。

    const server = new ApolloServer({
    typeDefs,
    resolvers,
    csrfPrevention: true,
    });

    server.listen().then(({ url }) => {
    console.log(` });


    サーバーの起動

    Apollo serverを起動を以下のコマンドで行います。

    $ node index.js

    このlocalhost:4000にアクセスしてこのような画面になっていればサーバーを起動できたことが確認できます。 そしてこの画面の”Query your server” と書かれたボタンを押すとsandboxというクエリを発行することができるsandbox UIというものが立ち上がります。


    クエリの発行

    このsandbox UIでクエリをリクエストしてみましょう。 Operationのタブの部分に以下のクエリをコピー&ペーストして、 GetBooksボタンをクリックしてみると、Responseタブに先ほど定義したデータセットが出力されることがわかります。

    さらにクエリのauthorを削除してもう一度GetBooksボタンをクリックすると Titleのデータのみが返却されます。 これでGraphQL特有のフロント側で欲しいデータを能動的に選択し、より効率的に値を得ることができることがわかりました。

    まとめ

    今回はGraphQLをapollo serverを利用して動かしてみました。 他にも様々なnodeを用いたサーバーがありますが、どれが動かしやすいか確認してみると面白いかもしれません。

    PREV
    2022.06.10
    LiquidのControl flow tagsを解説
    NEXT
    2022.06.10
    タイピングを極めて業務爆速化!!