【Linux】搭建Yapi接口管理工具

2023-05-16

在年前员工访谈时发现,前后端协作开发会出现一定的内耗现象,在当前前后端分离的情况下前端往往会因为后端接口存在问题影响对接速度,在接口设计不明确的情况下还需要反复确认和沟通。公司过往使用ApiManager做接口信息归档,然而ApiManager无法做到在线调试和验证。在经过一段时间调研后最终选择了Yapi作为ApiManager的后继者(说白了又不想花钱,又要功能齐全的话开源的Yapi不失为一个比较理想的解决方案)。

那为什么不直接在项目中使用SwaggerUI呢?随项目启动且不用额外编写接口信息,通过注解就直接解决大部分文字注释的问题,并且可以直接对项目进行调试非常方便。
首先并不是SwaggerUI不好用,这边主要考虑的点有几个:

  1. Swagger是非必要依赖,整合它不会在性能上给到项目提升,反而会在加载的时候给额外分配资源(AutoConfigure会加载),在生产环境上是没有必要的;
  2. 接口信息不能随意暴露出来,譬如现在在测试环境有个项目整合了Swagger,而这个项目由于需要演示进行了外部映射,这个时候外网就能够扫描到Swagger的页面和接口地址,从而增加了运维面临的风险,同理生产环境下也是如此。当然了,在生产的环境下把Swagger做成配置型开启和关闭就可以了。是的,这样做是可以的,但是这样集成它又何苦呢;
  3. 接口信息属于项目组织过程资产的一部分,你项目停了就不能看了,也不能归档了?
  4. 一般代码中是不建议写中文的,这个看过编码规范的都知道;

…除了这些还有很多很多,就不一一举证了。

但是在搭建Yapi的过程中也不是一帆风顺的(按照网上提供的搭建文章来一步一步做还是没有办法完整整合插件,最后只能靠猜给搞定了),下面就讲讲这个Yapi是如何搭建的。

首先为了方便我这边下载MongoDB的Docker镜像并部署:

docker pull mongo:latest

创建挂载目录并启动mongodb

mkdir -p /data/docker/mongodb

docker run -p 27017:27017 -name mongodb -v /data/docker/mongodb:/data/db -d mongo:latest

这样就可以了,先不用初始化mongodb因为后面cli安装时会初始化的。接着就安装nodejs和npm,这个比较简单就不详说了。在安装好nodejs之后就可以通过命令安装yapi

npm install -g yapi-cli --registry https://registry.npm.taobao.org

到此之外的安装都比较顺利,但是要注意安装后的yapi-cli执行文件是否有创建软连接到/usr/bin目录下,如果没有的话自己通过ln -s创建两个软连接到/usr/bin目录底下,一个命名为yapi,另一个命名为yapi-cli。接下来就可以通过yapi server启动初始化界面。接着就可以通过访问http://xxx.xxx.xxx.xxx:9090就能够访问到部署页面,如下图:
image.png

到了这个环节就可以按照界面提示进行配置。在完成平台部署后先找到安装目录,并通过以下命令启动Yapi:

nohup node vendors/server/app.js &

之后就能够通过http://xxx.xxx.xxx.xxx:3000访问到Yapi页面了。如下图:
image.png
登录账号是“管理员邮箱”,密码初始化为ymfe.org.自此Yapi算是搭建ok了,但是真正困难的来了。

由于管理系统一般都需要登录后访问,为的是拿到一个token信息。而接口调试时为了尽可能贴近真实场景也需要先获取token后再触发接口请求,因此每一次都需要重复“先登录,拷贝token,粘贴到接口header,再触发接口”是非常麻烦。因此需要在Yapi中安装一个插件使其在每一次请求前都先自动获取token,那就不用人手去“复制、粘贴”了。
还好为了解决这个问题yapi提供了一个yapi-plugin-interface-oauth2-token的插件,如下图:
image.png

本想按照npm官网提示去做,结果还出现的各种报错。根据上图中版本描述所说,最新的插件版本在2020年10月,也就是说近1年多2年没有更新了。在使用

yapi plugin --name yapi-plugin-interface-oauth2-token

命令安装时先是报node-sass组件“访问权限不足”的问题,接着在命令前面加上sudo后又引发了新的问题…
通过npm rebuild node-sass后还是出现错误。在经过sudo npm audit fix修复后接着就尝试修改yapi-plugin-interface-oauth2-token的版本为1.2.3(因为npm官网说如果用yapi plugin升级不行就将yapi-plugin-interface-oauth2-token降级为1.2.3之后删除node_modules文件夹重新npm install)结果还是不行。
多次尝试无果后我就想会不会是我yapi的版本太高而插件的版本太低导致的,结果将yapi版本换为1.9.2(2022年5月版本),在安装完yapi之后再尝试进行插件的整合,结果还是报各种异常。
最终还是用回yapi和插件的最新版本,虽然结果跟第一次一样,如下图:
image.png
但是根据这个编译结果还是看出了点端倪,于是我对源码进行了修改,先是componentWillMount替换成UNSAFE_componentWillMount,再将componentWillReceiveProps替换成UNSAFE_componentWillReceiveProps,全部替换后重新进行插件安装基本上所有的编译问题都已经解决了,就还剩下

Module parse failed: /data/yapi/vendors/node_modules/swagger-client/lib/resolver.js Unexpected token (119:38)
You may need an appropriate loader to handle this file type.
SyntaxError: Unexpected token (119:38)

这个问题。经过排查发现这个是因为swagger-client未能固定好版本引起的,于是修改了package.json中有关swagger-client的版本信息固定其为3.5.1版本后再尝试安装插件,结果就编译成功了。如下图:
image.png
编译成功后进入到yapi目录重新通过node vendors/server/app.js启动程序后就会发现在设置中多了个tab,如下图:
image.png
至此插件安装和yapi安装都完成了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【Linux】搭建Yapi接口管理工具 的相关文章

  • 确定 TCP Listen() 队列中当前积压的连接数

    有没有办法找出currentLinux 上 TCP 套接字上等待 Accept 的连接尝试次数 我想我可以在每个事件循环上点击 EWOULDBLOCK 之前计算成功的 Accept 数量 但我使用的是隐藏这些细节的高级库 Python Tw
  • Pthreads - 高内存使用率

    我正在用 C 编写一些东西 在 256Mb 系统上的 Linux 中创建大量 Pthread 我通常有 200Mb 的免费空间 当我使用少量线程运行该程序时 它可以工作 但是一旦我让它创建大约 100 个线程 它就会出现错误 因为系统内存不
  • 应用程序中两个不同版本的库

    考虑一个场景 其中有两个不同版本的共享库 考虑 A 1 so 链接到 B so A 2 so 链接到 C so 现在 B so 和 C so 都链接到 d exe 当 B so 想要调用 A 1 so 中的函数时 它最终会调用 A 2 so
  • 如何将一个文本文件拆分为多个 *.txt 文件?

    我有一个文本文件file txt 12 MB 包含 something1 something2 something3 something4 有没有办法分开file txt分成 12 个 txt 文件 比方说file2 txt file3 t
  • 对于任何真实数据集,数据压缩比的最小可能值是多少

    我在写信ZLIB类似于嵌入式硬件压缩器的 API 它使用 deflate 算法来压缩给定的输入流 在进一步讨论之前 我想解释一下数据压缩率 数据压缩率定义为未压缩大小与压缩大小之间的比率 压缩比通常大于一 这意味着压缩数据通常比未压缩数据小
  • 使用脚本检查 git 分支是否领先于另一个分支

    I have branch1 and branch2我想要某种 git branch1 isahead branch2 这将显示如果branch1已承诺branch2没有 也可能指定这些提交 我无法检查差异原因branch2 is在之前br
  • 使用 ioctl 在 C++ 中以编程方式添加路由

    我编写了简单的 C 函数 添加了新路线 void addRoute int fd socket PF INET SOCK DGRAM IPPROTO IP struct rtentry route memset route 0 sizeof
  • 在ubuntu中打开spyder

    我想在ubuntu中打开spyder Python IDE 通常我会在 shell 中编写 spyder 它会打开spyder IDE 现在 当我在shell中编写spyder时 它只是换行 什么也没有发生 类似于按 enter 我如何找回
  • bash 将输出重定向到文件,但结果不完整

    重定向命令输出的问题已经被问过很多次了 但是我有一个奇怪的行为 我使用的是 bash shell debian 版本 4 3 30 1 release 并尝试将输出重定向到文件 但并非所有内容都记录在文件中 我尝试运行的 bin 文件是 l
  • 如何从 Bash 命令行在后台 Vim 打开另一个文件?

    我正在从使用 Gvim 过渡到使用控制台 Vim 我在 Vim 中打开一个文件 然后暂停 Vim 在命令行上运行一些命令 然后想返回到 Vim Ctrl Z 在正常模式下 暂停 Vim 并返回到控制台 fg可用于将焦点返回到 Vim job
  • Python glob,操作系统,相对路径,将文件名放入列表中[重复]

    这个问题在这里已经有答案了 我正在尝试创建一个目录中所有文件的列表 其中文件名以 root 结尾 在阅读了论坛中的一些文章后 我尝试使用 glob 和 os listdir 的基本策略 但我都遇到了麻烦 首先 当我使用 import glo
  • 在 x86 汇编语言中获取文件大小的简单方法

    假设我已经在汇编中打开了一个文件 并且在寄存器 eax 中有该文件的文件句柄 我将如何获取文件的大小 以便为其分配足够的缓冲区空间 我在这里研究了另一个讨论 建议使用sys fstat 28 系统调用来获取文件统计信息但无法实现它 My a
  • 为 Linux 编译 Objective-C 应用程序(API 覆盖范围)

    我可能在这里问一些奇怪的问题 但我不确定从哪里开始 问题是我正在考虑使用 Obj C 和 Foundation 类在 Mac 上编写一个命令行工具 但存在一个非常大的风险 那就是我希望能够为不同的 Linux 发行版编译它 以便将来作为服务
  • Linux 使用 boost asio 拒绝套接字绑定权限

    我在绑定套接字时遇到问题 并且以用户身份运行程序时权限被拒绝 这行代码会产生错误 acceptor new boost asio ip tcp acceptor io boost asio ip tcp endpoint boost asi
  • 为什么 fork 炸弹没有使 android 崩溃?

    这是最简单的叉子炸弹 我在许多 Linux 发行版上执行了它 但它们都崩溃了 但是当我在 android 终端中执行此操作时 即使授予后也没有效果超级用户权限 有什么解释为什么它没有使 Android 系统崩溃吗 一句话 ulimit Li
  • awk 在循环中使用时不打印任何内容[重复]

    这个问题在这里已经有答案了 我有一堆使用 file 1 a 1 txt 格式的文件 如下所示 A 1 B 2 C 3 D 4 并使用以下命令添加包含每个文件名称的新列 awk print FILENAME NF t 0 file 1 a 1
  • vmsplice() 和 TCP

    在原来的vmsplice 执行 有人建议 http lwn net Articles 181169 如果您的用户态缓冲区是管道中可容纳的最大页面数的 2 倍 则缓冲区后半部分成功的 vmsplice 将保证内核使用缓冲区的前半部分完成 但事
  • 批量删除文件名中包含 BASH 中特殊字符的子字符串

    我的目录中有一个文件列表 opencv calib3d so2410 so opencv contrib so2410 so opencv core so2410 so opencv features2d so2410 so opencv
  • Linux 中 m 标志和 o 标志将存储在哪里

    我想知道最近收到的路由器通告的 m 标志和 o 标志的值 从内核源代码中我知道存储了 m 标志和 o 标志 Remember the managed otherconf flags from most recently received R
  • FileOutputStream.close() 中的设备 ioctl 不合适

    我有一些代码可以使用以下命令将一些首选项保存到文件中FileOutputStream 这是我已经写了一千遍的标准代码 FileOutputStream out new FileOutputStream file try BufferedOu

随机推荐

  • Debian DNS完整配置

    DNS服务 执行下面的命令安装 apt install y bind9 dnsutils 这些文件分别对应的作用如下 xff1a db 127 反向区域数据库 xff0c 用于将ip解析为对应的域名 db local 正向区域数据库 xff
  • 树莓派4B:跑通Paddle-Lite-Demo

    上周跟以前单位的大神见面 xff0c 期间大神聊到了百度飞桨框架 xff0c 并建议我看看能不能做点什么有意思的东西跑在树莓派上 大神就是大神 xff0c AI是我等学渣也配玩的吗 不过既然大神都这么推荐了那就尝试一下 xff0c 大不了从
  • 在NUC8上折腾安装Windows Server 2019

    整理我的吃灰物资时意外发现还有个八代的NUC迷你主机 想着现在内存和SSD都不贵 xff0c 干脆升级了然后装个Windows Server 2019玩玩 xff0c 跑个Hyper V做些实验 于是买了2根16G 2400的内存和1条1T
  • Ubuntu上跑通PaddleOCR

    书接上文 刚才说到我已经在NUC8里灌上了Windows Server 2019 接下来也顺利的启用了Hyper V角色并装好了一台Ubuntu 22 04 LTS 的虚机 由于自从上回在树莓派上跑通了Paddle Lite Demo之后想
  • 树莓派4:跑通Tensorflow的Sequential模型用于图片分类

    重要提示 xff1a 由于树莓派相对孱弱的性能 xff0c 直接在其上训练模型可能花 xff08 lang4 xff09 费非常长的时间 本文仅作为示例性的可行性参考 xff0c 请酌情考虑实验平台 著名的Tensorflow框架也可以运行
  • C# + .Net6 实现TensorFlow图片分类

    微软官网上发现一篇很有意思的文档 xff1a 教程 xff1a 用于对图像进行分类的 ML NET 分类模型 ML NET Microsoft Learn 这篇教程写的很学院派 xff0c 但有点碎 xff0c 属于上课不能打一秒钟瞌睡的那
  • 如何用一个废旧的笔记本打造一个家庭网络服务器?

    本来好好的笔记本的 xff0c 可偏偏屏幕说烂就烂 xff0c 那就干脆不要了 xff0c 改造改造吧 xff01 他本来长这样的 xff0c 如图 xff1a 什么 xff0c 你看见了水印 老哥 xff0c 别在意这些细节 简单说一下配
  • 基于Swing与MySQL之货物仓库管理系统(可为Java大作业、甚至毕业设计)

    前言 xff1a 该系统总代码行数约2100行 xff0c 采用技术栈为Swing框架与MySQL xff0c 编码环境为Eclipse 实现的功能有 xff1a 用户注册 登陆 xff1b 货物入仓 货物出仓 xff0c 货物信息更新与货
  • 使用MySQL WorkBench 如何导出数据库(包括数据)

    1 xff1a 打开MySQL WorkBench后 xff0c 选中Server xff0c Data Export 2 xff1a 在红色圈1内选中我们要导出的数据库 红色圈2是导出是否包含数据 xff1b 红色圈3是触发器等导出选项
  • Swift 如何生成随机数

    1 生成Int类型随机数 span class token keyword var span numberOne span class token punctuation span span class token builtin Int
  • Failed to start remote service “com.apple.debugserver“ on device.

    今天用真机调试时报出 Failed to start remote service com apple debugserver on device 百思不得解 遂关机重启 xff0c 果然运行成功 猜测可能是真机长时间没关机 xff0c 一
  • debian静态路由

    实验环境 xff1a 三台Debian最小化系统 xff0c 物理机是两张不同的网卡 第一台的第一张vm1网卡 192 168 10 1 24 第二台的第一张vm1网卡 192 168 10 254 24 第二台的第二张vm2网卡 192
  • 行列式与矩阵

    说明 xff1a 本公式只针对在二维或三通道的计算机视觉中所遇到的问题 xff0c 不代表传统意义上数学知识点范围 行列式 行列式概念 矩阵的行列式 xff0c 称之为det xff0c 是基于矩阵所包含的行列数据计算得到的标量 本质上是一
  • 基于SpringBoot与iOS(Swift)的电商平台设计

    技术栈 xff1a Server SpringBootSpring Data JPARedis简易分词 Client MVC架构SnpakitAlamofireSwiftyJSONkingfser xff08 过小的第三方库不阐述 xff0
  • 推荐系统 Mahout入门之简单使用

    Mahout xff1a Apache Mahout 是 Apache Software Foundation xff08 ASF xff09 旗下的一个开源项目 xff0c 提供一些可扩展的机器学习领域经典算法的实现 xff0c 旨在帮助
  • Command CompileSwiftSources failed with a nonzero exit code

    报错 xff1a Command CompileSwiftSources failed with a nonzero exit code 原因 xff1a 可能是项目目录下存在 同名不同文件夹的文件 解决方法 xff1a 检查 同名不同文件
  • Flutter 自定义SwitchButton

    效果 xff1a xff08 AppBar中间的SwitchButton xff09 代码 xff1a span class token keyword import span span class token string literal
  • diff算法swift版

    前几天用chatgpt生成diff算法 xff0c 配上swift的简洁语法 xff0c 可以称之为锦上添花 下面是代码 xff1a span class token keyword func span span class token f
  • Flutter 调用摄像头扫描二维码插件

    原生平台如果想要实现二维码扫描很简单 xff0c 例如iOS可以根据Version库或者AVFoudation库很快定制出相应工具来 xff0c Flutter只能依赖第三方插件了 插件依赖 xff1a span class token k
  • 【Linux】搭建Yapi接口管理工具

    在年前员工访谈时发现 xff0c 前后端协作开发会出现一定的内耗现象 xff0c 在当前前后端分离的情况下前端往往会因为后端接口存在问题影响对接速度 xff0c 在接口设计不明确的情况下还需要反复确认和沟通 公司过往使用ApiManager