Open Api&Sip
Upcoming SlideShare
Loading in...5
×
 

Open Api&Sip

on

  • 2,809 views

Open Api

Open Api

Statistics

Views

Total Views
2,809
Views on SlideShare
2,799
Embed Views
10

Actions

Likes
2
Downloads
77
Comments
0

2 Embeds 10

http://www.slideshare.net 9
http://192.168.10.100 1

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Open Api&Sip Open Api&Sip Presentation Transcript

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