初学者不会写接口怎么办?微软Visual Studio 2022无脑式API接口创建——Swagger一键导入APIKit快速测试

简介: 初学者不会写接口怎么办?微软Visual Studio 2022无脑式API接口创建——Swagger一键导入APIKit快速测试


VsualStudio2022各版本说明

VsualStudio2022企业版和社区版区别是收费和不收费。社区版是免费的。

主页链接:【Visual Studio 2022 IDE - 适用于软件开发人员的编程工具

主要面向学生、开源软件开发者等个人,我们大学生肯定是免费使用的。

专业版与企业版则是收费的,更多面向高级开发者或企业用户。

VisualStudio2022软件一共有Community(社区版)、Professional(专业版)与 Enterprise(企业版)三个版本。我们使用社区版本就够用了。

社区版本具体说明

社区版本在测试过程中

  1. 社区版不支持TFS。但你可以另外搭建TFS服务,只是个人开发不需要这个东西。
  2. 社区版有单元测试。没有性能测试,没有负载测试,没有性能分析。
  3. 社区版创建虚拟环境的能力不行。

VisualStudio2022下载选项

VisualStudio2022启动样式

VisualStudio2022图标样式

VisualStudio2022初始内存消耗

创建项目ASP.NET Core项目

具体项目创建

这里可以在筛选中依次选择【C#】=>【Windows】=>【Web】,在列表中选择【ASP.NET Core Web API】来快速创建接口

编辑项目名称与项目位置

创建配置

这里默认是【.Net6.0】是一个长期稳定版本,使用3.1也是一个稳定版本。

取消【HTTPS】,这样省的麻烦。我们又没有单独去购买HTTPS所以不需要。

勾选【使用控制器】,为了方便。

一定要勾选上【OpenAPI】这样能自动添加swagger

非常干净的页面创建成功。

创建API控制器

鼠标右键直接添加【控制器】

修改路由配置

[Route("api/[controller]/[action]")]

如果没有这个路由的话访问起来会很麻烦。

配置跨域

看好代码放置位置,才能正确配置。

//注册跨域请求CORS服务
builder.Services.AddCors(options =>
{
    options.AddPolicy("AllowCors", builder =>
    {
        builder.AllowAnyOrigin().AllowAnyMethod();
    });
});
//启动跨域
app.UseCors("AllowCors");

准备创建接口

创建Model

就准备一个做数据的类就够了。我们创建一个【Product】类。

public string? ProductId { get; set; }
public string? ProductName { get; set; }
public string? ProductType { get; set; }
public decimal Price { get; set; }
public string? note { get; set; }

创建一个【SUCCESS】类用于返回正确结果

public SUCCESS(string msg,Object result) {
    state = true;
    this.msg = msg;
    this.result = result;
}
public bool state { get; set; }
public string? msg { get; set; }
public Object? result { get; set; }

创建一个【ERROR】类用于返回异常结果

这里的【result】返回为null,别用字符串啥的,免得被移动端的开发乱bb

public ERROR(string msg)
{
    state = false;
    this.msg = msg;
    this.result = null;
}
public bool state { get; set; }
public string? msg { get; set; }
public Object? result { get; set; }

创建【RESTful风格】的API接口

接口测试业务逻辑梳理:

1、初始化数据[HttpGet]

2、基础列表分页访问测试[HttpGet]

3、精准id查询测试[HttpGet]

4、模糊查询测试[HttpGet]

5、分组查询测试[HttpGet]

6、倒序正序查询测试[HttpGet]

7、添加测试[HttpPost]

8、修改测试[HttpPut]

9、删除测试[HttpDelete]

完整接口代码(复制就能用)

/// <summary>
        /// 全局数据
        /// </summary>
        static List<Product> list = new List<Product>();
        /// <summary>
        /// 初始化函数
        /// </summary>
        /// <returns></returns>
        [HttpGet]
        public object Init()
        {
            if (list.Count < 1)
            {
                return new ERROR("初始化完毕");
            }
            list.Add(new Product()
            {
                ProductId = Guid.NewGuid().ToString("N"),
                ProductType = "中药",
                ProductName = "枸杞",
                Price = decimal.Parse("3.99"),
                note = "养生必备"
            });
            list.Add(new Product()
            {
                ProductId = Guid.NewGuid().ToString("N"),
                ProductType = "中药",
                ProductName = "党参",
                Price = decimal.Parse("2.05"),
                note = "健脾益肺"
            });
            list.Add(new Product()
            {
                ProductId = Guid.NewGuid().ToString("N"),
                ProductType = "蔷薇目",
                ProductName = "葎草",
                Price = decimal.Parse("5.72"),
                note = "性寒,走肺经与肾经,易导致过敏性呼吸道疾病。"
            });
            list.Add(new Product()
            {
                ProductId = Guid.NewGuid().ToString("N"),
                ProductType = "蔷薇目",
                ProductName = "单倍体草莓",
                Price = decimal.Parse("92.99"),
                note = "单倍体无籽草莓,"
            });
            list.Add(new Product()
            {
                ProductId = Guid.NewGuid().ToString("N"),
                ProductType = "蔷薇目",
                ProductName = "草莓",
                Price = decimal.Parse("109.25"),
                note = "八倍体的凤梨草莓"
            });
            list.Add(new Product()
            {
                ProductId = Guid.NewGuid().ToString("N"),
                ProductType = "杂草",
                ProductName = "香附子(有毒)",
                Price = decimal.Parse("6.92"),
                note = "生、醋炒、酒炒、碳炒,主解表通络。"
            });
            return list;
        }
        /// <summary>
        /// 综合查询
        /// </summary>
        /// <param name="pageNow"></param>
        /// <param name="pageSize"></param>
        /// <param name="ProductId"></param>
        /// <param name="ProductName"></param>
        /// <param name="isDesc"></param>
        /// <returns></returns>
        [HttpGet]
        public object GetInfo(int pageNow, int pageSize, string? ProductId, string? ProductName, bool isDesc)
        {
            try
            {
                if (pageSize == 0)
                {
                    pageSize = 5;
                }
                var newList = list;
                if (!string.IsNullOrEmpty(ProductId))
                {
                    newList = list.Where(o => o.ProductId == ProductId).ToList();
                }
                if (!string.IsNullOrEmpty(ProductName))
                {
                    newList = list.Where(o => o.ProductName.Contains(ProductName)).ToList();
                }
                if (isDesc)
                {
                    newList = newList.OrderByDescending(by => by.Price).ToList();
                }
                newList = newList.Skip((pageNow - 1) * pageSize).Take(pageSize).ToList();
                return new SUCCESS("查询成功", newList);
            }
            catch (Exception)
            {
                return new ERROR("查询失败");
            }
        }
        /// <summary>
        /// 分组查询
        /// </summary>
        /// <returns></returns>
        [HttpGet]
        public object GetGroupByType()
        {
            try
            {
                var newList = list.GroupBy(o => o.ProductType).ToList();
                return new SUCCESS("查询成功", newList);
            }
            catch (Exception)
            {
                return new ERROR("查询失败");
            }
        }
        /// <summary>
        /// 添加数据
        /// </summary>
        /// <param name="product"></param>
        /// <returns></returns>
        [HttpPost]
        public object InsertProduct(Product product)
        {
            product.ProductId = Guid.NewGuid().ToString("N");
            if (
                string.IsNullOrEmpty(product.ProductName) ||
                string.IsNullOrEmpty(product.ProductType) ||
                product.Price == decimal.Zero ||
                string.IsNullOrEmpty(product.note)
                )
            {
                return new ERROR("参数不允许有空值");
            }
            list.Add(product);
            return new SUCCESS("添加成功", product);
        }
        /// <summary>
        /// 修改操作
        /// </summary>
        /// <param name="product"></param>
        /// <returns></returns>
        [HttpPut]
        public object UpdateById(Product product)
        {
            try
            {
                if (product == null)
                {
                    return new ERROR("参数不允许有空值");
                }
                for (int i = 0; i < list.Count; i++)
                {
                    if (list[i].ProductId == product.ProductId)
                    {
                        list[i] = product; break;
                    }
                }
                return new SUCCESS("修改成功", product);
            }
            catch (Exception)
            {
                return new ERROR("添加失败");
            }
        }
        [HttpDelete]
        public object DeleteById(string ProductId)
        {
            try
            {
                if (string.IsNullOrEmpty(ProductId))
                {
                    return new ERROR("参数不允许有空值");
                }
                for (int i = 0; i < list.Count; i++)
                {
                    if (list[i].ProductId == ProductId)
                    {
                        bool isf = list.Remove(list[i]);
                        return new SUCCESS("删除成功", isf);
                    }
                }
                return new ERROR("删除失败");
            }
            catch (Exception)
            {
                return new ERROR("删除失败");
            }
        }

启动前设置

点击【调试】=》【开始执行(不调试)】

启动效果

Web端swagger效果:

Eolink测试测试:

由于我不想挨个输入,故而直接使用【Swagger.json】来导入项目

在新的页面打开json文件

保存json文件到任意地方。

打开Eolink的APIkit,引入swagger.json文件

导入需要一点时间

执行完毕后就会看到【导入成功】,正在写入项目,所以任务显示【进行中】。

由于没有异步刷新,故而需要手动切换一下页面重新加载。

接口查看

添加本地访问环境

这里匹配好端口号,跟服务器要相同。

设置环境

环境设置成功效果如下:

访问测试:

根据需求进行测试即可,非常快捷方便。

总结:

非常实用、快捷、高效的API接口创建方法。设置跨域也很方便。

使用Eolink可以直接导入测试,那就是更方便了。

希望本视频能为大家带来一定的价值,节约大家的开发时间。

相关文章
|
2月前
|
人工智能 数据可视化 测试技术
Postman 性能测试教程:快速上手 API 压测
本文介绍API上线后因高频调用导致服务器告警,通过Postman与Apifox进行压力测试排查性能瓶颈。对比两款工具在批量请求、断言验证、可视化报告等方面的优劣,探讨API性能优化策略及行业未来发展方向。
Postman 性能测试教程:快速上手 API 压测
|
3月前
|
XML 安全 测试技术
【干货满满】分享什么是API接口测试
API接口测试是验证应用程序编程接口功能、性能、安全性及兼容性的关键环节,通过模拟请求并验证响应结果,确保接口能正确处理各种输入和场景。测试内容涵盖功能验证、性能评估、安全防护、兼容性验证及系统可靠性。相比UI测试,API测试无需界面依赖,支持数据驱动与自动化,适用于持续集成流程。常见接口类型包括RESTful、SOAP和GraphQL API,广泛应用于电商、金融及社交平台,保障系统间数据交互的安全与高效。
|
4月前
|
人工智能 监控 安全
API安全测试工具:数字经济的免疫防线
API安全面临漏洞盲区、配置错误与合规碎片三大挑战,传统手段难抵新型风险。破局需构建智能漏洞探针、配置审计中枢与合规映射引擎三位一体防御矩阵。Burp Suite、Noname Security、Traceable AI与板栗看板等工具助力企业实现自动化检测、精准响应与高效合规,打造API安全免疫体系。
|
4月前
|
JSON JavaScript 测试技术
用Postman玩转电商API:一键测试+自动化请求教程
Postman 是电商 API 测试的高效工具,涵盖基础配置、自动化测试、环境管理与请求自动化,助你快速提升开发效率。
|
2月前
|
人工智能 数据可视化 测试技术
AI 时代 API 自动化测试实战:Postman 断言的核心技巧与实战应用
AI 时代 API 自动化测试实战:Postman 断言的核心技巧与实战应用
453 11
|
7月前
|
监控 测试技术 数据库连接
RunnerGo API 性能测试实战:从问题到解决的全链路剖析
API性能测试是保障软件系统稳定性与用户体验的关键环节。本文详细探讨了使用RunnerGo全栈测试平台进行API性能测试的全流程,涵盖测试计划创建、场景设计、执行分析及优化改进。通过电商平台促销活动的实际案例,展示了如何设置测试目标、选择压测模式并分析结果。针对发现的性能瓶颈,提出了代码优化、数据库调优、服务器资源配置和缓存策略等解决方案。最终,系统性能显著提升,满足高并发需求。持续关注与优化API性能,对系统稳定运行至关重要。
|
3月前
|
监控 安全 测试技术
API测试工具评测:Apipost与Apifox的优劣深度解读
本文对比了Apipost与Apifox在API设计、数据建模、代码生成、测试能力、协作权限、性能监控、插件生态、文档管理及安全合规等方面的差异。Apifox在专业性、自动化、扩展性及团队协作上表现更优,尤其适合中大型项目与复杂管理需求,而Apipost功能较基础,适用于轻量级使用场景。
|
3月前
|
JSON 安全 测试技术
什么是API接口测试?这可能是全网最全的教程了!
API 是应用程序间的“中间人”,用于实现通信和数据交换。随着微服务架构的普及,API 数量激增,其质量对系统稳定性至关重要。API 测试可验证功能、性能与安全性,帮助开发者在部署前发现并修复问题,提升系统可靠性。测试内容包括请求方法、URL、请求头、请求体、响应状态码与响应数据等。常用工具如 Postman、AREX 可辅助测试,确保 API 在不同场景下的正确性与稳定性。
|
4月前
|
人工智能 自然语言处理 测试技术
AI时代,Apipost和Apifox如何利用AI技术赋能API研发测试管理所需?
在数字化转型加速背景下,API成为企业互联互通的关键。Apipost与Apifox作为主流工具,在AI赋能方面差异显著。Apipost通过智能参数命名、接口设计自动化、测试用例生成、断言自动化等功能大幅提升研发效率和质量,尤其适合中大型企业及复杂业务场景。相比之下,Apifox功能依赖手动操作较多,适用性更偏向初创或小型项目。随着AI技术发展,Apipost展现出更强的智能化与前瞻性优势,为企业提供高效、稳定的API管理解决方案,助力其在竞争激烈的市场中实现创新突破。
138 0
|
7月前
|
监控 测试技术 数据库连接
利用 RunnerGo 深度探索 API 性能测试:从理论到实践
API性能测试是保障应用稳定性和用户体验的关键环节。本文详细探讨了如何使用RunnerGo全栈测试平台进行高效API性能测试,涵盖测试计划创建、场景设计、参数配置到执行与分析全过程。通过电商平台促销活动案例,展示了高并发下的测试策略与优化措施,如代码与数据库查询优化、数据库连接池扩容、服务器资源配置调整及缓存策略实施等。最终显著提升系统性能,满足高并发需求。API性能测试需持续关注与优化,以适应业务发展和用户需求变化。
268 33

热门文章

最新文章

下一篇
oss云网关配置