GraphQL + Node.js -Mutation編-

このセクションでも前回と同じようにsrc/index.jsに実装していきます。

まずはtypeDefsにMutation、addUserを追加します。

         
// src/index.js

  const typeDefs = gql` 
    type Query {
      hello: String!
      users: [User!]!
      user(id: Int!): User!
    }
     
    type Mutation {
      addUser(id: ID!, name: String!): [User!]!
    }

    type User {
      id: ID!
      name: String!
      posts: [Post!]
    }

    type Post {
      id: ID!
      title: String!
      author_id: ID!
    }`      

 こんな感じです。idとnameだけを持つユーザーを追加します。ここではめんどくさいのでPostの追加はしません。そして、新しくユーザーを作成した後に全てのユーザーを返すように書きます。

続いてresolverの実装

        
    //src/index.js

    const resolvers = {
     Query: {
       hello: () => 'Hello world!',
       users: () => Users,
       user: (_, { id }) => {
           return Users.find((user) => user.id == id)
       }
     },
     Mutation: {
       addUser: (_, { id, name }) => {
         const newUser = {
           id,
           name,
           posts: []
         }
         Users.push(newUser)
         return Users
       }
     }
   }
          
            

 新しくMutationを作りその中に先程定義した、addUserを書きます。argsにはidとnameを。JavascriptやNode.jsに慣れている人がほとんどだと思うのでこのコード自体は難しく感じないと思います。

 さっそくPlaygroundで確かめてみましょう。

 下のように新しいユーザー、Davisを追加し、全てのユーザーのnameを返すように書きます。

ここではデータベースを使っていないので一時的なデータですが、上のようにUsersに新しく追加されていると思います。

Mutationについての説明はここまでにします。UPDATE機能やDELETE機能は次回からのデータベースを使用するセクションで改めて学習します。

ここまでがでとりあえずGraphQL + Node.jsの簡単なチュートリアルです。次からはデータベースやORMについて学習していきます。