GraphQL JSONスキーマの基本


以下に、GraphQL JSONスキーマを作成するための基本的な手順とコード例を示します。

  1. GraphQLスキーマの作成: GraphQLスキーマは、GraphQLサーバーがサポートするオブジェクト、フィールド、引数、データ型などを定義します。スキーマはSDL(Schema Definition Language)またはプログラムコードを使用して作成できます。

例えば、以下のようなGraphQLスキーマを考えてみましょう:

type Post {
  id: ID!
  title: String!
  content: String!
  tags: [String!]!
}
type Query {
  getPosts: [Post!]!
  getPost(id: ID!): Post
}
type Mutation {
  createPost(title: String!, content: String!, tags: [String!]!): Post!
  updatePost(id: ID!, title: String, content: String, tags: [String!]): Post
  deletePost(id: ID!): Boolean!
}

このスキーマでは、"Post"というオブジェクトタイプが定義されており、"Query"と"Mutation"というルートタイプがあります。

  1. JSONスキーマの作成: JSONスキーマは、データの構造やバリデーションを定義するためのものです。GraphQLスキーマとは異なり、JSONスキーマは直接データの形式を定義します。

例えば、以下のようなJSONスキーマを考えてみましょう:

{
  "type": "object",
  "properties": {
    "id": { "type": "string" },
    "title": { "type": "string" },
    "content": { "type": "string" },
    "tags": {
      "type": "array",
      "items": { "type": "string" }
    }
  },
  "required": ["id", "title", "content", "tags"]
}

このJSONスキーマでは、"id"、"title"、"content"、"tags"というプロパティが定義されています。

  1. コード例: GraphQLスキーマとJSONスキーマを作成したら、それぞれを使用してクエリやデータのバリデーションを行うコードを実装できます。

例えば、JavaScriptとApollo Serverを使用している場合、以下のようなコードでGraphQLスキーマを作成し、JSONスキーマをバリデーションに使用できます:

const { ApolloServer, gql } = require('apollo-server');
const { buildSchema, assertValidSchema } = require('graphql');
const Ajv = require('ajv');
// GraphQLスキーマの定義
const typeDefs = gql`
  type Post {
    id: ID!
    title: String!
    content: String!
    tags: [String!]!
  }
  type Query {
    getPosts: [Post!]!
    getPost(id: ID!): Post
  }
  type Mutation {
    createPost(title: String!, content: String!, tags: [String!]!): Post!
    updatePost(id: ID!, title: String, content: String, tags: [String!]): Post
    deletePost(id: ID!): Boolean!
  }
`;
// JSONスキーマの定義
const jsonSchema = {
  type: 'object',
  properties: {
    id: { type: 'string' },
    title: { type: 'string' },
    content:{ type: 'string' },
    tags: {
      type: 'array',
      items: { type: 'string' }
    }
  },
  required: ['id', 'title', 'content', 'tags']
};
// スキーマのバリデーション
const ajv = new Ajv();
const validate = ajv.compile(jsonSchema);
const isValid = validate(data); // データをバリデーション
// Apollo Serverの設定
const resolvers = {
  Query: {
    getPosts: () => { /* データ取得のロジック */ },
    getPost: (parent, { id }) => { /* 特定のデータ取得のロジック */ }
  },
  Mutation: {
    createPost: (parent, { title, content, tags }) => { /* データ作成のロジック */ },
    updatePost: (parent, { id, title, content, tags }) => { /* データ更新のロジック */ },
    deletePost: (parent, { id }) => { /* データ削除のロジック */ }
  }
};
const server = new ApolloServer({ typeDefs, resolvers });
server.listen().then(({ url }) => {
  console.log(`Server ready at ${url}`);
});

このコード例では、Apollo Serverを使用してGraphQLサーバーを立ち上げています。GraphQLスキーマとJSONスキーマを定義し、データのバリデーションにJSONスキーマを使用しています。

以上が、GraphQL JSONスキーマに関する基本的な情報とコード例です。これらの情報を活用して、ブログ投稿を作成する際の参考になれば幸いです。