第十一章:接口

接口

文章目录

  • 接口
    • 一、简介
      • 1.1 接口是什么
      • 1.2 接口的作用
      • 1.3 接口的开发与调用
      • 1.4 接口的组成
    • 二、RESTful API
    • 三、json-server
    • 四、接口测试工具
    • 五、接口的创建

一、简介

1.1 接口是什么

接口是前后端通信的桥梁

简单理解:一个接口就是 服务中的一个路由规则,根据请求响应结果

接口的英文单词是 API(Application Program Interface),所以有时也称之为 API 接口

这里的接口指的是『数据接口』,与编程语言(Java、Go等)中的接口语法不同

1.2 接口的作用

实现 前后端通信

接口的作用

1.3 接口的开发与调用

大多数接口都是由 后端工程师开发的,开发语音不限

一般情况下接口都是由**前端工程师调用的,但有时后端工程师也会调用接口**,比如短信接口、支付接口等

1.4 接口的组成

一个接口一般由如下几个部分组成:

  • 请求方法
  • 接口地址(URL)
  • 请求参数
  • 响应结果

一个接口示例:身份证查询

接口示例

体验一下:https://api.asilu.com/idcard/?id=152502199405148245

二、RESTful API

RESTful API 是一种特殊风格的接口,主要特点有如下几个:

  • URL 中的路径表示 资源,路径中不能有 动词,例如 create、delete、update 等这些都不能有
  • 操作资源要与 HTTP 请求方法 对应
  • 操作结果要与 HTTP 响应状态码 对应

规则示例:

操作请求类型URL返回
新增歌曲POST/song返回新生成的歌曲信息
删除歌曲DELETE/song/10返回一个空文档
修改歌曲PUT/song/10返回更新后的歌曲信息
修改歌曲PATCH/song/10返回更新后的歌曲信息
获取所有歌曲GET/song返回歌曲列表数组
获取单个歌曲GET/song/10返回单个歌曲信息

扩展阅读:RESTful API 设计指南

三、json-server

json-server 本身是一个 JS 编写的工具包,可以快速搭建 RESTful API 服务(json-server 官方地址)

操作步骤:

  1. 全局安装 json-server

    npm i -g json-server
    
  2. 创建 JSON 文件(db.json),编写基本结构

    {
        "song": [
            {
                "id": 1,
                "name": "干杯",
                "singer": "五月天"
            },
            {
                "id": 2,
                "name": "当",
                "singer": "动力火车"
            },
            {
                "id": 3,
                "name": "不能说的秘密",
                "singer": "周杰伦"
            }
        ]
    }
    
  3. 以 JSON 文件所在文件夹作为工作目录,执行如下命令

    json-server --watch db.json
    

默认监听端口为 3000

四、接口测试工具

介绍几个接口测试工具:

  • apipost (中文)
  • apifox (中文)
  • postman (英文)

五、接口的创建

以“记账本”为例,来创建账单接口:(以 RESTful API 规则来创建接口)

  • 获取账单列表接口
  • 创建账单接口
  • 删除账单接口
  • 获取单条账单接口
  • 更新单个账单接口
  1. 首先在 routes 文件夹下创建 web 文件夹,用来管理网页端的路由规则的文件;再创建 api 文件夹,用来管理接口的路由规则的文件:

    创建api和web

  2. 创建接口路由规则文件 account.js,与账单相关的接口会放到该文件下

  3. 将 account.js 导入到 app.js 中并使用它:

    // 导入 account 接口路由文件
    const accountRouter = require('./routes/api/account')
    
    // 使用 account 接口路由文件
    app.use('/api', accountRouter)
    
  4. 对 account.js 开始创建接口路由规则,其接口路由规则的格式如下:(按照 RESTful API 规则创建接口

    使用 res.json() 来直接返回一个 json 格式的数据:(补充:render 和 json 不能同时使用

    res.json({
        // 响应编号(一般用 20000 或 0000 来表示成功;用 1001~100n 来表示失败)
        code: 'xxxx',
        // 响应的信息(成功的信息|失败的信息)
        msg: 'xxxx',
        // 响应的数据(成功为获取到的 json 数据或空对象;失败为 null)
        data: xxxx
    })
    

    比如:设置获取所有账单的接口

    router.get('/account', function (req, res) {
      AccountModel.find().sort({ time: -1 }).then((data) => {
        // 成功的响应
        res.json({
          // 响应编号(一般用 20000 或 0000 来表示成功)
          code: '0000',
          // 响应的信息
          msg: '读取成功',
          // 响应的数据
          data: data
        })
      }).catch(() => {
        // 失败的响应
        res.json({
          code: '1001',
          msg: '读取失败',
          data: null
        })
      })
    })
    
  5. 进行接口测试:(注意:进行接口测试时,需要将数据库启动以及 http 服务也要启动

代码示例:

/**
 * 该文件是用来创建记账单接口:
 *      1.获取账单列表接口
 *      2.创建账单接口
 *      3.删除账单接口
 *      4.获取单条账单接口
 *      5.更新单个账单接口
 */
var express = require('express');
var router = express.Router();

// 导入 moment  --- 用来修改时间的格式
const moment = require('moment')
// 导入 AccountModel
const AccountModel = require('../../model/AccountModel')

// 1.获取账单列表接口
router.get('/account', function (req, res) {
  AccountModel.find().sort({ time: -1 }).then((data) => {
    // 成功的响应
    res.json({
      // 响应编号(一般用 20000 或 0000 来表示成功)
      code: '0000',
      // 响应的信息
      msg: '读取成功',
      // 响应的数据
      data: data
    })
  }).catch(() => {
    // 失败的响应
    res.json({
      code: '1001',
      msg: '读取失败',
      data: null
    })
  })
});

// 2.创建账单接口
router.post('/account', (req, res) => {
  AccountModel.create({
    ...req.body,
    // 修改 time 的值
    time: moment(req.body.time).toDate()
  }).then((data) => {
    // 成功提醒
    res.json({
      code: '0000',
      msg: '创建成功',
      data: data
    })
  }).catch(() => {
    res.json({
      code: '1002',
      msg: '创建失败',
      data: null
    })
  })
})

// 3.删除账单接口
router.delete('/account/:id', (req, res) => {
  // 获取要删除记录的id
  let id = req.params.id
  // 删除数据库中的数据
  AccountModel.deleteOne({ _id: id }).then(() => {
    // 删除提醒
    res.json({
      code: '0000',
      msg: '删除成功',
      data: {}
    })
  }).catch(() => {
    res.json({
      code: '1003',
      msg: '删除失败',
      data: null
    })
  })
})

// 4.获取单条账单接口
router.get('/account/:id', (req, res) => {
  // 获取单条账单的 id
  let id = req.params.id
  // 根据 id 去查询对应的账单
  AccountModel.findById(id).then((data) => {
    // 成功响应
    res.json({
      code: '0000',
      msg: '查询成功',
      data: data
    })
  }).catch(() => {
    // 失败响应
    res.json({
      code: '1004',
      msg: '查询失败',
      data: null
    })
  })
})

// 5.更新单个账单接口(patch:局部更新  put:整体替换掉)
router.patch('/account/:id', (req, res) => {
  // 获取单条账单的 id
  let { id } = req.params
  // 根据 id 去更新账单信息
  AccountModel.updateOne({ _id: id }, req.body).then(() => {
    // 再次查询数据库,来获取更新后的账单信息
    AccountModel.findById(id).then((data) => {
      res.json({
        code: '0000',
        msg: '更新成功',
        data: data
      })
    }).catch(() => {
      res.json({
        code: '1004',
        msg: '查询失败',
        data: null
      })
    })
  }).catch(() => {
    res.json({
      code: '1005',
      msg: '更新失败',
      data: null
    })
  })
})

module.exports = router;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/721110.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

十分钟学会微调大语言模型

有同学给我留言说想知道怎么训练自己的大语言模型,让它更贴合自己的业务场景。完整的大语言模型训练成本比较高昂,不是我们业余玩家能搞的,如果我们只是想在某个业务场景或者垂直的方面加强大模型的能力,可以进行微调训练。 本文…

ssl证书能认证多少个域名

SSL证书能认证的域名数量取决于SSL证书的类型。不同类型的SSL证书支持不同数量的域名: SSL证书,作为网络安全的基石之一,起着至关重要的作用。它通过为网站提供加密连接,确保数据传输的安全性和完整性,同时验证网站的真…

spark常见问题

写文章只是为了学习总结或者工作内容备忘,不保证及时性和准确性,看到的权当个参考哈! 1. 执行Broadcast大表时,等待超时异常(awaitResult) 现象:org.apache.spark.SparkException: Exception…

答应我,完成单位投稿任务用对的方法别让自己受投稿之苦

在这个信息爆炸的时代,单位的形象塑造与品牌传播已成为不可忽视的关键环节。作为单位的信息宣传员,我深知每一次对外发声的重要性,它不仅是展示我们工作成果的窗口,更是连接公众、塑造品牌形象的桥梁。然而,在传统的投稿方式中,尤其是依赖于邮箱投稿,我经历了太多次的挫败与无奈…

LeetCode 算法:合并两个有序链表 c++

原题链接🔗:合并两个有序链表 难度:简单⭐️ 题目 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例 1: 输入:l1 [1,2,4], l2 [1,3,4] 输出:…

PHP学习笔记--初学

笔录:我是从黑马里面找的资料学习的,如果有人看我的笔记话,建议去看黑马程序课程,更详细一些。 目录 php定义,平台支持: 静态网站: 动态网站: 服务器概念: IP的概念…

JavaFX 分隔符

Separator类表示水平或垂直分隔线。它分割元素,不产生任何动作。 我们可以设计风格,应用视觉效果,并为分隔符设置动画。 默认情况下,分隔符是水平的。我们可以使用setOrientation方法改变它的方向。 Separator类扩展了Node类。…

2024/6/18(RBAC,查询用户权限,细粒度授权,选课,支付宝生成二维码支付,支付结果查询需要内网穿透)

黑马程序员【学成在线项目】,P141 测试沙箱支付宝_黑马学成在线支付宝沙箱-CSDN博客 需要内网穿透

reverse-android-实战喜马拉雅-ollvm

资料 1. apk: com.ximalaya.ting.android.apk. 2020年8月 可以使用 2. 抓包分析 java层分析 so层分析 登录的算法so是在 liblogin_encrypt.so中。 32位的, 用 IDA打开,查看 静态的导出函数。 打开 一个 首先看到 IDA VIEW 是一个横向 比较多的分支&am…

【3D模型库】机械三维模型库整理

1 开拔网 简介:开拔网是中国较早的机械设计交流平台,广受行业内的各个大学,公司以及行业人士的欢迎。网站有非常丰富的3D模型,CAD图纸,以及各类热门软件的下载。同时我们也为行业搭建一个平台,提供各类设计…

AI智能盒子助力中钢天源设备工厂升级安全防护

中钢集团安徽天源科技股份有限公司成立于2002年3月27日,是中央企业中国中钢股份有限公司控股的上市公司,主导产品为永磁铁氧体器件、钕铁硼器件、四氧化三锰、锶铁氧体预烧料及各类磁选机等。 在中钢天源智能化升级过程中,采用并定制开发一系列厂区安全…

【C++】Template模板

创作不易&#xff0c;本篇文章如果帮助到了你&#xff0c;还请点赞 关注支持一下♡>&#x16966;<)!! 主页专栏有更多知识&#xff0c;如有疑问欢迎大家指正讨论&#xff0c;共同进步&#xff01; &#x1f525;c系列专栏&#xff1a;C/C零基础到精通 &#x1f525; 给大…

【Spine学习12】之 事件帧

1、新建事件帧&#xff1a; 2、选择第8s的攻击帧&#xff0c;点击第一步新建的attack事件帧前面的钥匙 这样每次动作到8s的时候会自动跳出事件帧提示 这个文字实际动画不会显示 事件是动画过程中所发生情况的触发器。 给程序员识别的

C++使用教程

目录 一、软件使用 二、C基础规则补充 关键字 整型取值范围 浮点型取值范围 字符型使用规则 字符串型使用规则 布尔类型 常用的转义移字符 三、数组、函数、指针、结构体补充 1.数组 2.函数 声明&#xff1a; 分文件编写&#xff1a; 值传递&#xff1a; 3.指…

省市县选择三级联动(使用高德API实现)

省市县选择如果自己实现是比较麻烦的&#xff0c;最近发现可以使用高德实现省市县联动选择&#xff0c;实现后来记录一下供大家参考。 文章目录 最终效果&#xff1a;一、准备工作二、完整页面代码 最终效果&#xff1a; 实现单次点击获取省市县名称&#xff0c;选择完成后返回…

【串口通信-USART】

串口通信 前言一、串行通信和并行通信二、波特率三、USRAT如何实现USART 四、通信的时候共地五、奇偶校验位总结 前言 大三上时候的笔记⇨32入门-串口通信-发送和接收数据&#x1f31f;更加偏向32部分的吧。 大三上左右的时候写过串口通信的笔记&#xff0c;那时候虽然青涩啥也…

多路h265监控录放开发-(1)建立head窗口并实现鼠标拖动整个窗口

头文件&#xff1a; //鼠标事件 用于拖动窗口//一下三个函数都是QWidget的可重载成员函数void mouseMoveEvent(QMouseEvent* ev) override;void mousePressEvent(QMouseEvent* ev) override;void mouseReleaseEvent(QMouseEvent* ev) override; 源文件&#xff1a; / /// 鼠标…

运算放大器共模抑制比(CMRR)

目录 运算放大器共模抑制比(CMRR) 三运放共模抑制比电路 运算放大器共模抑制比(CMRR) 如果信号均等施加至运算放大器的两个输入端&#xff0c;使差分输入电压不受影响&#xff0c;则输出也不应受影响。实际上&#xff0c;共模电压的变化会引起输出变化。运算放大器共模抑制比…

Locust框架

Locust 简介&#xff1a;是一个Python的第三方库&#xff0c;专门用来进行性能并发测试 Locust特点&#xff1a; 基于Python的开源负载测试工具支持多种操作系统支持二次开发能够模拟更多用户基于协程&#xff08;微线程&#xff09;的并发 Jmeter与Locust对比 Locust安装 …

7.华为交换机端口配置链路聚合Eth-trunk

目的&#xff1a;两台华为交换机端口配置链路聚合 LSW1配置 [Huawei]interface Eth-Trunk 1 [Huawei-Eth-Trunk1]q [Huawei]int g0/0/1 [Huawei-GigabitEthernet0/0/1]eth-trunk 1 [Huawei-GigabitEthernet0/0/1]int g0/0/2 [Huawei-GigabitEthernet0/0/2]eth-trunk 1LSW2配置…