使用 Go 和 gqlgen 实现 GraphQL API:实战指南

使用 Go 和 gqlgen 实现 GraphQL API:实战指南

在本文中,我将分享如何使用 Go 语言和 gqlgen 框架实现一个完整的 GraphQL API。我们将构建一个包含用户、文章和评论功能的博客系统 API。

技术栈

  • Go
  • gqlgen (GraphQL 框架)
  • MySQL (数据存储)
  • Redis (缓存,可选)

项目结构

go_graphql/
├── config/
│   └── database.go     # 数据库配置
├── graph/
│   ├── model/          # 数据模型
│   ├── schema.graphqls # GraphQL schema
│   └── schema.resolvers.go # Resolver 实现
├── server.go           # 主程序入口
└── gqlgen.yml         # gqlgen 配置文件

GraphQL Schema 设计

首先,我们需要定义 GraphQL schema,这是整个 API 的基础:

type User {
  id: ID!
  username: String!
  email: String!
  avatar: String
  createdAt: String!
  posts: [Post!]
  comments: [Comment!]
}

type Post {
  id: ID!
  title: String!
  content: String!
  author: User!
  category: Category!
  createdAt: String!
  updatedAt: String
  comments: [Comment!]
  images: [Image!]
}

type Comment {
  id: ID!
  content: String!
  author: User!
  post: Post!
  createdAt: String!
}

type Query {
  users: [User!]!
  user(id: ID!): User
  posts(categoryId: ID): [Post!]!
  post(id: ID!): Post
}

type Mutation {
  createUser(input: CreateUserInput!): User!
  createPost(input: CreatePostInput!): Post!
  createComment(input: CreateCommentInput!): Comment!
}

Resolver 实现

下面是一个完整的用户查询 resolver 实现示例:

// Users resolver 实现
func (r *queryResolver) Users(ctx context.Context) ([]*model.User, error) {
   
   
    rows, err := config.DB.Query(`
        SELECT id, username, email, avatar, created_at 
        FROM users`)
    if err != nil {
   
   
        return 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

老大白菜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值