Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Open Api&Sip

1,949 views

Published on

Open Api

Published in: Technology
  • Be the first to comment

Open Api&Sip

  1. 1. OPEN API & SIP 文初 Email: [email_address] Blog : http://blog.csdn.net/cenwenchu79 Code: http://rest-demo.googlecode.com/files/demostore.rar
  2. 2. 主题 <ul><li>什么是 Open API ? </li></ul><ul><li>Open API 能够带来什么 ? </li></ul><ul><li>Open API 当前发展情况 </li></ul><ul><li>Open API 基础 </li></ul><ul><li>Open API 实践 </li></ul><ul><li>服务集成平台( SIP ) </li></ul><ul><li>Open API 发展趋势 </li></ul><ul><li>一点感想 </li></ul>
  3. 3. 什么是 Open API <ul><li>一系列技术可以使得网站之间信息互通 </li></ul><ul><ul><li>Open </li></ul></ul><ul><ul><ul><li>Open 资源类型不限( Data ,Compute capability , Storage ) </li></ul></ul></ul><ul><ul><ul><li>Open 调用者不限(应用类型,实现技术) </li></ul></ul></ul><ul><ul><ul><li>Open 展现和使用方式不限( UI Mash up , Data Merge ) </li></ul></ul></ul><ul><ul><li>API </li></ul></ul><ul><ul><ul><li>接口,屏蔽实现 </li></ul></ul></ul>
  4. 4. 什么是 Open API <ul><li>Open API 所涉及到的角色 </li></ul>
  5. 5. Open API 能够带来什么 ? <ul><ul><li>用户 </li></ul></ul><ul><ul><ul><li>同质竞争提高服务质量 </li></ul></ul></ul><ul><ul><ul><li>服务流程串联带来的便利 </li></ul></ul></ul><ul><ul><ul><li>数据关联性对潜在需求的满足 </li></ul></ul></ul><ul><ul><ul><li>贡献与参与 </li></ul></ul></ul>
  6. 6. Open API 能够带来什么 ? <ul><ul><li>开发者 </li></ul></ul><ul><ul><ul><li>创新:丰富的资源(数据,服务等)带来无限想象空间 </li></ul></ul></ul><ul><ul><ul><li>快速: </li></ul></ul></ul><ul><ul><ul><ul><li>轻量级的开发模式 </li></ul></ul></ul></ul><ul><ul><ul><ul><li>二次开发的积累效应 </li></ul></ul></ul></ul><ul><ul><ul><ul><li>轻量级的产品化流程 </li></ul></ul></ul></ul><ul><ul><ul><li>盈利模式: </li></ul></ul></ul><ul><ul><ul><ul><li>长尾效应 </li></ul></ul></ul></ul><ul><ul><ul><ul><li>SAAS 模式 </li></ul></ul></ul></ul><ul><ul><ul><ul><li>服务层分成 </li></ul></ul></ul></ul>
  7. 7. Open API 能够带来什么 ? <ul><ul><li>服务提供商 </li></ul></ul><ul><ul><ul><li>资源价值最大化 </li></ul></ul></ul><ul><ul><ul><ul><li>更大的用户群 </li></ul></ul></ul></ul><ul><ul><ul><ul><li>更广泛的商业模式 </li></ul></ul></ul></ul><ul><ul><ul><ul><li>更多的合作伙伴 </li></ul></ul></ul></ul><ul><ul><ul><ul><li>数据互通挖掘潜在需求 </li></ul></ul></ul></ul><ul><ul><ul><li>网站结构成熟度提升 </li></ul></ul></ul><ul><ul><ul><ul><li>业务系统模块化 </li></ul></ul></ul></ul><ul><ul><ul><ul><li>资源结构关系合理化 </li></ul></ul></ul></ul><ul><ul><ul><ul><li>服务性能、安全、质量的提高 </li></ul></ul></ul></ul>
  8. 8. Open API 能够带来什么 ?
  9. 9. Open API 能够带来什么 ?
  10. 10. Open API 当前发展情况 <ul><li>Google Map : API 本身特色 + 成熟的框架 </li></ul><ul><li>Flickr : API 专业化、 Tag </li></ul><ul><li>YouTube :视频资源,符合 Gdata 规范结合搜索展现业务 </li></ul><ul><li>Amazon :业务类型特殊以及配套解决方案( EC2,S3,SQS,SimpleDB 作为 Framework; FPS,DevPay 作为支付, Alexa Web Search 作为搜索) </li></ul>
  11. 11. Open API 当前发展情况 <ul><li>国内: </li></ul><ul><ul><li>豆瓣,各个 SNS 网站,淘宝,雅虎中国,搜狐 </li></ul></ul><ul><ul><li>数据型服务占多数, API 种类相对较为单一 </li></ul></ul><ul><ul><li>服务成熟度处于初级阶段(稳定性,易用性) </li></ul></ul><ul><ul><li>安全流程大多参照国外 OAuth 的方式 </li></ul></ul><ul><ul><li>数据格式大多采用 RSS 和 Atom 的扩展 </li></ul></ul>
  12. 12. Open API 基础 <ul><li>Open API 的形态 </li></ul><ul><ul><li>RPC </li></ul></ul><ul><ul><ul><li>http://api.flickr.com/services/rest/?method=flickr.test.echo&name=value </li></ul></ul></ul><ul><ul><ul><li>RPC 形态其实就是 Web Service 的一种延续,只是少了繁重的解析、安全规范等。 </li></ul></ul></ul><ul><ul><ul><li>服务总入口、服务资源定位参数、业务参数。 </li></ul></ul></ul><ul><ul><li>REST </li></ul></ul><ul><ul><ul><li>http://www.google.com/calendar/feeds/wenchu.cenwc@alibaba-inc.com/allcalendars/full </li></ul></ul></ul><ul><ul><ul><li>服务地址就是资源定位地址, HTTP 协议作为服务协议而非传输协议 </li></ul></ul></ul>
  13. 13. Open API 基础 <ul><ul><li>两种形态的比较 </li></ul></ul><ul><ul><ul><li>无优劣 </li></ul></ul></ul><ul><ul><ul><li>开放性: REST 更容易 Merge 。 </li></ul></ul></ul><ul><ul><ul><li>接口设计: RPC 更接近传统设计模式,容易被开发者接受,同时也便于传统应用的接入和使用。 </li></ul></ul></ul><ul><ul><ul><li>扩展和复用: REST 对操作接口抽象度更高,对业务扩展和复用有利。 </li></ul></ul></ul><ul><ul><ul><li>安全: REST 对安全设计要求高,控制粒度要求更加细化。 </li></ul></ul></ul><ul><ul><ul><li>服务类型: REST 适合简单的数据类服务, RPC 适合复杂的非资源型操作类服务。 </li></ul></ul></ul><ul><ul><ul><li>对已有系统改造成本: RPC 改造成本低, REST 对系统数据结构以及流程设计要求较高。 </li></ul></ul></ul>
  14. 14. Open API 基础 <ul><li>Open API 的类型 </li></ul><ul><ul><li>数据型( SNS Website , Taobao ) </li></ul></ul><ul><ul><ul><li>应用以及其他类型服务的基础 </li></ul></ul></ul><ul><ul><ul><li>商业价值依赖于开发者能力而定 </li></ul></ul></ul><ul><ul><li>服务型( Google Map , Flickr ) </li></ul></ul><ul><ul><ul><li>技术特点突出 </li></ul></ul></ul><ul><ul><ul><li>结合自身数据资源或者外部数据资源产生商业价值 </li></ul></ul></ul><ul><ul><li>能力型( Amazon S3 , EC2 ) </li></ul></ul><ul><ul><ul><li>技术门槛高 </li></ul></ul></ul><ul><ul><ul><li>可以成为上层应用的基础设施 </li></ul></ul></ul><ul><ul><ul><li>有很强的商业价值 </li></ul></ul></ul>
  15. 15. Open API 基础 <ul><li>Open API 数据展现方式 </li></ul><ul><ul><li>RSS, Atom </li></ul></ul><ul><ul><ul><li>标准 REST 的数据操作和展现方式 </li></ul></ul></ul><ul><ul><li>Ajax/JavaScript, Widget </li></ul></ul><ul><ul><ul><li>服务框架化,体系化的集成手段 </li></ul></ul></ul><ul><ul><li>JSON </li></ul></ul><ul><ul><ul><li>平台、语言无关性对象传输的轻量级协议 </li></ul></ul></ul><ul><ul><li>XML </li></ul></ul><ul><ul><ul><li>传统的数据承载模式 </li></ul></ul></ul><ul><ul><li>PHP </li></ul></ul><ul><ul><ul><li>结合语言特点的展现方式 </li></ul></ul></ul><ul><ul><li>SOAP </li></ul></ul><ul><ul><ul><li>可利用 Web Service 成熟的安全,转发协议。 </li></ul></ul></ul>
  16. 16. Open API 基础 <ul><li>Open API 的安全 </li></ul><ul><ul><li>三类基础授权 </li></ul></ul>分类 类型 访问对象 作用 安全级别 手段 免授权 公开类信息(例如搜索引擎搜索到的结果等) 低 申请应用 ID 应用授权 非商业 商业 用户相关公开类信息(例如 SNS 中的个人公开信息) 服务提供商交验应用身份,保证数据传输无篡改 中 数字签名 用户授权 Web 模式 桌面模式 手机模式 个人用户相关的非公开信息(例如淘宝用户隐私信息) 在保障用户个人隐私数据的安全性前提下,提供给应用开发者访问和操作用户个人信息的能力 高 1.OAuth 代理授权 2. 用户名、密码代理授权
  17. 17. Open API 基础 <ul><li>OAuth 授权流程与传统授权流程 </li></ul><ul><ul><li>授权范围 </li></ul></ul><ul><ul><ul><li>OAuth 授权可细化到对服务或者对具体资源的控制 </li></ul></ul></ul><ul><ul><ul><li>传统授权流程无法控制授权范围 </li></ul></ul></ul><ul><ul><li>授权时效性 </li></ul></ul><ul><ul><ul><li>OAuth 授权可以控制授权时效 </li></ul></ul></ul><ul><ul><ul><li>传统授权流程无法控制时效性 </li></ul></ul></ul><ul><ul><li>授权安全性 </li></ul></ul><ul><ul><ul><li>OAuth 仅仅保存的是认证存根,离开应用不具有可用性 </li></ul></ul></ul><ul><ul><ul><li>传统授权流程保存的是用户的真实登陆信息,一旦泄露对用户信息和资源将无法保证其安全性 </li></ul></ul></ul>
  18. 18. Open API 基础
  19. 19. Open API 基础 <ul><li>OAuth 流程的缺点 </li></ul><ul><ul><li>交互流程过多 </li></ul></ul><ul><ul><li>应用开发者对 Token 的维护成本高(有效期维护) </li></ul></ul><ul><ul><li>用户对于 Token 最终使用范围无法控制(授权范围和最终访问内容粒度不匹配) </li></ul></ul><ul><ul><li>无法满足多种服务级别的需要(当前支持 session 级别,同是也需要支持 request 级别) </li></ul></ul><ul><ul><li>Token 作为参数传递导致安全级别降低。 </li></ul></ul>
  20. 20. Open API 的实践 <ul><li>免授权和应用授权类服务的开发 </li></ul><ul><li>@Test </li></ul><ul><li>public void testYahooSearch() //Yahoo 搜索服务测试 </li></ul><ul><li>{ </li></ul><ul><li>//Yahoo 搜索服务地址,通过切换 searchengine,searchtype 来改变搜索资源的不同,支持图片,网页,新闻,视频 </li></ul><ul><li>String yahoo_search_service = &quot;http://search.yahooapis.com/{searchengine}/{version}/{searchtype}&quot;; </li></ul><ul><li>Map<String,Object> params = new HashMap<String,Object>(); // 服务调用传入的参数 </li></ul><ul><li>params.put(&quot;appid&quot;, yahoo_appkey ); // 申请的应用身份 Id </li></ul><ul><li>params.put(&quot;query&quot;,&quot; 冰激凌 + 巧克力 - 水果 &quot;); // 搜索内容,搜索冰淇凌,需要有巧克力但不要水果 </li></ul><ul><li>//ImageSearchService ,图片类搜索 ,TestUtil 是一个基础工具方法,这里就不贴了,详细地可以参看 Google code 的源码 </li></ul><ul><li>String result = TestUtil. sendRequest (yahoo_search_service </li></ul><ul><li>.replace(&quot;{searchengine}&quot;, &quot;ImageSearchService&quot;).replace(&quot;{version}&quot;, &quot;V1&quot;).replace(&quot;{searchtype}&quot;, &quot;imageSearch&quot;) </li></ul><ul><li>,params, null ,TestUtil. HTTP_METHOD_GET , null ,&quot;UTF-8&quot;, null ); </li></ul><ul><li>System. out .println(result); </li></ul><ul><li>…… </li></ul><ul><li>} </li></ul>
  21. 21. Open API 的实践 <ul><li>// 这部分将在后面的 Mash-up 范例中使用,是通过 Boss 搜索缩略图片 </li></ul><ul><li>public static List<String> bossSearchService() throws XPathExpressionException, ParserConfigurationException, SAXException, IOException </li></ul><ul><li>{ </li></ul><ul><li>…… </li></ul><ul><li>String boss_image_service = &quot;http://boss.yahooapis.com/ysearch/images/v1/&quot;; // 服务地址 </li></ul><ul><li> // 搜索资源关键字编码,关于编码特别要注意,很多时候使用 Open API 出现问题就是因为中文,导致签名或者使用出现问题 </li></ul><ul><li>String resource = URLEncoder. encode (&quot;&quot;ice cream&quot; -apple +Chocolate&quot;,&quot;UTF-8&quot;); </li></ul><ul><li>…… </li></ul><ul><li>String result = TestUtil. sendRequest ( new StringBuffer().append(boss_image_service).append(resource).toString() </li></ul><ul><li>,params, null ,TestUtil. HTTP_METHOD_GET , null ,&quot;UTF-8&quot;, null ); </li></ul><ul><li>urls = processXmlResult (result); // 采用 XPath 来解析返回结果,当前通常解析返回结果的方式就采用 XPath,XQuery ,如果是 RSS 方式通常会采用一些第三方的开源项目,类似于 ROME ,详细内容可以参看 Google code 的源码 </li></ul><ul><li>return urls; </li></ul><ul><li>} </li></ul>
  22. 22. Open API 的实践 <ul><li>testYahooSearch() 的运行结果如下: </li></ul><ul><li><?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?> </li></ul><ul><li><ResultSet xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot; xmlns=&quot;urn:yahoo:srchmi&quot; xsi:schemaLocation=&quot;urn:yahoo:srchmi http://api.search.yahoo.com/ImageSearchService/V1/ImageSearchResponse.xsd&quot; totalResultsAvailable=&quot;171&quot; totalResultsReturned=&quot;10&quot; firstResultPosition=&quot;1&quot;> // 记录数信息 </li></ul><ul><li><Result> </li></ul><ul><li><Title>1194498494726_77635.jpg</Title> </li></ul><ul><li><Summary>] 冰激凌 2.5 万美元 1 份 …… </Summary> </li></ul><ul><li><Url> http://news.tom.com/uimg/2007/11/8/chenhong/1194498494726_77635.jpg</Url > </li></ul><ul><li>…… </li></ul><ul><li></Result> </li></ul><ul><li><Result>……</Result> </li></ul><ul><li>…… </li></ul><ul><li></ResultSet> </li></ul><ul><li>测试运行结果是搜索结果集的 xml 描述,可以根据 ImageSearchResponse.xsd 来解析返回的内容。 </li></ul><ul><li>  </li></ul><ul><li>testBossSearch() 运行的结果如下: </li></ul><ul><li>nextpage Url : /ysearch/images/v1/%22ice%20cream%22%20-apple%20%20Chocolate?count=10&dimensions=small&appid=nkl8kwzV34FPuapz_cGP3QiOU7jvOZB2kuWEBq0CoGBvRfirCtgnIMP6mVYNHRuFWBHn&format=xml&start=10 </li></ul><ul><li>search result 1 url : http://www.soya.be/pictures/market/chocolate-ice-cream.jpg </li></ul><ul><li>search result 2 url : http://www.icecreampark.com/images/Chocolate%20ice%20cream%202.jpg </li></ul><ul><li>…… </li></ul><ul><li>测试运行的结果是已经经过 XPath 初步处理的结果,提供了下一页的入口 URL 地址,以及本次搜索出来的结果集。 </li></ul>
  23. 23. Open API 的实践 <ul><li>用户授权类服务的开发 (Flickr API) </li></ul><ul><li>@SuppressWarnings(&quot;unchecked&quot;) // 认证和授权流程,后面正式测试代码中会使用 </li></ul><ul><li>protected String auth() throws IOException </li></ul><ul><li>{ </li></ul><ul><li>…… </li></ul><ul><li>logicmap.put(&quot;method&quot;, &quot;flickr.auth.getFrob&quot;); // 授权服务名称作为参数 </li></ul><ul><li>logicmap.put(&quot;api_key&quot;, flickr_appkey ); // 置入应用 ID </li></ul><ul><li>// 发起服务请求,获取授权 Token </li></ul><ul><li>result = flickrCommonServiceRequest (TestUtil. HTTP_METHOD_GET , flickr_service ,logicmap, null ); </li></ul><ul><li>// 分析返回结果获取授权 Token </li></ul><ul><li>frob = TestUtil. getTagContent (result,&quot;<frob>&quot;,&quot;</frob>&quot;); </li></ul><ul><li>…… </li></ul><ul><li>// 根据服务地址, apikey, 授权 Token, 操作权限和参数签名,拼装用户授权 URL </li></ul><ul><li>…… </li></ul><ul><li>// 模拟弹出 IE ,展现给用户授权登录的界面 </li></ul><ul><li>String cmd = new StringBuilder(&quot;rundll32 url.dll,FileProtocolHandler &quot;).append(authStr).toString(); </li></ul><ul><li>Runtime. getRuntime ().exec(cmd); </li></ul><ul><li>…… </li></ul><ul><li>// 当用户在弹出 IE 中授权完成以后,需要在控制台中输入 ok 回车表示确认,程序才能继续 </li></ul><ul><li>String passcommand = TestUtil. readLineFromConsole (); </li></ul><ul><li> …… …… </li></ul><ul><li>result = flickrCommonServiceRequest (TestUtil. HTTP_METHOD_GET , flickr_service ,logicmap, null ); </li></ul><ul><li>token = TestUtil. getTagContent (result,&quot;<token>&quot;,&quot;</token>&quot;); // 获得用户 Token </li></ul><ul><li>return token; </li></ul><ul><li>} </li></ul>
  24. 24. Open API 的实践 <ul><li>@Test // 测试上传图片 </li></ul><ul><li>public void uploadPhotoTest() throws IOException </li></ul><ul><li>{ </li></ul><ul><li>String token = auth(); / / 授权 </li></ul><ul><li>if (token != null ) </li></ul><ul><li>{ </li></ul><ul><li>// 访问个人上传图片各种状态信息,可以不作,这里只是确认还有多少图片可以上传 </li></ul><ul><li>//logicmap 中放入请求的方法名, apiKey,token </li></ul><ul><li>String result = flickrCommonServiceRequest (TestUtil. HTTP_METHOD_GET , </li></ul><ul><li>flickr_service ,logicmap, null ); </li></ul><ul><li>…… </li></ul><ul><li>// 输入需要上传图片的地址,可以是本地的图片也可以是网络图片 </li></ul><ul><li>System. out .println(&quot;please input photo location you want to upload!&quot;); </li></ul><ul><li>String file = TestUtil. readLineFromConsole (); </li></ul><ul><li>…… </li></ul><ul><li>//logicmap 中是必要的业务参数, files 是需要上传的文件地址 </li></ul><ul><li>result = flickrCommonServiceRequest (TestUtil. HTTP_METHOD_POST , </li></ul><ul><li>flickr_uploadphoto_service ,logicmap,files); </li></ul><ul><li>// 如果上传成功将会获得图片 id </li></ul><ul><li>String photoid = TestUtil. getTagContent (result,&quot;<photoid>&quot;,&quot;</photoid>&quot;); </li></ul><ul><li>// 根据返回的图片 id 拼装成资源访问地址 , Flickr 对于图片内容的定位还是采用标准的 REST 风格,地址如下: </li></ul><ul><li>http://www.flickr.com/photos/ 用户名 / photoid </li></ul><ul><li>…… </li></ul><ul><li>} </li></ul>
  25. 25. Open API 的实践
  26. 26. Open API 的实践
  27. 27. Open API 的实践
  28. 28. Open API 的实践
  29. 29. Open API 的实践 <ul><li>Mash up (Taobao API + Yahoo Boss API) </li></ul><ul><li>淘宝更新商品信息 +Boss 搜索相关图片 </li></ul>
  30. 30. Open API 的实践
  31. 31. Open API 的实践
  32. 32. Open API 的实践 <ul><li>Mash up ( Google Gadget ) </li></ul>
  33. 33. 服务集成平台( SIP ) <ul><li>服务集成平台( SIP )的角色和作用 </li></ul>
  34. 34. Open API 的实践
  35. 35. 服务集成平台( SIP ) <ul><li>ISV (独立软件开发商)最关心什么? </li></ul><ul><li>服务资源是否丰富 , 关系创新。 </li></ul><ul><li>服务质量是否有保证 , 关系应用商业化最基本需求 . </li></ul><ul><li>开发集成是否便利 , 关系着开发、维护成本。 </li></ul><ul><li>  </li></ul><ul><li>  </li></ul>
  36. 36. 服务集成平台( SIP ) <ul><li>ISP (独立服务提供商)最关心什么? </li></ul><ul><li>服务安全性。如果损害到自身或者用户利益,则就失去了原来开放的初衷。 </li></ul><ul><li>是否有足够多的应用开发者使用服务。 </li></ul><ul><li>服务的非业务性需求是否可以满足。(服务监控告警,计费,统计分析等) </li></ul>
  37. 37. 服务集成平台( SIP ) <ul><li>SIP 是连接 ISV 和 ISP 的“桥梁”。 </li></ul><ul><li>丰富的 ISV 资源以及丰富的 ISP 资源。 </li></ul><ul><li>统一安全标准和多种控制策略,即保证了 ISP 的安全,又能够让 ISV 开发起来方便。 </li></ul><ul><li>让 ISP 专注于业务服务的开发,提升服务质量,对非业务性的需求,如安全,服务监控预警,日志分析统计,计费等提供一揽子解决方案。 </li></ul>
  38. 38. 服务集成平台( SIP )
  39. 39. 服务集成平台( SIP )
  40. 40. 服务集成平台( SIP )
  41. 41. Open API 发展趋势 <ul><li>数据集成到流程集成 </li></ul><ul><ul><li>GData :数据规范化 </li></ul></ul><ul><ul><li>Pipes :基于数据规范化的流程定制 </li></ul></ul><ul><li>OpenID 到 Connect </li></ul><ul><li>服务集成层次化,框架化 </li></ul><ul><ul><li>Data  Service  UI </li></ul></ul><ul><ul><li>Service SDK  JavaScript FrameWork  Widgets </li></ul></ul>
  42. 42. Open API 发展趋势
  43. 43. Open API 发展趋势
  44. 44. 一点感想 <ul><li>机遇和挑战: ISV 、 ISP 、 SIP </li></ul><ul><li>多一些理解和包容 </li></ul><ul><li>不断的学习,思考,创新 </li></ul><ul><li>站在别人的肩膀上看未来 </li></ul>

×