接口规范

随着前后端分离越来越普遍, 后端接口规范也就越来越重要了,一套良好的接口规范可以提升工作效率, 减少沟通障碍。通常我们都会采用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

使用Express写接口的更多相关文章

  1. express 写接口

    实例下载:百度云盘免密码 (): 指注释 一.准备工作 1.安装express npm install express -g npm install express-generator -g 2.初始 ...

  2. node+pm2+express+mysql+sequelize来搭建网站和写接口

    前面的话:在这里已经提到了安装node的方法,node是自带npm的.我在技术中会用es6去编写,然后下面会分别介绍node.pm2.express.mysql.sequelize.有少部分是摘抄大佬 ...

  3. 前端必备之Node+mysql+ejs模版如何写接口

    前端必备之Node+mysql+ejs模版如何写接口 这星期公司要做一个视频的后台管理系统, 让我用Node+mysql+ejs配合写接口, 周末在家研究了一下, 趁还没来具体需求把研究内容在这里分享 ...

  4. java为移动端写接口

    java作为一门后端语言,其厉害之处在于web,大家比较熟知的各种网络应用,java都能做,那么在这个移动优先的时代,如何继续发挥java的强大呢.通常是让java作为一个app的服务端,为app客户 ...

  5. 用yii2给app写接口(下)

    上一节里我们讲了如何用Yii2搭建一个能够给App提供数据的API后台应用程序.那么今天我们就来探讨下授权认证和通过API接口向服务器提交数据以及如何控制API接口返回那些数据,不能返回那些数据. 授 ...

  6. [MyBatis]DAO层只写接口,不用写实现类

    团队开发一个项目,由老大架了一个框架,遇到了DAO层不用写接口了,我也是用了2次才记住这个事的,因为自己一直都是习惯于写DAO层的实现类,所以,习惯性的还是写了个实现类.于是遇到错误了. 找不到那个方 ...

  7. JAVA写接口傻瓜(?)教程(一)

    当一个安卓开发人员/微信小程序开发者想做点什么的时候,如果他发现没有合适的接口,那么单机安卓.本地数据库emmm.没了接口就好像老人没了拐杖.盲人没了墨镜,完全可以称得上是举步维艰.生活艰难到需要自己 ...

  8. 跨域的案例 以百度接口/手写接口为例,还有jQuery写法

    仅在js部分输入即可 百度接口的案例 <script> function fn(data){ console.log(data) } </script> <script ...

  9. 【转载】php如何给APP端写接口

    如何写好接口 目的:清楚明白所写接口的用途 安全性:做好接口的安全性,防止接口数据泄露,做好必要的参数加密措施 按需分配: 接受值和返回值要实用,不接受和返回不需要的数据,返回值返回什么应与使用者时时 ...

  10. 使用python requests库写接口自动化测试--记录学习过程中遇到的坑(1)

    一直听说python requests库对于接口自动化测试特别合适,但由于自身代码基础薄弱,一直没有实践: 这次赶上公司项目需要,同事小伙伴们一起学习写接口自动化脚本,听起来特别给力,赶紧实践一把: ...

随机推荐

  1. python爬虫实战以及数据可视化

    需要准备的环境: (1)python3.8 (2)pycharm (3)截取网络请求信息的工具,有很多,百度一种随便用即可. 第一:首先通过python的sqlalchemy模块,来新建一个表. 第二 ...

  2. 使用pycuda替换字符串,使用cuda替换字符串

    写一个python的cuda程序,实现字符串列表的字符串替换,把所有的123替换成xinyuuliu 以下是一个简单的 Python CUDA 代码示例,用于实现字符串列表的字符串替换.它使用了 NV ...

  3. 【高级RAG技巧】在大模型知识库问答中增强文档分割与表格提取

    前言 文档分割是一项具有挑战性的任务,它是任何知识库问答系统的基础.高质量的文档分割结果对于显著提升问答效果至关重要,但是目前大多数开源库的处理能力有限. 这些开源的库或者方法缺点大致可以罗列如下: ...

  4. 《Effective C#》系列之(零)——概要

    把全书的内容讲述完整可能需要很长时间,我可以先回答主要目录和核心的内容.如果您有任何特定问题或需要更详细的解释,请告诉我. <Effective C#>一书共包含50条C#编程建议,以下是 ...

  5. 三款免费强大的SSH工具食用指南

    食用清单 XShell FinalShell Electerm 食用方案 XShell 先说说老牌ssh工具XShell吧,用过很多年,说实话没啥别的毛病挺好用的.不过,还是有些地方有待加强,比如文件 ...

  6. CF1995E Long Inversions(贪心 + 差分)

    见代码 点击查看代码 //背景:夸一下自己,CF1955A~E均是自己想出来的,这道题思路是自己想的,唯一没想到用差分数组维护 //原理:贪心(想最左边的1开始,不可能对其左边包括自己操作了,否则又要 ...

  7. vue+vant+js实现购物车原理小demo(中级版有选择)

    增加只计算已选的的购物车商品功能.效果图: main.js: Vue.use(Stepper); Vue.use(Checkbox); Vue.use(CheckboxGroup); 上代码: < ...

  8. Python多线程编程深度探索:从入门到实战

    title: Python多线程编程深度探索:从入门到实战 date: 2024/4/28 18:57:17 updated: 2024/4/28 18:57:17 categories: 后端开发 ...

  9. JAVA也能用上Seq啦

    前言 在.NET生态中,Serilog凭借其强大的结构化日志记录功能和与Seq的无缝集成,已经成为许多开发者的首选日志记录工具.Seq作为一个日志检索和仪表板工具,能够将日志中的插值转换为结构化数据, ...

  10. linux系统共享文件夹到局域网

    python3 -m http.server https://blog.csdn.net/a772304419/article/details/113338103 Debian下配置Samba服务器 ...