Open Api&Sip

44
1 OPEN API & SIP OPEN API & SIP 文文 文文 Email: [email protected] Blog : http://blog.csdn.net/cenwenchu79 Code: http://rest-demo.googlecode.com/files/demost ore.rar

description

Open Api

Transcript of Open Api&Sip

1

OPEN API & SIPOPEN API & SIP

文初 文初

Email: [email protected] : http://blog.csdn.net/cenwenchu79

Code: http://rest-demo.googlecode.com/files/demostore.rar

主题 什么是什么是 Open API Open API ??

Open APIOpen API 能够带来什么能够带来什么 ??

Open APIOpen API 当前发展情况当前发展情况

Open APIOpen API 基础基础

Open APIOpen API 实践实践

服务集成平台(服务集成平台( SIPSIP ))

Open APIOpen API 发展趋势发展趋势

一点感想一点感想2

什么是什么是 Open APIOpen API

一系列技术可以使得网站之间信息互通

OpenOpen 资源类型不限( Data ,Compute capability , Storage)

Open 调用者不限(应用类型,实现技术)Open 展现和使用方式不限( UI Mash up, Data Merge)

API接口,屏蔽实现

3

什么是什么是 Open APIOpen API

Open API所涉及到的角色

4

Open APIOpen API 能够带来什么能够带来什么 ??用户

同质竞争提高服务质量

服务流程串联带来的便利

数据关联性对潜在需求的满足

贡献与参与

5

Open APIOpen API 能够带来什么能够带来什么 ??

开发者创新:丰富的资源(数据,服务等)带来无限想象空间

快速:轻量级的开发模式二次开发的积累效应轻量级的产品化流程

盈利模式:长尾效应 SAAS模式服务层分成

6

Open APIOpen API 能够带来什么能够带来什么 ??

服务提供商资源价值最大化

更大的用户群更广泛的商业模式更多的合作伙伴数据互通挖掘潜在需求

网站结构成熟度提升业务系统模块化资源结构关系合理化服务性能、安全、质量的提高

7

Open APIOpen API 能够带来什么能够带来什么 ??

8

Open APIOpen API 能够带来什么能够带来什么 ??

9

Open APIOpen API 当前发展情况当前发展情况

10

Google MapGoogle Map:: APIAPI本身特色本身特色 ++成熟的框架成熟的框架FlickrFlickr:: APIAPI专业化、专业化、 TagTag

YouTubeYouTube:视频资源,符合:视频资源,符合 GdataGdata规范结合搜索展现业规范结合搜索展现业

务务AmazonAmazon:业务类型特殊以及配套解决方案:业务类型特殊以及配套解决方案

(( EC2,S3,SQS,SimpleDBEC2,S3,SQS,SimpleDB 作为作为 Framework; FPS,DevPayFramework; FPS,DevPay

作为支付,作为支付, Alexa Web SearchAlexa Web Search作为搜索)作为搜索)

Open APIOpen API 当前发展情况当前发展情况 国内:

豆瓣,各个 SNS网站,淘宝,雅虎中国,搜狐

数据型服务占多数, API种类相对较为单一

服务成熟度处于初级阶段(稳定性,易用性)

安全流程大多参照国外 OAuth的方式

数据格式大多采用 RSS和 Atom的扩展

Open API Open API 基础基础 Open API的形态

RPChttp://api.flickr.com/services/rest/?

method=flickr.test.echo&name=valueRPC形态其实就是Web Service的一种延续,只是少了繁重的解析、安全规范等。

服务总入口、服务资源定位参数、业务参数。 REST

http://www.google.com/calendar/feeds/[email protected]/allcalendars/full

服务地址就是资源定位地址, HTTP协议作为服务协议而非传输协议

12

Open API Open API 基础基础 两种形态的比较

无优劣

开放性: REST更容易Merge。

接口设计: RPC更接近传统设计模式,容易被开发者接受,同时也便于传统应用的接入和使用。

扩展和复用: REST对操作接口抽象度更高,对业务扩展和复用有利。

安全: REST对安全设计要求高,控制粒度要求更加细化。

服务类型: REST 适合简单的数据类服务, RPC 适合复杂的非资源型操作类服务。

对已有系统改造成本: RPC 改造成本低, REST对系统数据结构以及流程设计要求较高。

13

Open API Open API 基础基础 Open API的类型

数据型( SNS Website , Taobao)应用以及其他类型服务的基础商业价值依赖于开发者能力而定

服务型( Google Map , Flickr)技术特点突出结合自身数据资源或者外部数据资源产生商业价值

能力型( Amazon S3 , EC2)技术门槛高可以成为上层应用的基础设施有很强的商业价值

14

Open API Open API 基础基础 Open API数据展现方式

RSS, Atom 标准 REST的数据操作和展现方式

Ajax/JavaScript, Widget服务框架化,体系化的集成手段

JSON平台、语言无关性对象传输的轻量级协议

XML传统的数据承载模式

PHP结合语言特点的展现方式

SOAP 可利用Web Service成熟的安全,转发协议。

15

Open API Open API 基础基础 Open API的安全

三类基础授权

16

分类 类型 访问对象 作用 安全级别 手段

免授权 公开类信息(例如搜索引擎搜索到的结

果等)

低 申请应用 ID

应用授权 非商业商业

用户相关公开类信息(例如SNS中的个人

公开信息)

服务提供商交验应用身份,保证数据传输无篡改

中 数字签名

用户授权 Web模式桌面模式手机模式

个人用户相关的非公开信息(例如淘宝用户隐私信息)

在保障用户个人隐私数据的安全性前提下,提供给应用开发者访问和操作用户个人信息的能力

高 1.OAuth 代理授权

2.用户名、密码代理授权

Open API Open API 基础基础 OAuth 授权流程与传统授权流程

授权范围OAuth 授权可细化到对服务或者对具体资源的控制传统授权流程无法控制授权范围

授权时效性OAuth 授权可以控制授权时效传统授权流程无法控制时效性

授权安全性OAuth 仅仅保存的是认证存根,离开应用不具有可用性传统授权流程保存的是用户的真实登陆信息,一旦泄露对用户信息和资源将无法保证其安全性

17

Open API Open API 基础基础

18

sd OAuth 授权流程

用户 第三方应用 服务提供商

1. ()使用第三方应用

2. ()调用服务

3. ()判断是否需要操作用户私有信息和资源

[ ]:4. ()需要操作用户私有信息和资源 跳转到用户登录、授权页面,提示用户是否决定授权

5. ()登录并授权

[ Token Token]:6. Token()请求 只能使用一次,并且只能用于交换访问 创建并保存请求

7. Token()返回请求

8. Token Token()请求 换取访问

9. Token ()创建访问 ,并且设置范围和时间

10. Token()返回访问

[ Token]:11. ()带有访问 访问服务

Open API Open API 基础基础 OAuth流程的缺点

交互流程过多

应用开发者对 Token的维护成本高(有效期维护)

用户对于 Token最终使用范围无法控制(授权范围和最终访问内容粒度不匹配)

无法满足多种服务级别的需要(当前支持 session级别,同是也需要支持 request级别)

Token作为参数传递导致安全级别降低。19

Open APIOpen 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("appid", yahoo_appkey); //申请的应用身份 Id

params.put("query"," 冰激凌 + 巧克力 - 水果 ");//搜索内容,搜索冰淇凌,需要有巧克力但不要水果//ImageSearchService,图片类搜索 ,TestUtil是一个基础工具方法,这里就不贴了,详细地可以参

看 Google code的源码String result = TestUtil.sendRequest(yahoo_search_service

.replace("{searchengine}", "ImageSearchService").replace("{version}", "V1").replace("{searchtype}", "imageSearch")

,params,null,TestUtil.HTTP_METHOD_GET,null,"UTF-8",null);

System.out.println(result);

……

}

20

Open APIOpen API 的实践的实践//这部分将在后面的Mash-up范例中使用,是通过 Boss搜索缩略图片

public static List<String> bossSearchService() throws XPathExpressionException, ParserConfigurationException, SAXException, IOException

{

……

String boss_image_service = "http://boss.yahooapis.com/ysearch/images/v1/";//服务地址 //搜索资源关键字编码,关于编码特别要注意,很多时候使用 Open API出现问题就是因为中文,导

致签名或者使用出现问题 String resource = URLEncoder.encode("\"ice cream\" -apple +Chocolate","UTF-8");

……

String result = TestUtil.sendRequest(new StringBuffer().append(boss_image_service).append(resource).toString()

,params,null,TestUtil.HTTP_METHOD_GET,null,"UTF-8",null);

urls = processXmlResult(result); //采用 XPath来解析返回结果,当前通常解析返回结果的方式就采用 XPath,XQuery,如果是 RSS方式通常会采用一些第三方的开源项目,类似于 ROME,详细内容可以参看Google code的源码

return urls;

}

21

Open APIOpen API 的实践的实践testYahooSearch()的运行结果如下:<?xml version="1.0" encoding="UTF-8"?>

<ResultSet xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="urn:yahoo:srchmi" xsi:schemaLocation="urn:yahoo:srchmi http://api.search.yahoo.com/ImageSearchService/V1/ImageSearchResponse.xsd" totalResultsAvailable="171" totalResultsReturned="10" firstResultPosition="1">//记录数信息

<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地址,以及本次搜索出来的结果集。

22

Open APIOpen API 的实践的实践 用户授权类服务的开发 (Flickr API) @SuppressWarnings("unchecked")//认证和授权流程,后面正式测试代码中会使用

protected String auth() throws IOException

{

……

logicmap.put("method", "flickr.auth.getFrob");//授权服务名称作为参数logicmap.put("api_key", flickr_appkey); //置入应用 ID

//发起服务请求,获取授权 Token

result = flickrCommonServiceRequest(TestUtil.HTTP_METHOD_GET,flickr_service,logicmap,null);

//分析返回结果获取授权 Token

frob = TestUtil.getTagContent(result,"<frob>","</frob>");

……

//根据服务地址, apikey,授权 Token,操作权限和参数签名,拼装用户授权 URL

……

//模拟弹出 IE,展现给用户授权登录的界面String cmd =new StringBuilder("rundll32 url.dll,FileProtocolHandler ").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,"<token>","</token>");//获得用户 Token

return token;

}23

Open APIOpen 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("please input photo location you want to upload!");

String file = TestUtil.readLineFromConsole();

……

//logicmap中是必要的业务参数, files是需要上传的文件地址result = flickrCommonServiceRequest(TestUtil.HTTP_METHOD_POST,

flickr_uploadphoto_service,logicmap,files);

//如果上传成功将会获得图片 id

String photoid = TestUtil.getTagContent(result,"<photoid>","</photoid>");

//根据返回的图片 id拼装成资源访问地址 , Flickr对于图片内容的定位还是采用标准的 REST风格,地址如下:http://www.flickr.com/photos/用户名 /photoid

……

}

24

Open APIOpen API 的实践的实践

25

Open APIOpen API 的实践的实践

26

Open APIOpen API 的实践的实践

27

Open APIOpen API 的实践的实践

28

Open APIOpen API 的实践的实践Mash up (Taobao API + Yahoo Boss API)

淘宝更新商品信息 +Boss搜索相关图片

29

Open APIOpen API 的实践的实践

30

Open APIOpen API 的实践的实践

31

Open APIOpen API 的实践的实践 Mash up( Google Gadget)

服务集成平台(服务集成平台( SIPSIP )) 服务集成平台( SIP)的角色和作用

33

Open APIOpen API 的实践的实践

服务集成平台(服务集成平台( SIPSIP ))ISV(独立软件开发商)最关心什么?

服务资源是否丰富 ,关系创新。

服务质量是否有保证 ,关系应用商业化最基本需求 .

开发集成是否便利 ,关系着开发、维护成本。 

 35

服务集成平台(服务集成平台( SIPSIP ))ISP(独立服务提供商)最关心什么?

服务安全性。如果损害到自身或者用户利益,则就失去了原来开放的初衷。

是否有足够多的应用开发者使用服务。

服务的非业务性需求是否可以满足。(服务监控告警,计费,统计分析等)

36

服务集成平台(服务集成平台( SIPSIP ))SIP是连接 ISV和 ISP的“桥梁”。

丰富的 ISV资源以及丰富的 ISP资源。

统一安全标准和多种控制策略,即保证了 ISP的安全,又能够让 ISV开发起来方便。

让 ISP专注于业务服务的开发,提升服务质量,对非业务性的需求,如安全,服务监控预警,日志分析统计,计费等提供一揽子解决方案。

37

服务集成平台(服务集成平台( SIPSIP ))

服务集成平台(服务集成平台( SIPSIP ))

服务集成平台(服务集成平台( SIPSIP ))

Open APIOpen API 发展趋势发展趋势 数据集成到流程集成

GData :数据规范化 Pipes:基于数据规范化的流程定制

OpenID到 Connect

服务集成层次化,框架化 Data Service UI Service SDK JavaScript FrameWork Widgets

Open APIOpen API 发展趋势发展趋势

Open APIOpen API 发展趋势发展趋势

一点感想

机遇和挑战: ISV、 ISP、 SIP

多一些理解和包容

不断的学习,思考,创新

站在别人的肩膀上看未来