草庐IT

【团队协作】都2022年了,前后端合作开发还不使用Apifox?

海底烧烤店ai 2023-04-21 原文

🧧 加入社区领红包:海底烧烤店ai(从前端到全栈)
🧑‍💼个人简介:即将大三的学生,一个不甘平庸的平凡人🍬
👉 你的一键三连是我更新的最大动力❤️!


文章目录

前言

最近博主正在更新《Node.js从入门到精通》专栏,其中会使用NodeJS搭建后端服务器并创建Api接口,在前后端合作开发中,这作为后端而言我们会经常使用Postman 来测试Api接口,并使用Swagger来生成接口文档等等

而前端在后端Api接口未完善之前常使用Mock 来模拟Api数据,这就使得前后端的工作能并行进行,无需使一方等待另一方

但这个过程常常是繁琐的,因为我们需要在多种工具之间来回切换,前后端的合作也因使用工具的不同不能很好的结合在一起,并且还存在着很多问题:

于是我就开始尝试寻找一款能融合PostmanSwaggerMock的工具,最终我发现了Apifox(集API 文档、API 调试、API Mock、API 自动化测试为一体的API工具),我们的故事也由此而生

这篇文章将带领大家探索怎样优雅的使用Apifox,让我们开始吧!

一、Apifox介绍

在前言中我们提到了前后端合作开发的痛点:使用API工具繁多,前后端合作无法完美结合

Apifox 是 API 文档、API 调试、API Mock、API 自动化测试一体化协作平台,定位 Postman + Swagger + Mock + JMeter。通过一套系统、一份数据,解决多个系统之间的数据同步问题。只要定义好 API 文档,API 调试、API 数据 Mock、API 自动化测试就可以直接使用,无需再次定义;API 文档和 API 开发调试使用同一个工具,API 调试完成后即可保证和 API 文档定义完全一致。高效、及时、准确!

Apifox的出现彻底解决了这些问题,官方介绍:Apifox = Postman + Swagger + Mock + JMeter,这意味着前后端可以同时使用且仅需使用这一款工具就能完成API的各项工作

并且Apifox中是以团队为导向进行Api开发的,前后端人员可以处于一个团队共同对API接口文档进行设计和处理,这就使前后端合作变得完全透明,完美融合,极大的提高了开发效率

二、安装使用

点击打开Apifox官网

Apifox官网中有两种使用Apifox的方式:

  • 下载桌面端应用使用

  • 直接在WEB网页上进行使用

目前WEB版还处于Beta阶段,所以博主建议大家下载桌面端应用进行使用。

下载安装后打开Apifox进行注册登录,之后就会进入到以下页面:

Apifox内会默认有一个示例团队,示例团队内有一个示例项目来作为示例演示

我们点击左侧的新建团队创建一个团队:

邀请团队成员:

在团队中我们就可以邀请我们这个团队的其他开发人员了,并且能够对团队成员做一些权限限制。当前后端合作开发的人员都处于这样一个团队时,他们就能共同去管理团队项目的Api接口,这无疑提高了前后端合作的效率

创建团队项目:

创建项目时可以选择是否包含示例数据,若选择了包含,创建的项目中就会有以下的示例接口文档:

之后点击我们创建的项目后就能进入项目的工作台:

三、创建接口文档

Apifox中定义的每一个接口都相当于是一个文档

🎉 新建接口

在项目工作台中新建一个接口:

新建的接口地址中可以直接使用大括号{}添加Path参数,添加的参数在下方请求参数那里能直接进行显示

接口地址以/开头,前置域名(baseUrl)部分我们可以在环境中进行配置:

这里可以分别设置各个环境的baseUrl(前置域名)

🎉 响应数据和响应示例

在添加返回响应的数据时能直接使用JSON格式快速导入:

我们添加响应数据时可以不给字段赋值,因为我们在使用Apifox Mock数据Apifox会根据内置的Mock规则自动生成数据(前提是字段名需要符合Apifox的内置规则),ApifoxMock规则如下图所示,当然你也可以自定义规则

在添加示例时能根据我们设置的响应数据自动生成示例:

可以看到Apifox根据内置的Mock规则自动为我们生成了字段的数据

🎉 导出文档

项目设置=》导出数据中可以选择导出各种格式的文档:

这里演示导出的HTML格式:

打开我们导出的HTML文件,可以看到这与Swagger不能说是有点像,只能说是一摸一样!

Apifox不仅能导出文档,还能将SwaggerapiDocKnife4j或其它的Apifox格式的文档导入进来,不得不说这简直是逆天功能!

🎉 生成代码

接口管理=》项目概述中能直接生成项目接口的业务代码,并且支持多达130种语言及框架:

在接口详细页内还能选择生成接口请求的代码:

这功能不能说是强大,只能说是逆天!当然,Apifox自动生成的代码并不一定能完全符合你的要求,但足以应对一些简单场景

四、前端使用Mock

在接口文档创建好后,前端人员就能直接通过Mock来访问接口,Apifox为我们提供了两种Mock方式:本地Mock云端Mock

🎉 本地Mock

选择环境本地Mock

之后点击运行接口:

这样本地Mock就成功启动了:

我们可以直接复制生成的本地Mock地址去其他地方使用:

注意:本地Mock只有在Apifox客户端运行时才有效,Apifox WEB版本只支持云端Mock不具有本地Mock功能

🎉 云端Mock(强烈推荐)

启用云端Mock

云端Mock可以设置Token鉴权来限制访问权限,这时如果我们直接访问接口(不要忘记在接口前加上云端MockURL)会提示我们需要进行token验证:

正确做法:

使用云端Mock时相当于是我们的接口在Apifox的服务器上运行,所以我们关闭Apifox客户端时我们依旧可以使用云端Mock接口,并且任何设备任何平台都能访问,这岂不是很爽!

🎉 高级Mock

上面我们使用Mock接口时,你会发现当我们调用/user/{id}接口时,无论我们是否输入id这个Path参数或者输入任何的值时,Apifox都会自动并且随机的返回给我们数据

我们可以通过高级Mock来设置一些期望来指定哪些情况需要返回哪些数据从而限制数据的随机:

这样当我们输入的id为7时就只会返回我们设置的这条用户名为“ 我是id为7的用户 ”的数据,而不会再随机返回数据

五、后端开发接口

我们使用NodeJS去开发实现上面我们定义的/user/{id}接口:

server.js

const http = require("http");

const server = http.createServer();

server.on("request", (req, res) => {
    res.writeHead(200, {
        "content-type": "application/json;charset=utf-8",
        "Access-Control-Allow-Origin": "*",
    });
    switch (req.url) {
        case "/user/7":
            res.end(
                JSON.stringify({
                    username: "Node接口测试",
                    phone: "18112618584",
                    age: 67,
                    avatar: "http://dummyimage.com/100x100",
                })
            );
            break;
        default:
            res.end("404");
            break;
    }
});

server.listen(3000, () => {
    console.log("服务器启动啦!");
});

使用node指令(node .\server.js)运行上述代码,此时启动的后端服务器域名地址为:http://localhost:3000(即http://127.0.0.1:3000

这里只是作为简单的演示所用,所以只定义了/user/7这一种情况

🎉 接口测试

我们先去去环境配置里将测试环境前置URL修改为后端的域名地址:

之后选择测试环境,输入Path参数,运行接口进行测试即可:

我们的运行测试可以保存为用例,方便下次调用测试:

🎉 自动化测试

上面我们演示了手动使用Apifox测试我们接口的功能,但这样手动的操作在测试数据量较多时就显得力不从心了,这时我们就可以使用自动化测试

新建一个分组

在分组中添加测试用例

之后点击打开测试用例添加步骤

我们先去声明一个全局变量,用于我们测试接口时输入参数:

之后回到我们的测试用例,点击步骤的设置:

选择我们刚才定义的全局变量id,之后点击插入:

回到接口详情页面后点击保存即可

添加测试数据

多添加几个:

添加完数据后别忘记点击保存

可以看到我们添加的测试数据中只有四个id为7,并且因为我们的接口只能正确响应/user/7,所以我们预计的测试结果应该是只有四个成功

回到测试步骤页面,选择运行环境为测试环境,启用测试数据,点击运行:

可以看到测试结果与我们预期的一样(通过了4个)

每一次的测试报告都会自动记录下来,你可以在下图所示的地方看到:

六、团队开发完整流程(最佳实践)

  1. Apifox上创建好团队和团队项目

  2. 前后端开发人员共同加入该团队

  3. 前端(或后端) 在团队项目里定义好API接口文档初稿

  4. 前后端一起评审、共同完善好API接口文档,定好接口用例

  5. 前端人员使用Apifox根据接口文档自动生成的Mock数据进入前端开发,无需手写mock规则

  6. 后端人员根据定好的接口文档接口用例进行后端接口的开发和调试,后端每次调试完一个功能就保存为一个新的接口用例

  7. 测试(或后端) 人员直接使用接口用例测试接口

  8. 所有接口开发完成后,测试人员(或后端人员) 使用集合测试(自动化测试)功能进行多接口的集成测试,完整测试整个接口调用流程

  9. 前后端都开发完后,前端从Mock数据切换到正式数据(只需将接口的baseUrl即接口的前置域名更换为后端的域名地址即可),联调通常都会非常顺利,因为前后端双方都完全遵守了接口定义的规范

结语

本篇文章演示了Apifox的常用功能,从此可以看出ApifoxApi管理和开发方面能起到非常大的作用

并且Apifox提倡API First的开发流程(即先制定好API文档再开发),这是前后端合作开发中效率最高的一种流程,通过Apifox我们就能完美的遵循API First来进行合作开发,这无疑使团队开发变得更加流畅和快速

并且Apifox是我们国产的软件,免费版都无任何限制,付费版更是为企业提供了私有化部署的功能,简直是良心软件,支持国产!

点击查看Apifox的更多功能和使用技巧

如果本篇文章对你有所帮助,还请客官一件四连!❤️

有关【团队协作】都2022年了,前后端合作开发还不使用Apifox?的更多相关文章

  1. ruby - 如何使用 Nokogiri 的 xpath 和 at_xpath 方法 - 2

    我正在学习如何使用Nokogiri,根据这段代码我遇到了一些问题:require'rubygems'require'mechanize'post_agent=WWW::Mechanize.newpost_page=post_agent.get('http://www.vbulletin.org/forum/showthread.php?t=230708')puts"\nabsolutepathwithtbodygivesnil"putspost_page.parser.xpath('/html/body/div/div/div/div/div/table/tbody/tr/td/div

  2. ruby - 使用 RubyZip 生成 ZIP 文件时设置压缩级别 - 2

    我有一个Ruby程序,它使用rubyzip压缩XML文件的目录树。gem。我的问题是文件开始变得很重,我想提高压缩级别,因为压缩时间不是问题。我在rubyzipdocumentation中找不到一种为创建的ZIP文件指定压缩级别的方法。有人知道如何更改此设置吗?是否有另一个允许指定压缩级别的Ruby库? 最佳答案 这是我通过查看ruby​​zip内部创建的代码。level=Zlib::BEST_COMPRESSIONZip::ZipOutputStream.open(zip_file)do|zip|Dir.glob("**/*")d

  3. ruby - 为什么我可以在 Ruby 中使用 Object#send 访问私有(private)/ protected 方法? - 2

    类classAprivatedeffooputs:fooendpublicdefbarputs:barendprivatedefzimputs:zimendprotecteddefdibputs:dibendendA的实例a=A.new测试a.foorescueputs:faila.barrescueputs:faila.zimrescueputs:faila.dibrescueputs:faila.gazrescueputs:fail测试输出failbarfailfailfail.发送测试[:foo,:bar,:zim,:dib,:gaz].each{|m|a.send(m)resc

  4. ruby-on-rails - 使用 Ruby on Rails 进行自动化测试 - 最佳实践 - 2

    很好奇,就使用ruby​​onrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提

  5. ruby - 在 Ruby 中使用匿名模块 - 2

    假设我做了一个模块如下:m=Module.newdoclassCendend三个问题:除了对m的引用之外,还有什么方法可以访问C和m中的其他内容?我可以在创建匿名模块后为其命名吗(就像我输入“module...”一样)?如何在使用完匿名模块后将其删除,使其定义的常量不再存在? 最佳答案 三个答案:是的,使用ObjectSpace.此代码使c引用你的类(class)C不引用m:c=nilObjectSpace.each_object{|obj|c=objif(Class===objandobj.name=~/::C$/)}当然这取决于

  6. ruby - 使用 ruby​​ 和 savon 的 SOAP 服务 - 2

    我正在尝试使用ruby​​和Savon来使用网络服务。测试服务为http://www.webservicex.net/WS/WSDetails.aspx?WSID=9&CATID=2require'rubygems'require'savon'client=Savon::Client.new"http://www.webservicex.net/stockquote.asmx?WSDL"client.get_quotedo|soap|soap.body={:symbol=>"AAPL"}end返回SOAP异常。检查soap信封,在我看来soap请求没有正确的命名空间。任何人都可以建议我

  7. python - 如何使用 Ruby 或 Python 创建一系列高音调和低音调的蜂鸣声? - 2

    关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。

  8. ruby-on-rails - 'compass watch' 是如何工作的/它是如何与 rails 一起使用的 - 2

    我在我的项目目录中完成了compasscreate.和compassinitrails。几个问题:我已将我的.sass文件放在public/stylesheets中。这是放置它们的正确位置吗?当我运行compasswatch时,它不会自动编译这些.sass文件。我必须手动指定文件:compasswatchpublic/stylesheets/myfile.sass等。如何让它自动运行?文件ie.css、print.css和screen.css已放在stylesheets/compiled。如何在编译后不让它们重新出现的情况下删除它们?我自己编译的.sass文件编译成compiled/t

  9. ruby - 使用 ruby​​ 将 HTML 转换为纯文本并维护结构/格式 - 2

    我想将html转换为纯文本。不过,我不想只删除标签,我想智能地保留尽可能多的格式。为插入换行符标签,检测段落并格式化它们等。输入非常简单,通常是格式良好的html(不是整个文档,只是一堆内容,通常没有anchor或图像)。我可以将几个正则表达式放在一起,让我达到80%,但我认为可能有一些现有的解决方案更智能。 最佳答案 首先,不要尝试为此使用正则表达式。很有可能你会想出一个脆弱/脆弱的解决方案,它会随着HTML的变化而崩溃,或者很难管理和维护。您可以使用Nokogiri快速解析HTML并提取文本:require'nokogiri'h

  10. ruby - 在 64 位 Snow Leopard 上使用 rvm、postgres 9.0、ruby 1.9.2-p136 安装 pg gem 时出现问题 - 2

    我想为Heroku构建一个Rails3应用程序。他们使用Postgres作为他们的数据库,所以我通过MacPorts安装了postgres9.0。现在我需要一个postgresgem并且共识是出于性能原因你想要pggem。但是我对我得到的错误感到非常困惑当我尝试在rvm下通过geminstall安装pg时。我已经非常明确地指定了所有postgres目录的位置可以找到但仍然无法完成安装:$envARCHFLAGS='-archx86_64'geminstallpg--\--with-pg-config=/opt/local/var/db/postgresql90/defaultdb/po

随机推荐