GraphQL Schema Generator Skill
GraphQLスキーマを生成するスキルです。
概要
データモデルからGraphQLスキーマ、リゾルバーを自動生成します。
主な機能
-
スキーマ定義: Type、Query、Mutation
-
リゾルバー生成: 実装テンプレート
-
ベストプラクティス: ページネーション、エラーハンドリング
-
ドキュメント: 自動生成
生成例
Schema
Types
type User { id: ID! name: String! email: String! posts: [Post!]! createdAt: DateTime! }
type Post { id: ID! title: String! content: String! author: User! published: Boolean! createdAt: DateTime! updatedAt: DateTime! }
type Query { user(id: ID!): User users(first: Int = 10, after: String): UserConnection! post(id: ID!): Post posts(published: Boolean): [Post!]! }
type Mutation { createUser(input: CreateUserInput!): User! updateUser(id: ID!, input: UpdateUserInput!): User! deleteUser(id: ID!): Boolean! createPost(input: CreatePostInput!): Post! publishPost(id: ID!): Post! }
Inputs
input CreateUserInput { name: String! email: String! password: String! }
input UpdateUserInput { name: String email: String }
input CreatePostInput { title: String! content: String! authorId: ID! }
Pagination
type UserConnection { edges: [UserEdge!]! pageInfo: PageInfo! totalCount: Int! }
type UserEdge { node: User! cursor: String! }
type PageInfo { hasNextPage: Boolean! hasPreviousPage: Boolean! startCursor: String endCursor: String }
Custom Scalars
scalar DateTime
Resolvers (JavaScript)
const resolvers = { Query: { user: async (parent, { id }, { dataSources }) => { return dataSources.userAPI.getUserById(id); }, users: async (parent, { first, after }, { dataSources }) => { return dataSources.userAPI.getUsers({ first, after }); }, post: async (parent, { id }, { dataSources }) => { return dataSources.postAPI.getPostById(id); }, posts: async (parent, { published }, { dataSources }) => { return dataSources.postAPI.getPosts({ published }); } },
Mutation: { createUser: async (parent, { input }, { dataSources }) => { return dataSources.userAPI.createUser(input); }, updateUser: async (parent, { id, input }, { dataSources }) => { return dataSources.userAPI.updateUser(id, input); }, deleteUser: async (parent, { id }, { dataSources }) => { return dataSources.userAPI.deleteUser(id); }, createPost: async (parent, { input }, { dataSources, user }) => { if (!user) throw new Error('Unauthorized'); return dataSources.postAPI.createPost(input); }, publishPost: async (parent, { id }, { dataSources, user }) => { if (!user) throw new Error('Unauthorized'); return dataSources.postAPI.publishPost(id); } },
User: { posts: async (parent, args, { dataSources }) => { return dataSources.postAPI.getPostsByAuthor(parent.id); } },
Post: { author: async (parent, args, { dataSources }) => { return dataSources.userAPI.getUserById(parent.authorId); } } };
バージョン情報
- スキルバージョン: 1.0.0