接口规范

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

    一.是什么 在浏览器事件循环中,我们了解到javascript在浏览器中的事件循环机制,其是根据HTML5定义的规范来实现 而在NodeJS中,事件循环是基于libuv实现,libuv是一个多平台的专 ...

  2. Redis持久化技术浅析

    Redis是一种内存数据库,数据都存储在内存中,因此可以快速地直接基于内存中的数据结构进行高性能的操作,但是所有数据都在内存中,一旦服务器宕机,内存中的数据就会全部丢失,数据将无法恢复,因此Redis ...

  3. MySQL正则表达式:REGEXP 和 LIKE

    正则表达式作用: 根据指定的匹配模式匹配文中符合要求的特殊字符. REGEXP : ①操作符中常用的匹配列表: ②匹配特殊字符使用\\进行转义 \\.   能够匹配 . \\f   换页 \\n 换行 ...

  4. 牛客网-SQL专项训练8

    ①在SQL中用条件表示价格在在30至40之间,应该如何表达(B) 解析:IN 与BETWEEN AND的区分 (数字型) 1.in (xx,xx,xx,...)  通常是不连续的,in(30,40)要 ...

  5. 模拟IDC spark读写MaxCompute实践

    简介: 现有湖仓一体架构是以 MaxCompute 为中心读写 Hadoop 集群数据,有些线下 IDC 场景,客户不愿意对公网暴露集群内部信息,需要从 Hadoop 集群发起访问云上的数据.本文以 ...

  6. Flink CDC 2.0 正式发布,详解核心改进

    简介: 本文由社区志愿者陈政羽整理,内容来源自阿里巴巴高级开发工程师徐榜江 (雪尽) 7 月 10 日在北京站 Flink Meetup 分享的<详解 Flink-CDC>.深入讲解了最新 ...

  7. 37 手游基于 Flink CDC + Hudi 湖仓一体方案实践

    ​简介: 介绍了 37 手游为何选择 Flink 作为计算引擎,并如何基于 Flink CDC + Hudi 构建新的湖仓一体方案. 本文作者是 37 手游大数据开发徐润柏,介绍了 37 手游为何选择 ...

  8. [Caddy2] The Caddy Web Server 常见 Caddyfile 模式

    Caddyfile 是 JSON 配置的易用写法,支持通常用的功能,完整功能还是需要 JSON 配置的. 以下适用于 Caddy2 版本的配置. 静态文件服务器 example.com root * ...

  9. 记联软 UniAccess 导致 NSIS 安装包启动进程失效

    本文记录联软 UniAccess 注入的 C:\Window\LVUAAgentInstBaseRoot\syswow64\MozartBreathCore.dll 导致 NSIS 安装包启动进程失效 ...

  10. C# dotnet 的锁 SemaphoreSlim 和队列

    本文主要是试验在顺序进入等待 SemaphoreSlim 的任务是否会按照顺序经过锁执行 我在一个有趣的WPF程序里面,需要限制任务同时执行的线程数量,不然用户就会说用我的程序会让电脑卡渣.而我的任务 ...