`
javafan_303
  • 浏览: 957095 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

流行的版本设计策略

 
阅读更多

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

POST VERSIONING
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

API NAME VERSIONING EXAMPLE
Twillo date in URI  
Twitter 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
Facebook 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/
LinkedIn 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
Reddit 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

LIBRARY NAME VERSIONING EXAMPLE
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

 

分享到:
评论

相关推荐

    基于Python语言的量化策略设计与应用优化.pdf

    量化策略设计是指利用计算机技术、金融工程和数学建模等手段,将金融...这种策略在现代金融市场中越来越流行,因为它们提供了一种基于数据的交易方式,可以降低情绪因素对投资决策的影响,提高交易的科学性和系统性。

    了解B&O设计策略.doc

    【B&O设计策略概述】 B&O,全称为Bang & Olufsen,是一家源自丹麦的高端音响和电子产品制造商,以其独特的设计美学和创新技术在行业内独树一帜。B&O的产品被视为现代设计的典范,深受设计师和现代主义爱好者的青睐...

    powerbuilder设计策略

    **PowerBuilder设计策略** 在IT领域,PowerBuilder是一款强大的、基于事件驱动的开发工具,尤其在构建企业级应用方面有着广泛的应用。它以其易用性、高效性和对数据库的强大支持而受到开发者的青睐。本白皮书的第四...

    基于局部流行度的分布式协作缓存策略.pdf

    《基于局部流行度的分布式协作缓存策略》探讨了如何在命名数据网络中优化缓存利用率,以提高服务效率和用户满意度。文章的核心是提出了一种新的分布式协作缓存策略,该策略基于局部流行度来做出决策,以降低请求延迟...

    基于MySQL的分布式SQL数据库的设计策略研究.pdf

    随着互联网技术的广泛应用,传统数据库已经无法满足大规模数据存储和处理的需求,因此,基于MySQL的分布式SQL数据库设计策略研究变得尤为重要。 MySQL作为当前最流行的关系型数据库管理系统之一,以其为基础设计...

    市场营销策略教学设计综述.doc

    例如,如果设计的是少儿英语教材,应突出与现有流行教材的差异,利用现代科技手段增加互动性和实时性,以吸引并满足特定市场的需求。 此外,市场营销策略的引入还能帮助教学设计更好地应对教育市场的变化。通过市场...

    国产操作系统PHP服务部署策略的设计与实现.pdf

    "国产操作系统PHP服务部署策略的设计与实现" PHP是世界上最流行的Web开发语言之一,近年来,随着我国信息安全的日益重要,国产操作系统的发展也在逐步推进。然而,国产操作系统的普及仍然面临着一些挑战,如Linux...

    全球奢侈品牌__香奈儿(chanel)的设计策略.pptx

    【香奈儿(Chanel)的设计策略】 全球奢侈品牌香奈儿(Chanel)的设计策略是其品牌价值的重要组成部分,它的成功在于对时尚与风格的独特理解。品牌创始人Gabrielle "Coco" Chanel女士的理念深深影响了品牌的DNA,她...

    高校流行音乐的教学与美育策略.doc

    科学的课程设计可以弥补流行音乐文化的缺失,提供正面的审美导向。通过选用合适的作品,教师可以激发学生对美的感知,让他们在学习过程中不断提升审美意识,理解流行音乐中的美学元素。 总的来说,高校流行音乐的...

    发型与服装设计展示流行时尚风ppt模板.zip

    例如,年度流行色、互补色、三色原则等都是设计师需要考虑的配色策略。在PPT模板中,恰当的色彩搭配可以帮助设计作品更好地传达其理念和情感。 5. **服装设计展示**:在PPT中展示服装设计,可以包括概念草图、成衣...

    基于AFLFast对能量分配策略改进毕业设计.zip

    标题 "基于AFLFast对能量分配策略改进毕业设计" 暗示了这是一个关于软件测试和性能优化的项目,特别是针对模糊测试(Fuzzing)领域。AFLFast是American Fuzzy Lop(AFL)的增强版,它是一种流行且高效的模糊测试工具...

    Android-AndroidImageLoader管理工具采用策略模式设计

    `Android-AndroidImageLoader管理工具`就是为了解决这一问题而设计的,它采用了策略模式来实现灵活、高效的图片加载策略。策略模式是一种行为设计模式,允许在运行时选择和改变算法或策略,为相同的问题提供了多种...

    接口设计项目设计及具体实现

    4. **版本控制**:随着项目的迭代,接口可能需要改变,因此需要实施版本控制策略,如版本号标记,以确保向后兼容性。 5. **错误处理**:接口设计应考虑到可能出现的错误情况,提供合理的错误码或异常处理机制,以便...

    web策略类游戏开发

    策略类游戏,以其深邃的策略性、复杂的系统设计以及丰富的玩家交互而著称,是游戏开发领域的一颗璀璨明珠。将这类游戏搬上Web平台,不仅考验开发者的技术实力,更要求他们具备创新思维和用户体验优化的能力。 ### ...

    加强流行病学课程教学的方法和策略.pdf

    【流行病学课程教学的重要性】 ...通过这些策略的实施,医学院校可以提高非预防专业学生对流行病学的兴趣和理解,培养出具备流行病学思维和实践能力的未来医疗工作者,以应对日益复杂的公共卫生问题。

    模型机CPU设计CPU2.版本2.0(时序资源性能优)

    Quartus是一款流行的FPGA(现场可编程门阵列)开发工具,广泛用于硬件描述语言(如VHDL或Verilog)的设计和仿真。FPGA允许设计者自定义硬件逻辑,使其成为原型验证和CPU设计的理想选择。在这个CPU2版本2.0中,开发者...

    BlackJack 21点 策略练习源代码

    BlackJack 21点是一种流行的桌面游戏,源自法国,它结合了运气与策略。这个"BlackJack 21点策略练习源代码"提供了一个实践和理解21点游戏策略的平台。开发者根据电影《决战21点》中的算法来设计和编写了这款工具,...

    2010年网页设计最新流行趋势.pdf

    这一设计策略使得浏览变得更加流畅,减少了用户的操作负担。 其次,速写/手绘风格的设计持续流行。尽管这不是全新的概念,但越来越多的设计师开始尝试并欣赏这种风格。手绘风格为网站带来了独特的个性化和亲近感,...

Global site tag (gtag.js) - Google Analytics