赞助

接口规范

随着前后端分离越来越普遍, 后端接口规范也就越来越重要了,一套良好的接口规范可以提升工作效率, 减少沟通障碍。通常我们都会采用RestfulApi方式来提供接口, 使用 JSON 来传输数据。

Restful设计规范有一个的要求

  • 接口通信协议  http或https
  • 接口域名  最好是独立解析的域名www.xxx.com
  • 接口版本  将版本信息放在URL中   http://xxx/v1
  • url路径  网络中的任何东西都为资源,均使用名词表示(一般为复数形式)
  • 接口请求方式 GET/POST/PUT/DELTE等

GET :从服务器取出资源(一项或多项)

POST :在服务器新建一个资源

PUT/PATCH :在服务器更新资源

DELETE :从服务器删除资源

  • 过滤信息  通过在url上传参的形式传递搜索条件

https://api.example.com/v1/zoos?limit=10:指定返回记录的数量

  • 状态码

200 OK - [GET]:服务器成功返回用户请求的数据。

201 CREATED - [POST/PUT/PATCH]:用户新建或修改数据成功。

202 Accepted - [*]:表示一个请求已经进入后台排队(异步任务)

204 NO CONTENT - [DELETE]:用户删除数据成功。

301:永久重定向

302:暂时重定向

400 INVALID REQUEST - [POST/PUT/PATCH]:用户发出的请求有错误,服务器没有进行新建或修改数据的操作。

401 Unauthorized - [*]:表示用户没有权限(令牌、用户名、密码错误)。

403 Forbidden - [*] 表示用户得到授权(与401错误相对),但是访问是被禁止的。

404 NOT FOUND - [*]:用户发出的请求针对的是不存在的记录。

500 INTERNAL SERVER ERROR - [*]:服务器发生错误,用户将无法判断发出的请求是否成功。

返回结果以JSON数据返回

 

编写接口

const express = require('express')
const query = require('./db')
// 实例化一个http对象
const app = express()
// 监听服务
app.listen(3000)
// express就可以不用引入body-parser 工作时建议引入
// 接受JSON数据 content-type:application/json
app.use(express.json())
// content-type:applocation/x-form-urlencoded  id=1&name=aa ->解析  => querystring 或 qs
app.use(express.urlencoded({ extended: false }))
// 用户登录
app.post('/v1/api/login', async (req, res) => {
  const { username, password } = req.body
  // 查询用户是否存在
  const sql = `select * from users where name='${username}' and password='${password}'`
  // 执行 如是查询不到数据返回空数据,查询到返回数组对象
  const data = await query(sql)
  if (data.length == 0) {
    return res.status(401).send({
      code: 1000,
      msg: '账号密码有误'
    })
  }
  // 账号和密码是存在的  把用户的状态存入到session中  ==》现在我们的是接口不在同一台服务器,cookie出问题
  // session将无法保存用户状态
  // jwt => json web token  在服务器端“加密”一个字符串,给客户端,客户端在后续的工作中,传过来给我,我在解密
  // 验证是否正确,正确则继续后续工作,不正确停
  // 加密 不能md5 不安全  admin=>xxxx 撞库  每次请求字符都不一样 非对称加密 rsa
  // cnpm i -S jsonwebtoken

  res.send(req.body)
})

接下来我们再写数据库文件db.js

const mysql = require('mysql')
// 连接mysql 数据库连接池,性能更高
const db = mysql.createPool({
  // 池子中可用的连扫数量 越多越好,但是你也根据服务器自己能力而行
  // 默认值为10
  connectionLimit: 10,
  // mysql服务器地址
  host: '127,0,0,1',
  // 账号
  user: 'root',
  // 密码
  password: 'root',
  // 数据库名称
  database: 'mydb'
})
function query(sql){
  return new Promise((resolve,reject) => {
    // error是否有错,null没有错,有值就有错
    // results 取出的数据结果  数组
    db.query(sql,(error,results)=>{
      if(error){
        reject(error)
      }else{
        resolve(results)
      }
    })
  })
}
module.exports = query

 

 

posted on 2021-01-14 15:43  Tsunami黄嵩粟  阅读(309)  评论(0编辑  收藏  举报