首页 > 其他分享 >.Net6 Api 里使用版本控制(Versioning)

.Net6 Api 里使用版本控制(Versioning)

时间:2022-09-01 11:57:51浏览次数:48  
标签:版本控制 Api System Microsoft api using employee Net6 public

Net Core Api 接口版本管理
简单介绍
感谢
创建 ASP.NET Core Web Api
本次操作环境条件
创建项目
versioning的版本控制的方法
第一步,通过Nuget安装包
第二步, 在Startup.cs里的ConfigureServices方法中。
加入几个控制器
EmployeeV1Controller.cs
EmployeeV2Controller.cs
基于请求参数
基于路由地址
EmployeeV1Controller.cs
EmployeeV2Controller.cs
基于HTTP 请求头的操作
简单介绍
学习如何对ASP.NET Core Web API进行版本控制以及对API进行版本控制的一些不同方法。我们还将创建一个简单的Web API并实现版本控制。

感谢
每次学习都是学习了其他人的作品。照着别人的代码写一遍理解一下,这或许也是叫做学习把,

【大家是怎么做APP接口的版本控制的?欢迎进来看看我的方案。升级版的Versioning】 ,感谢作者oppoic,这篇文章用的是 Asp.net API 做案例,里面也提到过用Versioning 版本控制 ;
【API Versioning in ASP.NET Core
】 ,感谢作者sumit-kharche,这篇文章用的是Asp.net Core Api 做案里,基本介绍了【Versioning】如何使用;
全新的github地址: 【Microsoft.aspnet-api-versioning】 ,这里面也有支持各种的基本案例;

创建 ASP.NET Core Web Api
本次操作环境条件
1、运行环境,操作环境:


2、测试 postman


创建项目
创建新项目->ASP.NET Core Web 应用程序 ->下一步

项目名称修改->文件存放地址修改->创建

选择运行平台->选中API->不启用‘为HTTPS 配置’ ->点击创建

4.F5运行,在postman里输入地址可查看

以上 - 大家都知道的废话已说完!

versioning的版本控制的方法
通过请求参数
通过路由地址
通过HTTP请求头
当前还有其他方法->没有在其他文章里发现,我也不会☺

第一步,通过Nuget安装包
Microsoft.AspNetCore.Mvc.Versioning
1

看了看去,还是使用第二个把,API不也就是扩展于MVC啊,

第二步, 在Startup.cs里的ConfigureServices方法中。
public void ConfigureServices(IServiceCollection services)
{
services.AddControllers();
services.AddApiVersioning(x =>
{
x.DefaultApiVersion = new ApiVersion(1, 0);
x.AssumeDefaultVersionWhenUnspecified = true;
x.ReportApiVersions = true;
});
}

 

对于 Service.AddApiVersioning()里面的参数理解:

x.DefaultApiVersion = new ApiVersion(1, 0);

字面意思: 设置一个 默认版本;

x.AssumeDefaultVersionWhenUnspecified = true;

F12 看到的注释翻译出来的以上: 当客户端未指定任何版本时,此标志AssumeDefaultVersionWhenUnspecified标志用于设置默认版本。如果我们没有将此标志设置为true,并且客户端未提及版本就点击了API,则会发生UnsupportedApiVersion异常。

x.ReportApiVersions = true;

F12 看到的注释翻译出来的以上:在响应标头中返回API版本。
也即是如下:


加入几个控制器


EmployeeV1Controller.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;

namespace WebApplication1.Controllers
{

[ApiController]
[ApiVersion("1.0")]
[Route("api/employee")]
// [Route("api/{v:apiVersion}/employee")]
public partial class EmployeeV1Controller : ControllerBase
{

[HttpGet]
public virtual IActionResult Get()
{
return new OkObjectResult("v1 Controller Employee");
}

//PUT api/<EmployeeV4Controller>/5
[HttpPut("{id}")]
public IActionResult Put(int id)
{
return new OkObjectResult($"v1 Controller Employee{id}");
}


// POST api/<EmployeeV4Controller>
[HttpPost]
public IActionResult Post(string value)
{
return new OkObjectResult($"v1 Post Value:{value}");
}
}
}

 


EmployeeV2Controller.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;

namespace WebApplication1.Controllers
{

[ApiController]
[ApiVersion("2.0")]
[Route("api/employee")]
//[Route("api/{v:apiVersion}/employee")]
public class EmployeeV2Controller : EmployeeV1Controller
{
[HttpGet]
public override IActionResult Get()
{
return new OkObjectResult("v2 Controller Employee");
}
}
}



基于请求参数
完成以上创作基本就可以实现基于请求参数的案例,
在Postman里添加

http://localhost:11111/api/employee?api-version=1

http://localhost:11111/api/employee?api-version=1.0

以上2种方式都是可行的,
修改对应的api-version=?即可获得对应版本的接口,这里我们用的是大版本,后续有小的版本修改,代码里添加对应的代码,这边的参数可修改成 1.X,,如下面2张图所示

 

注意这里的virtual 方法,跟override 方法,
个人觉得:如果当前这个接口,需要升级那么就重载这个方法,这样的话前面版本的方法也没改变,部署的时候以前的接口也是可以调用不修改之前的业务;如果有新的业务,那么在当前这个版本的控制器定义要给虚方法,下次代码升级就重载一下就好啦 。
当然还有默认可以使用,重新创建个控制器,设置控制器版本,然后在重新定义一个相同的方法,这样出去的接口也是可行的。
不过总感觉这样的接口没有关联。前者的思路我也并没有进行性能上的测试,也还不知道效率怎么样!?

基于路由地址
这里只需要配置路由即可

EmployeeV1Controller.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;

namespace WebApplication1.Controllers
{

[ApiController]
[ApiVersion("1.0")]
//[Route("api/employee")]
[Route("api/v{v:apiVersion}/employee")]
public partial class EmployeeV1Controller : ControllerBase
{

[HttpGet]
public virtual IActionResult Get()
{
return new OkObjectResult("v1 Controller Employee");
}

//PUT api/<EmployeeV4Controller>/5
[HttpPut("{id}")]
public IActionResult Put(int id)
{
return new OkObjectResult($"v1 Controller Employee{id}");
}


// POST api/<EmployeeV4Controller>
[HttpPost]
public IActionResult Post(string value)
{
return new OkObjectResult($"v1 Post Value:{value}");
}
}
}


EmployeeV2Controller.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;

namespace WebApplication1.Controllers
{

[ApiController]
[ApiVersion("2.0")]
// [Route("api/employee")]
[Route("api/v{v:apiVersion}/employee")]
public class EmployeeV2Controller : EmployeeV1Controller
{
[HttpGet]
public override IActionResult Get()
{
return new OkObjectResult("v2 Controller Employee");
}
}
}



这里的路由

[Route("api/{v:apiVersion}/employee")]
1
我加了个’v’,不然就没那个味了 'http://localhost:5000/api/1.0/employee/'像这样的路由看着有点儿不舒服

标签:版本控制,Api,System,Microsoft,api,using,employee,Net6,public
From: https://www.cnblogs.com/Leo_wl/p/16646027.html

相关文章

  • 生活常用类API推荐
    之前在网上看到了一些很不错的生活常用类的API,今天在这里整理出来分享给大家~阿里云中华万年历API,中华万年历宜忌测开张、测乔迁、测结婚、测签约、测动工、测栽种、测......
  • 起搏速率限制 API
    起搏速率限制API今天,大多数应用程序都是API驱动的。无论是创建天气预报、金融行情、体育比分提醒,还是翻译当地语言,您都需要连接3rd方API来访问您需要的数据。API......
  • 使用 Gin 框架在 GoLang 中构建 API 服务
    使用Gin框架在GoLang中构建API服务今天我将向你展示如何在Go中构建一个简单的API服务。我们的项目演示将是一个简单的作者和他们的图书库项目。第一步:首先,我......
  • HttpClient和IHttpClientFactory借助第三方库生成的客户端Refit andWebApiClientCore
    理解ASP.NETCore-发送Http请求(HttpClient)  注:本文隶属于《理解ASP.NETCore》系列文章,请查看置顶博客或点击此处查看全文目录前言在.NET中,我们有很多发送Ht......
  • Filters in ASP.NET Core(Net6之过滤器)
    FiltersinASP.NETCore如果觉得样式不好:跳转即可(md文件复制过来有些样式会不一样)原文地址:https://lifengying.site/archives/net6%E4%B9%8B%E8%BF%87%E6%BB%A4%E5%99......
  • JavaScript之数组常用API
    这篇文章主要帮助大家简单理解数组的一些常用API用法,许多小伙伴常用方法记不住?别急,看完下面的介绍您一定就会明白各个方法是如何用的了......
  • APISpace 空气质量查询API
    本文我就来说说APISpace的空气质量查询API,支持国内3400+个城市的整点观测,并附带空气质量监测点(全国共2335个)的整点观测数据。获取指定城市的整点观测空气质量,包含空气......
  • APISpace 天气预报查询API
    今天就来和大家说说APISpace的天气预报查询API,它支持全国以及全球多个城市的天气查询,包含国内3400+个城市以及国际4万个城市的实况数据;更新频率分钟级别。 这套API......
  • APISpace IP归属地API
    今天我就来和大家说一说APISpace的IP归属地API,它可以根据IP地址查询归属地信息,包含国家、省、市、区县和运营商等信息。IP归属地的应用领域有哪些呢?应用领域1.网络......
  • 数据智能类API推荐
    之前在网上看到了一些很不错的数据智能类的API,今天在这里整理出来分享给大家~百度AI开放平台百度AI开放平台,拥有各种识别类API。APISpace身份证识别OCR,传入身份证照......