上一篇简单介绍了怎么编写一个接口,在编写接口的时候,我们会用到关系型数据库例如 MySQL;数据库可视化管理工具例如 Sequel Ace;Key-Value数据库例如 Redis;接口调试工具例如 Postman;这里介绍一下他们的功能和简单使用方式:
MySQL
MySQL 是 Web 应用中最流行最好用的关系型数据库之一,数据库用于存储、管理数据,而关系型数据库有以下几个主要特点:
- 以表(table)的形式存储数据,表有固定的数据格式,使用 DDL 语句修改表结构。
- 采用结构化查询语言(SQL)做数据读写
- 通过事务(Transaction)保持数据的一致性
在业务中我们可以用 MySQL 存储用户信息、商品信息、订单信息等等。在用户操作时使用事务保证数据一致性,例如下单时锁定库存和优惠券,提现时锁定余额。在开始之前先了解几个重要术语:
- 数据库(database),数据库是多个数据表(table)的集合,即 数据库可以包含多个数据表,一个数据表包含多行相同结构的数据
- 数据表(table),数据表可以有多列和多行,看起来类似 excel 表格,一行即一条数据,一列则是相同类型的数据
- 列(column),一个数据表有多个列,创建时需要给列定义数据类型,数据类型共有以下几种:整型、浮点型、字符串、时间和日期、BLOB 和 TEXT、枚举类型
- 主键(primary key),一个表中只能包含一个主键,主键可以用来查询数据
安装
这里演示 MacOS 下使用 Homebrew 安装 MySQL@5.7,终端输入命令:
brew install mysql@5.7
复制代码
安装成功后控制台会输出使用方法:
If you need to have mysql@5.7 first in your PATH, run:
# 执行这一行 然后执行 source ~/.zshrc,就可以在控制台调用 mysql 指令
echo 'export PATH="/usr/local/opt/mysql@5.7/bin:$PATH"' >> ~/.zshrc
To connect run:
# 执行这一行 进入 mysql 控制台
mysql -uroot
复制代码
此时会进入 mysql 控制台:
# 查看所有数据库
mysql> show databases;
# +--------------------+
# | Database |
# +--------------------+
# | information_schema |
# | localDatabase |
# | mysql |
# | performance_schema |
# | sys |
# +--------------------+
# 创建名为 test_database 的数据库
mysql> create database test_database;
# 选择数据库 test_database
use test_database;
复制代码
此时我们创建并选择了 test_database
数据库,可以在库里创建数据表了
创建表
CREATE TABLE `test_user_tbl` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`username` varchar(20) NOT NULL DEFAULT '' COMMENT '用户名',
`pwd` varchar(20) NOT NULL DEFAULT '' COMMENT '密码',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
复制代码
这条语句创建了数据表 test_user_tbl
并定义了表中三个列的数据结构:
- 主键
id
,插入数据时会自增 - 字段
username
,长度为 20 的字符串(varchar),不能为 null(NOT NULL) 默认空字符串(DEFAULT ”),备注用户名
(COMMENT ‘用户名’) - 字段
pwd
。
增删改查
-- 插入一条 `username 用户名 pwd 密码` 数据
mysql> INSERT INTO test_user_tbl
-> (username, pwd)
-> VALUES
-> ("用户名", "密码");
-- 将 id=1 的 username 改为 '更新后的用户名'
mysql> UPDATE test_user_tbl SET username='更新后的用户名' WHERE id=1;
-- 查询 id=1 的数据
mysql> SELECT * from test_user_tbl WHERE id=1;
-- 删除 id=1 的数据
mysql> DELETE FROM test_user_tbl WHERE id=1;
复制代码
以上是一些基础操作,在 mysql控制台还可以执行其他多种多样符合 sql 语法的语句。通常我们会在后端应用里使用工具库连接并操作 MySQL:
NodeJS 中使用 Sequelize 连接 MySQL 数据库
const Sequelize = require("sequelize");
const sequelize = new Sequelize("test_user_tbl", "root", "", {
host: "localhost",
dialect: "mysql",
pool: {
max: 5,
min: 0,
idle: 10000,
},
});
复制代码
项目实践注意事项
- 考虑用字符集
CHARSET=utf8mb4
代替utf8
,前者兼容更多的生僻字、emoji表情等 - 注意使用事务保证数据一致性,不同的需求使用不同的隔离级别
- 密码、手机号等敏感信息,建议加密后存储在数据库,即脱敏处理,避免信息泄露
- 负载压力大考虑分布式数据库,设置备份规则保证数据安全
学习资源
菜鸟入门教程
Mysql 应用指南
[官方文档]](docs.oracle.com/en-us/iaas/…)
Sequel Ace
使用控制台操作 MySQL 不直观也不方便,既然说数据表像一个表格,我们需要可视化工具真的看到一个表格。MacOS 推荐免费工具 Sequel Ace
-
建立连接:打开软件,通过设置 host、username、password 即可建立连接,(database可选 port默认3306)
-
顶部按钮:选择/创建数据库
-
点击左下角 + 号,创建数据表,输入表名后在右方添加编辑列信息。
-
点击左侧列表选择查看其他数据表,点击右上方选项卡查看表结构、内容、关系、表信息等等。
-
主要是在内容中可以方便的查看表中的数据,也可以双击编辑数据(常用于开发环境)
Redis
Redis 是速度非常快的非关系型(NoSQL)内存键值数据库,可以存储键和五种不同类型的值之间的映射。
键的类型只能为字符串,值支持的五种类型数据类型为:字符串、列表、集合、有序集合、散列表。
Redis 具有以下主要优势:
- 读写性能极高
- 丰富的数据类型 – 支持字符串、列表、集合、有序集合、散列表
- 原子性 – 要么完全执行成功,要么失败完全不执行
- 可持久化、可分布式、可数据备份
Redis 使用起来就像是JS中的 Map 数据结构(但 key 只能是字符串,value要符合支持的数据结构)。在业务中,我们可以用 Redis 来存储用户的鉴权 token,用户带着 token 访问时,可以快速从 redis 取出并对比。还可以用有序集合、列表做排行榜等等
安装
# 启动 redis,或者 brew services start redis
redis-server
# 进入 redis 控制台
redis-cli
复制代码
控制台基础使用
# 设置 key 为 usertoken,value 为 my-token 的一条数据
127.0.0.1:6379> SET usertoken my-token
# 获取 key 为 usertoken 的 value(用于字符串值)
127.0.0.1:6379> GET usertoken
# 输出 "my-token"
# 查询 key 为 usertoken 是否存在
127.0.0.1:6379> EXISTS usertoken
# 删除 key 为 usertoken 的记录
127.0.0.1:6379> DEL usertoken
复制代码
在 NodeJS 中连接并使用
主要借助于官方库node-redis
import { createClient } from 'redis';
(async () => {
// 配置 redis 连接信息
const client = createClient({
url: 'redis://127.0.0.1:6379'
});
// 监听 redis 错误
client.on('error', (err) => console.log('Redis Client Error', err));
// 连接 redis
await client.connect();
// 设置 key
await client.set('key', 'value');
// 获取 key 对应的 value
const value = await client.get('key');
})();
复制代码
Postman
写好接口后,我们可以用 Postman 模拟请求,调试接口。使用方法就是可视化的方式配置发起请求,配置和前端 $.ajax、axios 等请求库一样:
- 先选择请求方法,一共有15个请求方法,最常用的是 GET 和 POST。
- 按界面上的输入框,配置请求的 URL、请求参数(有 query string 和 request body)、请求头。注意,用户信息需要配置 cookie 或者请求头的 token 来携带。
- 点击 send 发起请求,查看请求结果。
通过测试的接口,就可以按请求方式,写成接口文档供客户端调用啦。