使用GraphQL实现简单的增删改查

使用GraphQL实现简单的增删改查

GraphQL官网:https://graphql.cn/
Altair Graphql 调试工具:https://saltair.sirmuel.design/#download
或者添加扩展使用网页版:https://chrome.google.com/webstore/detail/altair-graphql-client/flnheeellpciglgpaodhkhmapeljopja

介绍

GraphQL是一种用于API的查询语言,同时也是一个运行时用于处理这些查询的服务器端系统。它由Facebook于2012年开发,并于2015年开源。GraphQL提供了一种更有效、更灵活的替代传统REST API的方法。其主要特点包括:

  1. 精准的数据获取:客户端可以精确地指定它们需要哪些数据,而不是像在REST API中那样,由服务器决定返回哪些数据。这可以减少数据传输量,提高性能。

  2. 单一请求:在GraphQL中,不同于REST API需要多个请求来获取多个资源,客户端可以通过单一的请求获取所有需要的数据。

  3. 强类型系统:GraphQL有一个强类型系统,所有的数据类型都事先定义好。这为API的开发和使用提供了清晰的结构,并有助于捕获错误。

  4. 查询语言:GraphQL允许客户端使用一种类似于JSON的语言进行数据查询。这使得从服务器获取数据更加直接和高效。

  5. 自我描述性:GraphQL的一个重要特性是其API是自描述的。客户端可以通过API自己了解其结构,这使得API的探索和使用更加容易。

  6. 灵活性和扩展性:由于其查询语言的灵活性,GraphQL非常适合快速发展和变化的项目需求,同时也支持前端和后端的紧密协作。

上手

假设我们创建了用户(user)和文章(article)两个表,这两个表之间是一对多的关系,即一个用户可以有多篇文章。当新增用户时,可以同时为该用户创建文章;当删除用户时,可能也会影响到与该用户关联的文章数据。
在这里插入图片描述

代码

下面我们使用 GraphQL 实现简单的增删改查操作

  1. 查询用户表数据 (queryUser): 这个查询用于获取用户数据,限制为1条。它还获取与每个用户关联的文章标题。

  2. 删除用户数据 (deleteUser): 这个变更用于删除ID大于0的所有用户数据。它返回被删除的用户的ID和昵称。

  3. 删除文章数据 (deleteArticle): 类似于删除用户,这个变更用于删除ID大于0的所有文章数据,并返回被删除的文章的ID和标题。

  4. 新增用户 (insertUser): 这个变更用于新增用户,并同时为这个用户创建一篇文章。这里插入了一个昵称为“zach”的用户和一篇标题为“graphql学习”的文章。

  5. 修改用户信息 (updateUser): 这个变更用于更新特定ID(这里为2)的用户信息,比如修改昵称。

# 查询用户表数据
query queryUser {
  user(limit: 1) {
    nickname
    article {
      title
    }
  }
}

# 删除用户数据
mutation deleteUser {
  delete_user(where: { id: { _gt: 0 } }) {
    returning {
      id
      nickname
    }
  }
}

# 删除文章数据
mutation deleteArticle {
  delete_article(where: { id: { _gt: 0 } }) {
    returning {
      id
      title
    }
  }
}

# 新增用户
mutation insertUser {
  insert_user(
    objects: [
      { nickname: "zach", article: { data: [{ title: "graphql学习" }] } }
    ]
  ) {
    returning {
      id
      nickname
    }
  }
}

# 修改用户信息
mutation updateUser {
  update_user(where: { id: { _eq: 2 } }, _set: { nickname: "zach2" }) {
    returning {
      id
      nickname
    }
  }
}

  • 28
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Node.js可以作为后端语言使用,可以通过前端发送HTTP请求到后端,然后后端处理请求并返回响应数据给前端。常见的前后端交互方式有以下几种: 1. RESTful API:前端通过HTTP请求方法(GET、POST、PUT、DELETE)调用后端的API接口,后端根据请求方法和请求路径进行相应的增删改查操作,然后返回数据给前端。 2. GraphQLGraphQL是一种新的API查询语言,可以让前端精确地指定需要获取的数据,从而避免了请求过多或请求不足的问题。 下面是一个使用Node.js实现增删改查的例子: 1. 安装依赖 ```bash npm install express body-parser mongoose --save ``` 2. 创建一个Express服务器,并连接到MongoDB数据库 ```javascript const express = require('express'); const bodyParser = require('body-parser'); const mongoose = require('mongoose'); mongoose.connect('mongodb://localhost:27017/mydb', { useNewUrlParser: true }) .then(() => console.log('MongoDB Connected')) .catch(err => console.log(err)); const app = express(); app.use(bodyParser.json()); ``` 3. 定义Schema和Model ```javascript const Schema = mongoose.Schema; const userSchema = new Schema({ name: String, email: String, age: Number }); const User = mongoose.model('User', userSchema); ``` 4. 实现增删改查API ```javascript // 获取所有用户 app.get('/api/users', (req, res) => { User.find() .then(users => res.json(users)) .catch(err => res.status(404).json({msg: 'No users found'})); }); // 获取单个用户 app.get('/api/users/:id', (req, res) => { User.findById(req.params.id) .then(user => res.json(user)) .catch(err => res.status(404).json({msg: 'User not found'})); }); // 创建用户 app.post('/api/users', (req, res) => { const newUser = new User({ name: req.body.name, email: req.body.email, age: req.body.age }); newUser.save() .then(user => res.json(user)) .catch(err => console.log(err)); }); // 更新用户 app.put('/api/users/:id', (req, res) => { User.findByIdAndUpdate(req.params.id, { name: req.body.name, email: req.body.email, age: req.body.age }, {new: true}) .then(user => res.json(user)) .catch(err => res.status(404).json({msg: 'User not found'})); }); // 删除用户 app.delete('/api/users/:id', (req, res) => { User.findByIdAndDelete(req.params.id) .then(() => res.json({msg: 'User deleted successfully'})) .catch(err => res.status(404).json({msg: 'User not found'})); }); const port = process.env.PORT || 5000; app.listen(port, () => console.log(`Server started on port ${port}`)); ``` 以上就是一个简单的Node.js实现增删改查的例子。当然,具体实现方式还要根据具体的业务需求进行调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值