webapi版本升级管理
由于近期公司人员流动,本人临时客串webapi开发,针对开发过程中碰到一些问题做一些改进
1、当前做法
项目webapi项目是居于asp.net框架开发的,每个功能模块新建一个api控制器,比如UserController,GroupController,针对Native App升级产生的多版本App,都只是对应唯一一个webapi。各个版本的app某个功能都调用同一个方法GetDetail,当某个版本需要扩充该方法的参数,则重新一个新方法GetDetailV2;当返回的实体属性名发生变更或者删减则扩充一个新属性或者加一个新实体;最苦恼的是针对老版本app上的bug,api将错就错导致各种奇怪的条件判断或者新方法;这种做法虽然前期迭代快捷,但越往后越混乱,给维护和测试带来极大不便
2、改进方法1
针对方法加复合路由方式,某个支持什么版本的app,就加上相对应的路由,这样虽然能将app版本和api版本关联上,但还是没有解决以上问题,而且每次新发版本都要对有方法加路由规则
[Route("v1/user/{id}")]
[Route("v2/user/{id}")]
[Route("v3/user/{id}")]
[HttpGet]
[HTTPBasicAuthorizeAttribute]
public UserInfo User(int id)
3、改进方法2
在controller层面加版本,比如V1_UserController,V2_UserController,每发布一个api版本都新建一个controller,新版本controller都继承老版本controller,controller中新写的方法都带virtual修饰以便后面版本重写;这样的好处在于既能重用代码,又能灵活改动,版本层次清晰,且不会因为影响老版本带来额外的测试工作,app可以很方便切换新版本接口 如:http://xxx/api/v1_user/Detail/1 http://xxx/api/v2_user/Detail/1
public class V1_UserInfoController:ApiController{
[HttpGet]
[HTTPBasicAuthorizeAttribute]
public virtual UserInfo Detail(int id){}//获取
[HttpPost]
[HTTPBasicAuthorizeAttribute]
public virtual bool Detail([frombody]UserInfo userinfo){}//添加
}
public class V2_UserInfoController:V1_UserInfoController{
[HttpPost]
[HTTPBasicAuthorizeAttribute]
public override bool Detail([frombody]UserInfo userinfo){}//重写添加方法
[HttpPut]
[HTTPBasicAuthorizeAttribute]
public override bool Detail([frombody]UserInfo userinfo){}//新增方法
}
3、改进方法3
本想针对方法2做改进,将请求接口改成类似 http://xxx/api/v1/user/Detail/1,但由于apirouter不支持命名空间,次设想暂时没有实现;网上有写文章写将版本号体现在url中不符合restful风格,最好写到httpheader中,此方案还在持续跟进中
webapi版本升级管理的更多相关文章
- WebApi管理和性能测试工具WebApiBenchmarks
说到WebApi管理和测试工具其实已经非常多的了,Postman.Swagger等在管理和维护上都非常出色:在性能测试方面也有不少的工具如:wrk,bombardier,http_load和ab等等. ...
- android项目数据库升级跨版本管理解决方案
目前公司android项目普遍使用框架对数据库进行操作,数据库表与数据实体都具有严格的对应的关系,但是数据库的升依赖不同版本间的升级脚本,如果应用跨多版本进行升级时,当缺失部分升级脚本时就会导致应用异 ...
- ASP.NET Core 实战:使用 NLog 将日志信息记录到 MongoDB
一.前言 在项目开发中,日志系统是系统的一个重要组成模块,通过在程序中记录运行日志.错误日志,可以让我们对于系统的运行情况做到很好的掌控.同时,收集日志不仅仅可以用于诊断排查错误,由于日志同样也是大量 ...
- NET Core 实战:使用 NLog 将日志信息记录到 MongoDB
NET Core 实战:使用 NLog 将日志信息记录到 MongoDB https://www.cnblogs.com/danvic712/p/10226557.html ASP.NET Core ...
- Android_SQLite版本升级,降级 管理
今天我们主要学习了数据库版本升级对软件的管理操作. 我们手机经常会收到xxx软件升级什么的提醒,你的软件版本更新,同时你的数据库对应的版本也要相应的更新. 数据库版本更新需要主要的问题: 软件的1.0 ...
- .NET 通用高扩展性的细粒度权限管理架构(webApi/Mvc)
一. 权限场景分析: 1. 系统具有角色概念, 部门概念, 且都具有相应不同的权限 2. 用户具有多个角色, 多个部门等关系, 并且能给单个用户指派独有的权限 3. 具有细粒度权限控制到资源的RBAC ...
- Asp.Net WebApi 使用OWIN架构后,出现 “没有 OWIN 身份验证管理器与此请求相关联(No OWIN authentication manager is associated with the request)” 异常的解决办法
在Asp.Net WebApi 项目中使用OWIN模块之后,如果没有在OWIN的Startup类中配置认证方式,调用WebApi的相关Controller和Action就会出现如下异常: 出现错误. ...
- 用Rider写一个由Autofac管理资源的WebAPI应用程序
一:步骤和上一篇创建控制台项目一样,不过这次选择的是.net core区域下的Asp.net web application,Type里选择Web API(Web API类似java里的SpringB ...
- 使用webapi实现windows本地用户管理
1. 引言 最近一段时间设计和实现公司内部的基于OAuth2.0的统一身份认证中心,经梳理,公司部分自研系统可以使用OAuth2.0的方式进行身份认证,还有一部分系统无源代码,未开放接口,使用wind ...
随机推荐
- http 错误 500.21
出现这个错误一般都是.net Framework 在iis中安装错误 这个时候需要重新安装iis .netframework 4.0框架 我的解决方案如下: 在cmd中以管理员身份运行->%wi ...
- [转]保护眼睛的Windows和IE、Firefox、谷歌等浏览器颜色设置
保护眼睛的Windows和IE.Firefox.谷歌等浏览器颜色设置 长时间在电脑前工作,窗口和网页上的白色十分刺眼,眼睛很容易疲劳,也容易引起头痛,其实我们可以通过设置Windows窗口和软件的颜 ...
- tomcat启动时 myeclipse控制台中文乱码
情况1: tomcat中conf目录下有个叫server.xml的文件,里面 <Connector port="8080" protocol="HTTP/1.1&q ...
- HDU1054 Strategic Game——匈牙利算法
Strategic Game Bob enjoys playing computer games, especially strategic games, but sometimes he canno ...
- 你不知道的this指向
javascript中,我们预想的this指向,有时候与预期不一样,直接上经典例子 window.name=2; var test={ 'name':1, 'getName':function(){ ...
- 使用NPOI2.1.3.1版本导出word附带表格和图片
原文:http://www.cnblogs.com/afutureBoss/p/4074397.html?utm_source=tuicool&utm_medium=referral 最近项目 ...
- chrome浏览器开发者工具之同步修改至本地
相信好多小伙伴喜爱webpack的热加载技术,省时而又不繁琐,讨厌F5或者Ctrl+F5. 嘿嘿,现在介绍大家一个在浏览器中修改直接同步到本地代码修改的方法--- (程序员都是从0开始数数的!) 第0 ...
- Powershell获取并导出指定日期EventLog
$date = Get-Date 28/07/16 Get-EventLog -After $date "Application"|Export-Csv c:\ming.csv
- leveldb 学习笔记之VarInt
在leveldb在查找比较时的key里面保存key长度用的是VarInt,何为VarInt呢,就是变长的整数,每7bit代表一个数,第8bit代表是否还有下一个字节, 1. 比如小于128(一个字节以 ...
- slim框架中防止crsf攻击时,用到的函数hash_equals
1.防止crsf攻击的最多解决方案就是 为每个请求生成一个唯一 token ,验证来源于客户端 HTML 表单产生的 POST等请求 . 2.这个token默认放在session中. slim框架源码 ...