I am currently working on a REST API, and the question was raised, how are, and how should, REST APIs be versioned? Here are the results of my research.
It seems that there are a number of people recommending using Content-Negotiation (the HTTP “Accept:” header) for API versioning. However, none of the big public REST APIs I have looked at seem to be using this approach. They almost exclusively put the API version number in the URI, with the odd exception using a custom HTTP header. I am at somewhat of a loss to explain this disconnect.
Versioning strategies in discussions
Stack Overflow 1 | URI | |
Stack Overflow 2 | Content Negotiation | |
blog post by Jeremy | Content Negotiation | |
ycombinator discussion | some opinions both ways | |
Stack Overflow 3 | Content Negotiation | |
Stack Overflow 4 | Content Negotiation | |
notmessenger blog post | URI (against all headers) | |
Peter Williams | Content Negotiation (strongly against URIs) | |
Apigee Blog post on API versioning | URI (some discussion) | |
Mark Nottingham REST versioning | Recommending essentially versionless extensibility with a HATEOS approach | |
Nick Berardi on REST versioning | URI | |
Restify | “Accept-Version” header | |
Tom Maguire on REST versioning | Content Negotiation | |
Nicholas Zakas on Rest Versioning | URI | |
Steve Klabnik on Rest Versioning | Content Negotiation + HATEOS | |
Luis Rei on Rest Versioning | Content Negotiation with (;version=1.0) | |
kohana forum discussion on REST versioning | Many Opinions | |
Troy Hunt on REST versioning | Accept Header but also support custom header and URL | |
Paul Gear REST versioning | Recommending essentially versionless extensibility with a HATEOS approach |
Versioning strategies in popular REST APIs
Twillo | date in URI | |
URI | ||
Atlassian | URI | |
Google Search | URI | |
Github API | URI/Media Type in v3 | Intention is to remove versioning in favour of hypermedia – current application/vnd.github.v3 |
Azure | Custom Header | x-ms-version: 2011-08-18 |
URI/optional versioning | graph.facebook.com/v1.0/me | |
Bing Maps | URI | |
Google maps | unknown/strange | |
Netflix | URI parameter | http://api.netflix.com/catalog/titles/series/70023522?v=1.5 |
Salesforce | URI with version introspection | { “label”:”Winter ’10” “version”:”20.0″, “url”:”/services/data/v20.0″, } |
Google data API (youtube/spreadsheets/others) | URI parameter or custom header | “GData-Version: X.0” or “v=X.0” |
Flickr | No versioning? | |
Digg | URI | http://services.digg.com/2.0/comment.bury |
Delicious | URI | https://api.del.icio.us/v1/posts/update |
Last FM | URI | http://ws.audioscrobbler.com/2.0/ |
URI | http://api.linkedin.com/v1/people/~/connections | |
Foursquare | URI | https://api.foursquare.com/v2/venues/40a55d80f964a52020f31ee3?oauth_token=XXX&v=YYYYMMDD |
Freebase | URI | https://www.googleapis.com/freebase/v1/search?query=nirvana&indent=true |
paypal | parameter | &VERSION=XX.0 |
Twitpic | URI | http://api.twitpic.com/2/upload.format |
Etsy | URI | http://openapi.etsy.com/v2 |
Tropo | URI | https://api.tropo.com/1.0/sessions |
Tumblr | URI | api.tumblr.com/v2/user/ |
openstreetmap | URI and response body | http://server/api/0.6/changeset/create |
Ebay | URI (I think) | http://open.api.ebay.com/shopping?version=713 |
No versioning? | ||
Groupon | URI | http://api.groupon.com/v2/channels//deals{.json|.xml} |
Geonames | ||
Wikipedia | no versioning I think? | |
Bitly | URI | https://api-ssl.bitly.com/v3/shorten |
Disqus | URI | https://disqus.com/api/3.0/posts/remove.json |
Yammer | URI | /api/v1 |
Drop Box | URI | https://api.dropbox.com/1/oauth/request_token |
Amazon Simple Queue Service (Soap) | URI Parameter and WSDL URI | &Version=2011-10-01 |
Youtube data API versioning | URI | https://www.googleapis.com/youtube/v3 |
Versioning strategies in popular REST Libraries
node-restify | semver versioning in an accept-Version header | accept-version: ~3 |
Jersey | description of how to do Accept: header versioning in Jersey | Accept: application/vnd.musicstore-v1+json |
相关推荐
量化策略设计是指利用计算机技术、金融工程和数学建模等手段,将金融...这种策略在现代金融市场中越来越流行,因为它们提供了一种基于数据的交易方式,可以降低情绪因素对投资决策的影响,提高交易的科学性和系统性。
【B&O设计策略概述】 B&O,全称为Bang & Olufsen,是一家源自丹麦的高端音响和电子产品制造商,以其独特的设计美学和创新技术在行业内独树一帜。B&O的产品被视为现代设计的典范,深受设计师和现代主义爱好者的青睐...
**PowerBuilder设计策略** 在IT领域,PowerBuilder是一款强大的、基于事件驱动的开发工具,尤其在构建企业级应用方面有着广泛的应用。它以其易用性、高效性和对数据库的强大支持而受到开发者的青睐。本白皮书的第四...
《基于局部流行度的分布式协作缓存策略》探讨了如何在命名数据网络中优化缓存利用率,以提高服务效率和用户满意度。文章的核心是提出了一种新的分布式协作缓存策略,该策略基于局部流行度来做出决策,以降低请求延迟...
随着互联网技术的广泛应用,传统数据库已经无法满足大规模数据存储和处理的需求,因此,基于MySQL的分布式SQL数据库设计策略研究变得尤为重要。 MySQL作为当前最流行的关系型数据库管理系统之一,以其为基础设计...
例如,如果设计的是少儿英语教材,应突出与现有流行教材的差异,利用现代科技手段增加互动性和实时性,以吸引并满足特定市场的需求。 此外,市场营销策略的引入还能帮助教学设计更好地应对教育市场的变化。通过市场...
"国产操作系统PHP服务部署策略的设计与实现" PHP是世界上最流行的Web开发语言之一,近年来,随着我国信息安全的日益重要,国产操作系统的发展也在逐步推进。然而,国产操作系统的普及仍然面临着一些挑战,如Linux...
【香奈儿(Chanel)的设计策略】 全球奢侈品牌香奈儿(Chanel)的设计策略是其品牌价值的重要组成部分,它的成功在于对时尚与风格的独特理解。品牌创始人Gabrielle "Coco" Chanel女士的理念深深影响了品牌的DNA,她...
科学的课程设计可以弥补流行音乐文化的缺失,提供正面的审美导向。通过选用合适的作品,教师可以激发学生对美的感知,让他们在学习过程中不断提升审美意识,理解流行音乐中的美学元素。 总的来说,高校流行音乐的...
例如,年度流行色、互补色、三色原则等都是设计师需要考虑的配色策略。在PPT模板中,恰当的色彩搭配可以帮助设计作品更好地传达其理念和情感。 5. **服装设计展示**:在PPT中展示服装设计,可以包括概念草图、成衣...
标题 "基于AFLFast对能量分配策略改进毕业设计" 暗示了这是一个关于软件测试和性能优化的项目,特别是针对模糊测试(Fuzzing)领域。AFLFast是American Fuzzy Lop(AFL)的增强版,它是一种流行且高效的模糊测试工具...
`Android-AndroidImageLoader管理工具`就是为了解决这一问题而设计的,它采用了策略模式来实现灵活、高效的图片加载策略。策略模式是一种行为设计模式,允许在运行时选择和改变算法或策略,为相同的问题提供了多种...
4. **版本控制**:随着项目的迭代,接口可能需要改变,因此需要实施版本控制策略,如版本号标记,以确保向后兼容性。 5. **错误处理**:接口设计应考虑到可能出现的错误情况,提供合理的错误码或异常处理机制,以便...
策略类游戏,以其深邃的策略性、复杂的系统设计以及丰富的玩家交互而著称,是游戏开发领域的一颗璀璨明珠。将这类游戏搬上Web平台,不仅考验开发者的技术实力,更要求他们具备创新思维和用户体验优化的能力。 ### ...
【流行病学课程教学的重要性】 ...通过这些策略的实施,医学院校可以提高非预防专业学生对流行病学的兴趣和理解,培养出具备流行病学思维和实践能力的未来医疗工作者,以应对日益复杂的公共卫生问题。
Quartus是一款流行的FPGA(现场可编程门阵列)开发工具,广泛用于硬件描述语言(如VHDL或Verilog)的设计和仿真。FPGA允许设计者自定义硬件逻辑,使其成为原型验证和CPU设计的理想选择。在这个CPU2版本2.0中,开发者...
BlackJack 21点是一种流行的桌面游戏,源自法国,它结合了运气与策略。这个"BlackJack 21点策略练习源代码"提供了一个实践和理解21点游戏策略的平台。开发者根据电影《决战21点》中的算法来设计和编写了这款工具,...
这一设计策略使得浏览变得更加流畅,减少了用户的操作负担。 其次,速写/手绘风格的设计持续流行。尽管这不是全新的概念,但越来越多的设计师开始尝试并欣赏这种风格。手绘风格为网站带来了独特的个性化和亲近感,...