All Projects → jeffreyning → Nhversion

jeffreyning / Nhversion

NHVersion for version your api

Programming Languages

java
68154 projects - #9 most used programming language

Projects that are alternatives of or similar to Nhversion

Nodist
Natural node.js and npm version manager for windows.
Stars: ✭ 1,276 (+9715.38%)
Mutual labels:  version-manager, version-control
snowfs
SnowFS - a fast, scalable version control file storage for graphic files 🎨
Stars: ✭ 1,101 (+8369.23%)
Mutual labels:  version-control, version-manager
Snowfs
SnowFS - a fast, scalable version control file storage for graphic files 🎨
Stars: ✭ 590 (+4438.46%)
Mutual labels:  version-manager, version-control
Genius Php
PHP library for Genius API (http://genius.com/developers)
Stars: ✭ 10 (-23.08%)
Mutual labels:  api
Binding Of Isaac Api
A RESTful API for the Binding of Isaac game series
Stars: ✭ 11 (-15.38%)
Mutual labels:  api
Geochile
Esta es una api de Geocodificación, para que, con las coordenadas Latitud y Longitud se entregue una lista de ciudades cercanas.
Stars: ✭ 13 (+0%)
Mutual labels:  api
Osrs.me
A comprehensive dataset for OldSchool Runescape.
Stars: ✭ 13 (+0%)
Mutual labels:  api
Widdershins
OpenAPI / Swagger, AsyncAPI & Semoasa definitions to (re)Slate compatible markdown
Stars: ✭ 856 (+6484.62%)
Mutual labels:  api
Falko Api
📈 Falko API: Plataform for agile projects management 📊
Stars: ✭ 13 (+0%)
Mutual labels:  api
Screwdriver
An open source build platform designed for continuous delivery.
Stars: ✭ 870 (+6592.31%)
Mutual labels:  api
Api Example
WIP: Just sample app with API
Stars: ✭ 12 (-7.69%)
Mutual labels:  api
Gitcommands
Here is a list of some basic Git commands to get you going with Git
Stars: ✭ 11 (-15.38%)
Mutual labels:  version-control
Office365 Management Api Elk
An API connector for the Office 365 Management API and the Elastic Stack
Stars: ✭ 13 (+0%)
Mutual labels:  api
Openapi3 Validator
Validator for OpenAPI v3 specs
Stars: ✭ 11 (-15.38%)
Mutual labels:  api
Currencyviewer
Short python framework that dynamically displays and converts the cryptocurrencies in your Kraken wallet into equivalents fiat money.
Stars: ✭ 13 (+0%)
Mutual labels:  api
Pdoc
API Documentation for Python Projects
Stars: ✭ 853 (+6461.54%)
Mutual labels:  api
Stocks
Haskell library for the IEX trading API: https://iextrading.com/developer/docs/
Stars: ✭ 13 (+0%)
Mutual labels:  api
Chn Eolinker Ams Lite 4.0 For Php
中国最大的在线API管理平台EOLINKER 旗下API管理系统开源精简版,适合个人以及微型团队使用。
Stars: ✭ 869 (+6584.62%)
Mutual labels:  api
Jenkins4j
Simple and effective Jenkins API wrapper written in Java
Stars: ✭ 12 (-7.69%)
Mutual labels:  api
Swapi
*NOT MAINTAINED - NO GUARENTEE TO BE UP*
Stars: ✭ 872 (+6607.69%)
Mutual labels:  api

NHVersion

NHVersion类库

api接口需要分版本同时提出给使用方,通常移动端app的后台接口有这种版本化需求。如果每个接口都重新改类名将造成大量重复代码。 使用NHVersion类库可以解决代码重复问题,同时在没有完全一致的版本映射时,还可以根据提供的版本号找到最近似的版本进行调用。 NHVersion类库的开源代码请访问https://github.com/jeffreyning/NHVersion 下载jar请访问nhversion-1.0.jar 下载jar(支持spring)请访问nhversion-1.1.jar

nhversion-1.3.0-RELEASE.jar已经加入maven.org中央仓库

nhversion-1.3.0添加了前端version与后端version映射的功能 比如移动端app与后台接口的version是两个团队分别维护,需要进行映射配置

在没有NHVersion类库的情况下,一般会用ifelse处理多版本判断,例如以下的代码 名为Calcu的接口通过ifelse判断v1_0_1 v_1_0_5 v1_1_0这3个版本如果需要增加新的版本, 则需要修改Calcu类内部ifelse逻辑,这样容易出错,而且每个版本都要重新编写。 public class NoNHVersionController { public static int calcu(int param,String version){ if(version.equals("v1_0_1")){ System.out.println("this is nonhversioin v1_0_1"); return param+1; }else if(version.equals("v1_0_5")){ System.out.println("this is nonhversion v1_0_5"); return param+5; }else if(version.equals("v1_1_0")){ System.out.println("this is nonhversion v1_1_0"); return param+10; } System.out.println("this is nonhversion not catch"); return 0; } }

NHVersion类库将处理逻辑抽象成handler,通过map维护handler与version的映射关系。 增加新版本时只需实现新的handler对象并注入map中,不必修改接口主类的代码。而且可以支持版本号自动降级匹配。 比如V1_0_6没有完全相等handler,则会自动降级匹配V1_0_5进行调用。

每个不同版本需要编写handler @ControllerMappingAnno(controllerName="NHVersionController",funcName="calcu",funcVer="v1_0_0") 注解的作用是配置handler与version的映射关系。如NHVersionController接口类,calcu方法对应,v1_0_0版本的handler对象CalcuCmd1 支持按照springbeanid加载cmd对象@ControllerMappingAnno(controllerName="NHVersionController",funcName="calcu",funcVer="v1_0_0" beanId="cmd1")

package com.jeffreyning.nhversion.demo.controller.cmd; import java.util.HashMap; import java.util.Map;

import com.jeffreyning.nhversion.common.version.cmd.IControllerCommand; import com.jeffreyning.nhversion.common.version.mapping.ControllerMappingAnno; //@Component("cmd1") //@ControllerMappingAnno(controllerName="NHVersionController",funcName="calcu",funcVer="v1_0_0" beanId="cmd1") @ControllerMappingAnno(controllerName="NHVersionController",funcName="calcu",funcVer="v1_0_0") public class CalcuCmd1 extends IControllerCommand{

@Override
public Map execute(Map paramMap) {
	System.out.println("this is nhversion v1_0_0");
	int param=(Integer) paramMap.get("param");
	int ret=param+1;
	Map retMap=new HashMap();
	retMap.put("retInt", ret);
	return retMap;
}

}

使用NHVersion类库后接口层改写为 CommonControllerMapping.execVersionMapping触发版本映射并调用找出的handler对象。 参数为接口类标识、方法标识,版本号,参数(map) public class NHVersionController { public static int calcu(int param,String version){ Map paramMap=new HashMap(); paramMap.put("version", version); paramMap.put("param", param); Map retMap=CommonControllerMapping.execVersionMapping("NHVersionController","calcu", version, paramMap); Integer retInt=(Integer) retMap.get("retInt"); return retInt; } }

@ControllerMappingAnno维护的映射关系,通过自动扫描注入到map中 CommonControllerMapping.batchRegistryByPackage("com.jeffreyning.nhversion.demo.controller.cmd"); package com.jeffreyning.nhversion.demo;

import com.jeffreyning.nhversion.common.version.mapping.CommonControllerMapping; import com.jeffreyning.nhversion.demo.controller.NoNHVersionController; import com.jeffreyning.nhversion.demo.controller.NHVersionController;

public class Demo {

public static void main(String[] args) throws Exception {
	CommonControllerMapping.batchRegistryByPackage("com.jeffreyning.nhversion.demo.controller.cmd");
	NoNHVersionController.calcu(1, "v1_0_1");
	NHVersionController.calcu(1,"v1_0_1");
	NoNHVersionController.calcu(1, "v1_0_6");
	NHVersionController.calcu(1,"v1_0_6");
}

}

比如移动端app与后台接口的version是两个团队分别维护,需要进行映射配置 例如移动端v3_1_0明确配置映射为后台v1_0_5 例如移动端v3_1_1没有明确配置映射,则自动降级为后台v1_0_5 例如移动端v3_2_0明确配置映射为后台v1_1_0 注意前台version是按照字符串排序自动降级的 在controller收到前端version字符串时使用VersionMappingUtil.mappingVer获取后端version字符串 再进行CommonControllerMapping.execVersionMapping调用 public class FrontVersionChangeController { public static int calcu(int param,String frontVer){ String version=VersionMappingUtil.mappingVer(frontVer); System.out.println("frontVer is "+frontVer+" change to backVer is "+version); Map paramMap=new HashMap(); paramMap.put("version", version); paramMap.put("param", param); Map retMap=CommonControllerMapping.execVersionMapping("NHVersionController","calcu", version, paramMap); Integer retInt=(Integer) retMap.get("retInt"); return retInt; } }

注意:版本号格式为vxx_xx_xx xx代表2位数字 如v01_0_10 v1_1_6都是正确的格式 如果需要加载spring中的cmd对象,需要配置在spring配置文件中添加   

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].