第十一章:接口

news2024/10/7 6:42:58

接口

文章目录

  • 接口
    • 一、简介
      • 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;

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

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

目的:两台华为交换机端口配置链路聚合 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配置…

产品经理用好AI,最关键的一个点

前言 AI大模型已经越来越强大了,我们要怎么才能把它变成生产力工具?根据最近的一个调研发现,即使是在产品经理这个群体里,能真正用好AI去激发生产力的人也只占6%,也就是说其实有94%的人都还不能很好的把生成式AI转化为…

个人博客测试用例设计

个人博客测试用例设计 个人博客测试用例 分别从功能、性能、安全、兼容及界面分别展开 个人博客测试用例

VST3音频插件技术介绍

一.概述 1.VST3介绍 VST3(Virtual Studio Technology 3)是一种音频插件格式,由Steinberg公司开发,用于在数字音频工作站(DAW)中使用。VST3插件可以是模拟合成器、鼓机、混响器、压缩器等多种类型的音频处理…

文件系统崩溃一致性、方法、原理与局限

前言 先提几个问题:什么是文件系统崩溃一致性?为什么会出现文件系统崩溃一致性问题?有哪些方法可以解这个问题?它们各自又有哪些局限性? window系统电脑异常后会蓝屏、手机死机卡顿后我们会手动给它重启,大…

VirtualStudio配置QT开发环境

环境 VirtualStudio2022Qt5.12.10 安装msvc工具链(这一步不是必须的) 打开virtual studio,打开Virtual Studio Installer界面选择要安装的msvc版本,点击安装 安装VirtualStudio扩展 在线安装 打开virtual Studio,…

Blurry - hackthebox

简介 靶机名称:Blurry 难度:中等 靶场地址:https://app.hackthebox.com/machines/605 本地环境 靶机IP :10.10.11.19 linux渗透机IP(kali 2024.2):10.10.16.17 windows渗透机IP(windows11&#xff0…

excel宏处理魔法代码,实现按月份统计销售额和按产品统计销售额

目录 前言第一步:打开文件第二步:选中左侧任意一个sheet双击第三步:粘贴 魔法代码第四步:点击菜单栏 运行>运行子程序和用户窗口第五步:切换回文件,我们就可以看到已经生成了月份销售额统计和产品销售额…

合合信息文档解析工具重磅升级!智能识别,效率翻倍!

官.网地址:合合TextIn - 合合信息旗下OCR云服务产品 智能文档处理(IDP)是利用人工智能技术,自动从复杂的非结构化和半结构化文档中抽取关键数据,并将其转换成结构化数据的技术。能够自动识别、提取并结构化处理文档中的关键信息。这种技术通常基于自然语言处理&…

经验分享,两个在线图片处理网站在线抠图和删除不需要的元素

分享两个好用的在线图片处理网站 1.在线抠图,图片背景消除 网址:https://www.remove.bg/zh 2.删除图片中不需要的对象、人物和文本。 网址:https://magicstudio.com/zh/magiceraser/

DLS平台:惠誉全球经济展望——今年调增至2.6%,明年调减!

摘要 尽管全球货币政策逐渐转向宽松,惠誉国际评级(Fitch Ratings)在最新的《全球经济展望》中对2024年全球经济增长进行了上调。然而,由于美国经济增速放缓和其他因素的影响,2025年的全球经济增长预期则被下调。这篇文…

最新Prompt预设词分享,DALL-E3文生图+文档分析

使用指南 直接复制使用 可以前往已经添加好Prompt预设的AI系统测试使用(可自定义添加使用) 支持GPTs SparkAi SparkAi创作系统是基于ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统,支持OpenAI-GPT全模型国内AI全模型。支持GPT-4o…

从零开始:精通基于大型语言模型(LLM)的Agent应用开发

一、引言 随着人工智能技术的飞速发展,大型语言模型(Large Language Model,简称LLM)已经成为自然语言处理(NLP)领域的核心技术之一。这些模型,如GPT、BERT等,通过大量的文本数据训练…

pop链详细分析、构造(以[NISACTF 2022]babyserialize为例)

目录 [NISACTF 2022]babyserialize (一)理清pop链(链尾 链头),标注步骤 1. 先找eval、flag这些危险函数和关键字样(这是链尾) 2.往eval()上面看 3.往$bb()上面看 4.往strtolower()上面看 …

自制调色小工具给图片加滤镜,修改图片红、绿、蓝通道及亮度,修改图片颜色

上篇: 上篇我们给地图添加了锐化、模糊等滤镜,这篇来写一个小工具给图片调色。 调色比锐化等滤镜要简单许多,直接拿到像素值修改即可。不需要用到卷积核。。。(*^▽^*) 核心原理就是图像结构,使用context.getImageData获取图像像…

热词排序算法——贝叶斯均值法

热词排序算法——贝叶斯均值法 贝叶斯均值法基本思想假设变量举例说明python实现 贝叶斯均值法 当前(例如今天)的某个词出现的频率相比于历史发生突增,那么这个词的热度上升。 当某个词历史出现的次数为0,而当前出现的次数为100…

超分辨率重建——2022冠军RLFN网络推理测试(详细图文教程)

💪 专业从事且热爱图像处理,图像处理专栏更新如下👇: 📝《图像去噪》 📝《超分辨率重建》 📝《语义分割》 📝《风格迁移》 📝《目标检测》 📝《暗光增强》 &a…

四十七、openlayers官网示例Image Filters——给地图添加锐化、浮雕、边缘等滤镜效果

官网demo示例: Image Filters 这篇讲的是如何给地图添加滤镜。 一看代码,,好家伙,信息量满满,全都看不懂。。。 咱只能一段一段扒。。。 首先添加一个底图到地图上,这个好理解。 const imagery new Til…

开源表单流程设计器:做好流程化办公 实现提质增效!

在社会竞争激烈的今天,如何通过各种渠道和方式实现提质增效?低代码技术平台、开源表单流程设计器的出现,正是助力企业实现流程化办公,进入数字化转型的得力助手。想要利用好企业内部数据资源,打破信息化孤岛&#xff0…

5个好用的AI绘画软件推荐,小白也能轻松上手

前言 随着人工智能技术的飞速发展,AI绘画软件已经成为艺术创作领域的新宠。这些软件不仅能够提供强大的绘画辅助功能,而且操作简便,即使是绘画新手也能轻松上手。本文将为您推荐5款好用的AI绘画软件,帮助您开启艺术创作的大门。 …