由于近期公司人员流动,本人临时客串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版本升级管理的更多相关文章

  1. WebApi管理和性能测试工具WebApiBenchmarks

    说到WebApi管理和测试工具其实已经非常多的了,Postman.Swagger等在管理和维护上都非常出色:在性能测试方面也有不少的工具如:wrk,bombardier,http_load和ab等等. ...

  2. android项目数据库升级跨版本管理解决方案

    目前公司android项目普遍使用框架对数据库进行操作,数据库表与数据实体都具有严格的对应的关系,但是数据库的升依赖不同版本间的升级脚本,如果应用跨多版本进行升级时,当缺失部分升级脚本时就会导致应用异 ...

  3. ASP.NET Core 实战:使用 NLog 将日志信息记录到 MongoDB

    一.前言 在项目开发中,日志系统是系统的一个重要组成模块,通过在程序中记录运行日志.错误日志,可以让我们对于系统的运行情况做到很好的掌控.同时,收集日志不仅仅可以用于诊断排查错误,由于日志同样也是大量 ...

  4. NET Core 实战:使用 NLog 将日志信息记录到 MongoDB

    NET Core 实战:使用 NLog 将日志信息记录到 MongoDB https://www.cnblogs.com/danvic712/p/10226557.html ASP.NET Core ...

  5. Android_SQLite版本升级,降级 管理

    今天我们主要学习了数据库版本升级对软件的管理操作. 我们手机经常会收到xxx软件升级什么的提醒,你的软件版本更新,同时你的数据库对应的版本也要相应的更新. 数据库版本更新需要主要的问题: 软件的1.0 ...

  6. .NET 通用高扩展性的细粒度权限管理架构(webApi/Mvc)

    一. 权限场景分析: 1. 系统具有角色概念, 部门概念, 且都具有相应不同的权限 2. 用户具有多个角色, 多个部门等关系, 并且能给单个用户指派独有的权限 3. 具有细粒度权限控制到资源的RBAC ...

  7. Asp.Net WebApi 使用OWIN架构后,出现 “没有 OWIN 身份验证管理器与此请求相关联(No OWIN authentication manager is associated with the request)” 异常的解决办法

    在Asp.Net WebApi 项目中使用OWIN模块之后,如果没有在OWIN的Startup类中配置认证方式,调用WebApi的相关Controller和Action就会出现如下异常: 出现错误. ...

  8. 用Rider写一个由Autofac管理资源的WebAPI应用程序

    一:步骤和上一篇创建控制台项目一样,不过这次选择的是.net core区域下的Asp.net web application,Type里选择Web API(Web API类似java里的SpringB ...

  9. 使用webapi实现windows本地用户管理

    1. 引言 最近一段时间设计和实现公司内部的基于OAuth2.0的统一身份认证中心,经梳理,公司部分自研系统可以使用OAuth2.0的方式进行身份认证,还有一部分系统无源代码,未开放接口,使用wind ...

随机推荐

  1. Tomcat服务启动成功,但访问index.jsp出错 (jspInit)

    本文引用自 --> http://zhouhaitao.iteye.com/blog/1164736 Tomcat服务启动成功,但访问index.jsp出错 环境:Tomcat6 + jdk6 ...

  2. delphi7 在虚拟机 vbox里面安装失败

    提示Error 1324.The path My Pictures contains an invalid character. 解决办法:新建一个文件夹,123, 设置 我的文档文件夹 目录指向 “ ...

  3. 我 && yii2 (路由优化)

    今天配置了一下yii2 的路由,用 /index.php?r=... 这样的路由,实在是不太习惯,所以我便试着把yii2 的路由,写成laravel 那般,以下为详情 1.环境介绍 lnmp php5 ...

  4. 初学git(一):创建本地“仓库”

    初学git(一):创建本地“仓库” 作为一个初学者,我是跟着廖学峰老师的官方博客学习,这里只是做个笔记,哈哈,关于git的历史.和其他版本控制的对比啥的,我就不说了.另外,我这里用的是Mac OS X ...

  5. 浏览器缓存详解:expires,cache-control,last-modified,etag详细说明

    最近在对CDN进行优化,对浏览器缓存深入研究了一下,记录一下,方便后来者 画了一个草图: 每个状态的详细说明如下: 1.Last-Modified 在浏览器第一次请求某一个URL时,服务器端的返回状态 ...

  6. Sql Server 分区之后增加新的分区

    随着时间的推移,你可能会希望为已分区的表添加额外的分区(例如,可以为每一个新年创建一个新的分区).要增加一个新的分区,可以使用ALTER PARTITION SCHEME和ALTER PARTITIO ...

  7. SVN常用问题汇总

    参考文档.http://www.cnblogs.com/newsea/archive/2012/04/28/2474818.html 1.客户端取消记住用户名和密码. 2.汉化后设置为中文

  8. DDX_Text ()函数 C++

    DDX_Text()函数管理着对话框.表格视或控件视对象中的编辑控件与对话框.表格视或控件视对象的CString型数据成员之间的int,UINT,long,DWORD,CString,float或do ...

  9. 需要了解的 Linux 网络和监控命令

    列出来的10个基础的每个linux用户都应该知道的网络和监控命令.网络和监控命令类似于这些: hostname, ping, ifconfig, iwconfig, netstat, nslookup ...

  10. Spark中常用工具类Utils的简明介绍

    <深入理解Spark:核心思想与源码分析>一书前言的内容请看链接<深入理解SPARK:核心思想与源码分析>一书正式出版上市 <深入理解Spark:核心思想与源码分析> ...