API 版本控制的几种方式
个人建议:用content type,即放在Header里面!比如加一个Version:1.4.3
这篇文章写得很好,介绍了三种实现web api版本化的三种方式。我从评论里又收集到两种方式,所以一共是5种:
方式一:利用URL
HTTP GET:
https://haveibeenpwned.com/api/v2/breachedaccount/foo
方式二:利用用户自定义的request header
HTTP GET:
https://haveibeenpwned.com/api/breachedaccount/foo
api-version: 2
方式三:利用content type
HTTP GET:
https://haveibeenpwned.com/api/breachedaccount/foo
Accept: application/vnd.haveibeenpwned.v2+json
方式四:利用content type
HTTP GET:
https://haveibeenpwned.com/api/breachedaccount/foo
Accept: application/vnd.haveibeenpwned+json; version=2.0
这个方式和方式三的小不同的地方是,把版本号分离出来了。
方式五:利用URL里的parameter
HTTP GET:
https://haveibeenpwned.com/api/breachedaccount/foo?v=2
作者说他最喜欢第三种方式,因为
URL不用改变客户端应该通过accept header来表明自己想接收的是什么样的数据。 但作者很蛋疼地在他的网站上把前面三种方式都实现了,而且都支持。 https://haveibeenpwned.com/API/v2
我个人最喜欢的是第二种方式,因为这个用spring mvc实现最容易,也最简洁。
因为只要在Controler上用@RequestMapping标明版本即可。不用再去各种匹配,各种识别。
如果是自己写一个Annotation来识别的话,也要花些功夫,而且怎么无缝地转发到原有的Spring mvc的配置也是个问题。
@Controller
@RequestMapping(headers=apt-version=2)
public class TestControllerV2 {
}
另外这个网站列举了很多国外的有名网站是如何实现web api版本控制的。
http://www.lexicalscope.com/blog/2012/03/12/how-are-rest-apis-versioned/
API 版本控制的几种方式的更多相关文章
- ****Web API 版本控制的几种方式
个人建议:用content type,即放在Header里面!比如加一个Version:1.4.3 这篇文章写得很好,介绍了三种实现web api版本化的三种方式.我从评论里又收集到两种方式,所以一共 ...
- 前端模拟API数据的两种方式
第一种方法:使用 mock-api 1.创建一个项目 2.创建一个资源 3.拖动创建记录 点击data查看记录 4.如何访问API的数据 第一种方式:在终端中通过 curl + 地址,如图: 第二种方 ...
- Python调用API接口的几种方式 数据库 脚本
Python调用API接口的几种方式 2018-01-08 gaoeb97nd... 转自 one_day_day... 修改 微信分享: 相信做过自动化运维的同学都用过API接口来完成某些动作.AP ...
- Python调用API接口的几种方式
Python调用API接口的几种方式 相信做过自动化运维的同学都用过API接口来完成某些动作.API是一套成熟系统所必需的接口,可以被其他系统或脚本来调用,这也是自动化运维的必修课. 本文主要介绍py ...
- 在基于MVC的Web项目中使用Web API和直接连接两种方式混合式接入
在我之前介绍的混合式开发框架中,其界面是基于Winform的实现方式,后台使用Web API.WCF服务以及直接连接数据库的几种方式混合式接入,在Web项目中我们也可以采用这种方式实现混合式的接入方式 ...
- JAVA客户端API调用memcached两种方式
1. memcached client for java客户端API:memcached client for java 引入jar包:java-memcached-2.6.2.jar package ...
- Java 调用Restful API接口的几种方式--HTTPS
摘要:最近有一个需求,为客户提供一些Restful API 接口,QA使用postman进行测试,但是postman的测试接口与java调用的相似但并不相同,于是想自己写一个程序去测试Restful ...
- linux内核分析作业4:使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用
系统调用:库函数封装了系统调用,通过库函数和系统调用打交道 用户态:低级别执行状态,代码的掌控范围会受到限制. 内核态:高执行级别,代码可移植性特权指令,访问任意物理地址 为什么划分级别:如果全部特权 ...
- 【百度地图API】关于如何进行城市切换的三种方式
原文:[百度地图API]关于如何进行城市切换的三种方式 摘要:本文介绍了三种切换城市的方式:查询城市.城市列表和显示城市轮廓. ------------------------------------ ...
随机推荐
- ORACLE单表理论最大记录数
不考虑硬件诸如内存,存储等硬件的限制. 一张表理论能存储多少条记录呢? 假设: 一个tablespace中包含1022个datafiles, 单个datafiles的最大是32G 假设每个block是 ...
- OAuth:OAuth概述
OAuth addresses these issues by introducing an authorization layer and separating the role of the cl ...
- 解决kylin build cube第一步报错:java.lang.NullPointerException
报错栈: -- ::, ERROR [pool--thread-] threadpool.DefaultScheduler: : ExecuteException job:933bc47a-302c- ...
- jquery操作CSS样式全记录
$(this).click(function(){ if($(this).hasClass(“zxx_fri_on”)){ $(this).removeClass(“zxx_fri_on”); ...
- C# 实现将 PDF 转文本的功能
更新 2014年2月27日: 这篇文章最初只描述使用 PDFBox 来解析PDF文件.现在它已经被扩展到包括使用 IFilter 和 iTextSharp 的例程了. 这篇文章和对应的Visual S ...
- 小课堂week18 编程范式巡礼第三季 谈谈依赖反转
编程范式巡礼第三季--谈谈依赖反转 今天会进入深一点的主题,谈一个软件开发的"道":依赖反转.根据我的观察,这也是架构师与程序员的分水岭之一. 什么是依赖反转 引出问题 让我们从U ...
- CSS3-border-radius 属性
向 div 元素添加圆角边框: div { border:2px solid; border-radius:25px; } IE9+.Firefox 4+.Chrome.Safari 5+ 以及 Op ...
- Code a simple telnet client using sockets in python
测试端口是否开放的python脚本 原文: https://www.binarytides.com/code-telnet-client-sockets-python/ 配置: 120.79.14.8 ...
- ReportStudio中创建日期提示默认值模板
很多人已经知道可以通过JS给RS中的日期提示控件设置运行前的默认值---------例如: 日期时间段默认为上一个月的开始日和结束日 在系统所有的报表中都这样操作,我们如何快速的引入?和方便下次修改统 ...
- HYSBZ 1012 最大数maxnumber
思路:在单调队列不更新列首.由于查询区间大小不确定,所以不能保证下次是否还用到它 #include <cstdio> #include <cstring> #include & ...