优秀的个人网站设计模板,wordpress首页锚点,一整套ppt背景图片,网站建设及解析流程版权声明#xff1a;转载时请以超链接形式标明文章原始出处和作者信息及本声明http://phoenixtoday.blogbus.com/logs/45855234.html 最近小组里有一些关于REST API设计的讨论#xff0c;有些收获#xff0c;打算在这里写一下。通常来讲设计第一个版本的REST API并不难…版权声明转载时请以超链接形式标明文章原始出处和作者信息及本声明http://phoenixtoday.blogbus.com/logs/45855234.html 最近小组里有一些关于REST API设计的讨论有些收获打算在这里写一下。通常来讲设计第一个版本的REST API并不难难点在于将来你要改变了这些API而客户那里已经有对应的客户端实现 那么你怎么保证兼容或者至少你应当让这些东西失效吧这样客户才能知道。所以基本上就是两个问题。1在最初设计时如何尽量保证向后兼容这里不提倡过度设计噢我们是搞敏捷的哈哈2如果API发生了改变该怎么通知已有实现对于第一个问题答案相对而言简单一些支持必要的但是最少的东西而且层次不要太多。为什么用下面的xml举个例子来说person namephoenix/name jobsofterware developer/job companyThoughtWorks/company/person第一层指的是这个xml具体针对什么第二层有三个属性分别是namejob和company这是一个嵌套层次很好的而且也没有包含过多的信息。但是如果我们在一开始再加上address属性假设它并非必要那么如果客户构建了一个客户端也的确包含了address属性那么在下一个版本的API中你把这个属性去掉了。问题是不是出现了客户的软件无法工作了。反过来如果最开始的版本不包含address但是有客户强烈要求下一个版本要支持那么怎么办简单在下一个版本加上就好了对于已有的客户端多一行冗余数据而已也不会导致客户的软件无法工作。好了这个问题解决了那么什么是嵌套层次不要太多。举个反例person namephoenix/name jobsofterware developer/job company nameThoughtWorks/name locations typearray citybeijing/city citysan francisco/city /locations products product namemingle/name /product product namecruise/name /product product nametwist/name /product /products /company/person这叫层次太多一个company里包含了太多的嵌套信息其中location还算说的过去因为只是一个简单的数组但是products里包含了子对象就不对了这就是第三层对象了具体的解决方案可以利用url来替换掉。世界终于清静啦可是我还不能清静因为要回答第二个问题API改变了该怎么通知已有实现这是一个很头疼的问题如果能避免回答我绝对会避免可惜不能通常有两种解决方案但目的都是为了让客户的软件失效我知道我知道这会让客户抓狂可是我们也没辙啊所以还是能不动则不动打死也不动打不死嘛......就按如下办a使用带有版本号的API URL这是现在最经常使用的一种方法例如api/v2/projects/members.xml前面的api不说也明白v2就是version 2版本2的意思如果更换了就变v3客户的软件不能用了也就知道了b利用HTTP header 里的ACCEPT来解决别说你写了这么多年程序连HTTP有HEAD都不知道啊会被鄙视的ACCEPT可以设置接受的文件你可以将版本信息放在里面。技术细节不多说了给个链接供大家参考 http://barelyenough.org/blog/2008/05/versioning-rest-web-services/ 其实我是比较赞成这种方式的比较优雅但缺点就是它还不是标准对方的程序员也可能不知道HTTP有HEAD所以做起来对人家可能会有点复杂这里就不再多说了。总之昵小初想必盯我博客很久的人也都知道我姓甚名谁了以后我就用真名了的技术博客在沉寂了这么久之后又回来了我胡XX又回来啦哈哈有太多东西要写了以后会陆续带给大家的多谢捧场PS:为啥Blogbus不支持pre标签呢让我的xml这么丑的出现在博客里惭愧呀转载于:https://www.cnblogs.com/hnrainll/archive/2011/08/16/2140445.html