由于近期公司人员流动,本人临时客串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. 使用SeasLog打造PHP项目中的高性能日志组件(一)

    云智慧(北京)科技有限公司 高驰涛 什么是SeasLog SeasLog是一个C语言编写的PHP扩展,提供一组规范标准的功能函数,在PHP项目中方便.规范.高效地写日志,以及快速地读取和查询日志. 为 ...

  2. cookie以及cookie的作用

    ios中对cookie操作的两个类分别是:1. NSHTTPCookie  2. NSHTTPCookieStorage,具体的使用在这里就不多说了. 1.什么是Cookie("小甜饼&qu ...

  3. 重复数据分析的三个常用语法distinct, group by, partition by

    由于数据经常会出现重复现象,数据去重是数据分析中常用操作之一,而distinct,group by, partition by三者都可以实现去重功能,实践中需要根据不同的场景需求来选取相应的语法. d ...

  4. HDU 4833 Best Financing (DP)

    Best Financing Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...

  5. LoadRunner参数更新方法和数据分配

    参数化的定义:使用指定的数据源中的值来替换脚本录制生成的语句中的参数. 对Vuser脚本进行参数化的好处: 1.减小脚本的大小 2.提供了使用不同的脚本的值执行脚本的能力 参数化涉及两个任务: 1.用 ...

  6. 说一说line-height

    line-height这个样式相信大家一定不会陌生,我们经常用它来让文本上下居中,这样做一般不出出现什么问题,但是如果对这个属性不是很熟悉的话,可能会踩到一些坑,今天亲自去试验了一下,并总结了一下li ...

  7. sql 将8位字符串转换成日期型

    将8位字符串转换成日期型,方法如下: ),)

  8. [转]protobuf-2.5.0.tar.gz的下载与安装

    protobuf-2.5.0.tar.gz的下载与安装 原文地址:http://blog.csdn.net/tdmyl/article/details/31811317 版权声明:本文为博主原创文章, ...

  9. OpenCV linux cmake添加使用

    安装好opencv之后: 只需要添加一下,就可以方便的使用opencv了,find_package opencv 会寻找FindOpenCV.cmake find_package(OpenCV REQ ...

  10. [Shell] swoole_timer_tick 与 crontab 实现定时任务和监控

    手动完成 "任务" 和 "监控" 主要有下面三步: 1. mission_cron.php(定时自动任务脚本): <?php /** * 自动任务 定时器 ...