プログラミングマガジン

プログラミングを中心にIT技術をできるだけわかりやすくまとめます。

  • ホーム
  • GraphQL
  • 【GraphQL】「Apollo Server」について
 
 
     
  • サーバー言語  
    • Python
    • Ruby
    • PHP
    • SQL
  •  
  • インフラ  
       
    • AWS
    •  
    • 基本
    • Git
  • Web
       
    • Web開発
    • JavaScript
    • Vue.js
    • React
  •  
  • 設計  
       
    • 実装設計
    • DB設計
  • 問い合わせ
  

【GraphQL】「Apollo Server」について

10.09

  • miyabisan2
  • コメントを書く

この記事は1分で読めます

Apolloとは?

GraphQLを簡単に扱えるようにするためのバックエンド、フロントエンドライブラリです。

ApolloServerのインストール

1
npm i apollo-server@^2 graphql@^14.6.0

Queryサンプルコード

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
const { ApolloServer, gql } = require("apollo-server");
const prisma = new PrismaClient();
 
// GraphQLのスキーマ定義
const typeDefs = gql`
  type Query {
    info: String!
  }
`;
 
// リゾルバ関数
const resolvers = {
  Query: {
    info: () => "リターンinfo",
  },
};
 
const server = new ApolloServer({
  typeDefs,
  resolvers,
  context: ({ req }) => {
    return {
      ...req,
      prisma,
      //認証トークンがないとuserIdを取得できない⇨post投稿できない。
      userId: req && req.headers.authorization ? getUserId(req) : null,
    };
  },
  csrfPrevention: true,
  cache: "bounded",
});
 
server.listen().then(({ url }) => {
  console.log(`<img draggable="false" data-mce-resize="false" data-mce-placeholder="1" data-wp-emoji="1" class="emoji" alt="🚀" src="https://s.w.org/images/core/emoji/11/svg/1f680.svg">  Server ready at ${url}`);
});

スキーマ定義

infoというフィールドを持っていてStringというデータ型になっている。GraphQLの雛形です。

Query

Apollo Serverで事前に決められている文字列になるのでしっかりと使う必要があります。

リゾルバ関数

スキーマの型に対して何か情報を入れるという意味があります。上の例で言えばinfoというフィールドの方に対して情報を入れています。雛形(スキーマ定義)に対して何か情報を入れてあげるという意味になります。

起動

1
node server.js

PlayGroundというApolloの統合開発環境が開きます。

以下のコマンドを実行したら

1
2
3
query {
  info
}

以下の結果が返ってきます。

1
2
3
4
5
{
  "data": {
    "info": "リターンinfo"
  }
}

Mutationサンプル

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
let links = [
  {
    id: "link a",
    description: "graphlqぐ",
    url: "fajko",
  },
];
 
const typeDefs = gql`
  type Mutation {
    post(url: String!, description: String!): Link!
  }
 
  type Link {
    id: ID!
    description: String!
    url: String!
  }
`;
 
 
const resolvers = {
  Mutation: {
    post: (parent, args) => {
      const link = {
        id: `link-a`,
        description: args.description,
        url: args.url,
      };
 
      links.push(link);
      return link;
    },
  },
};

ただ、このサンプルだとあくまでローカルPCのメモリ上に保存している(linksという配列にpushすることで実現している)ので、データを永続化したい場合は別途DBサーバー構築などの対応が必要になります。

parent

スキーマ定義で言うところの親リゾルバ関数の戻り値になります。親リゾルバ関数がない場合はnullになります。

args

クライアントから渡された引数になります。

return link;

最後リゾルバ関数(上の例で言えば、post)でreturnしているのは上で定義したスキーマ定義と同じように返してあげてますよという意味になります。

問い合わせ

1
2
3
4
5
6
7
mutation{
  post(url:"あああ",description: "あああ") {
    id,
    description,
    url
  }
}

スポンサーリンク
  • 2022 10.09
  • miyabisan2
  • コメントを書く
  • GraphQL
  • Tweets Twitter
  • このエントリーをはてなブックマークに追加
  • LINEで送る

関連記事

  1. 2022 10.03

    【GraphQL】構成(「クエリ言語」、「スキーマ言語」)

  2. 2022 10.08

    【React】GraphQL &Apollo Clientでの状態管理

  3. 2022 10.08

    【Next.js】「Hasura」と「Apollo Client」の連携

  4. 2021 08.14

    【GraphQL】GaphQLの基本、「Node」と「Edge」の概念について

  5. 2022 10.08

    【React】react-queryでGraphQLを使う

  6. 2022 10.06

    【GraphQL】「graphql-codegen」について

  • コメント ( 0 )
  • トラックバック ( 0 )
  1. この記事へのコメントはありません。

  1. この記事へのトラックバックはありません。

返信をキャンセルする。

【Hasura】認証方式(「Hasura admin …

【Prisma】sqliteで実装

RETURN TOP

著者プロフィール

エンジニア歴10年で過去に業務系、Webデザイン、インフラ系なども経験あります。現在はWeb系でフロントエンド開発中心です。

詳細なプロフィールはこちら

スポンサーリンク

カテゴリー

  • Android
  • AngularJS
  • API
  • AWS
  • C++
  • CSS
  • cursor
  • C言語
  • DDD
  • DevOps
  • Django
  • Docker
  • Figma
  • Git
  • GitLab
  • GraphQL
  • gRPC
  • Hasura
  • Java
  • JavaScript
  • Kubernetes
  • Laravel
  • linux
  • MySQL
  • Next.js
  • nginx
  • Node.js
  • NoSQL
  • Nuxt.js
  • Oracle
  • PHP
  • Python
  • React
  • Redux
  • Rspec
  • Ruby
  • Ruby on Rails
  • Sass
  • Spring Framework
  • SQL
  • TypeScript
  • Unity
  • Vue.js
  • Webサービス開発
  • Webデザイン
  • Web技術
  • インフラ
  • オブジェクト指向
  • システム開発
  • セキュリティ
  • その他
  • データベース
  • デザインパターン
  • テスト
  • ネットワーク
  • プログラミング全般
  • マイクロサービス
  • マイクロソフト系技術
  • マルチメディア
  • リファクタリング
  • 副業
  • 未分類
  • 業務知識
  • 生成AI
  • 設計
  • 関数型言語
RETURN TOP

Copyright ©  プログラミングマガジン | プライバシーポリシー