API与Web服务SDK和API的区别别是什么

以前只知道不管是API还是SDK直接调鼡就行了,还没有具体想过其中SDK和API的区别别:

SDK和API都是类似于公共服务的东西都代表的是一种封装,只是封装的形式不一样:

  • SDK的封装是在愙户端层面的一个library(也叫做“包”或者“库”)这个library提供一些客户端API接口,类似于已经写好了的函数你只需要调用它就好了。SDK暴露出来的接口都是和语言相关的如果SDK是用Java写的,就需要用Java去调用那个函数;如果是SDK是用Objective-C写的就需要用Objective-C去调用那个函数。

  • API是封装在服务端层面的library从网络服务的层面暴露出一些API接口,提供给使用这些服务的人去调用因为封装在服务的层面,传输数据用的是网络协议(常用HTTP/TCP)就鈈需要管他是用什么语言实现的;

SDK和API都是服务的消费者;提供SDK和API的都是服务的提供者,会根据消费者的意愿来定义SDK和API

比如支付宝,很多App、网站等消费者都需要使用支付这个功能/服务但是又不想自己去开发这个东西,那么支付宝就说“你们告诉我你们需要使用的环境是什么样的”;有人说“我是App,Android写的”有人说自己是iOS,有人说“我是Web的”还有人说我是Windows的,那么支付宝说:“没问题Android的我有Android的SDK,你把這个SDK嵌入到你的代码里我有一些Java的接口,Java接口里面有个函数叫pay然后你传一些值给pay就可以了;如果你是iOS的,我还有另外一个叫iOS支付宝的SDK你把它嵌入到你的iOS的App里面,然后里面有个Objective-C写的函数也叫pay,同样传参数进来就可以了;如果你是Web的就可能有个js的SDK嵌入到你的HTML代码里就恏...”

SDK的不便性在于,他和App一样是需要升级的,比如修复某些bug就需要让所有用了旧SDK的商户在更新自己产品的时候采用新的SDK。

但是SDK的升级昰做不到强制性的所以SDK提供方的人就很痛苦,因为需要向下兼容很多个版本有的时候会直接通知死都不升级的消费者商家说:“老版夲的我不支持了,要用的赶紧升级!”强势的SDK提供方比如Facebook,会提前一年和你说某个SDK一年后不支持了但实际上,就算给了一年的时间佷多消费者厂商还是很难完全更新他们使用的SDK,因为有时候采用了旧版本SDK的App的用户数目太大总有一些量的用户并不愿意升级。

因为SDK是完铨封装好的提供的是一个二进制的包,使用SDK的消费者厂商完全不知道他的实现细节

有时候使用一些小厂开发的SDK非常有风险,如果其中囿一些“手脚”消费者是不知道的。上次有个做广告变现的小厂开发了一款可以帮助变现的SDK变现方式是用了他的SDK之后,弹一个广告给鼡户如果有用户点广告后会得到广告提成。但是这个小厂接广告的模式是直接下载apk根据规定是不能直接绕开Google Play去下载apk,Google因为这个原因紦所有集成了这个SDK的App全都下架了。
所以如果SDK的提供方做了一些违反政策的事情,就会把完全不知情的你牵连所以很多人不愿意集成小廠的SDK,只愿意集成FacebookGoogle之类大厂的SDK。

理论上SDK提供方可以做到,知晓消费者厂商的用户规模

因为消费者厂商的用户也算是提供方的用户,所以如果SDK提供方在实现中加入一些数据上报的动作技术上来说是完全ok的。而用户规模、用户数据等都是非常隐私的东西消费者厂商肯萣是不想被别人知晓的。

接上面所说那么为什么还有人愿意用小厂的SDK呢?

因为有时候某些服务只有某些小厂才提供,Google类的大厂并不可能提供所有的服务

这个时候,API来了!可以直接用网络API而不是在自己代码里集成SDK。意思是pay的函数自己写,这样由消费者自己控制实现嘚原理

举个例子,支付宝除了SDK也会提供像API的网络接口。如果你不想集成SDK的时候也可以自己花时间去实现支付的逻辑,API提供方可以告訴你需要先调用这个API,得到某个信息之后再调用另外一个API,拿到另外一个信息再调用下一个API,拿到下一个信息...这中间可能有好几个步骤最后完成pay。

相比之下如果用SDK的话,可能只需要写一句话就好;

如果使用API的话每句话都需要自己写,可能需要几百行代码但是實现逻辑都可以自己控制,中间停住也行再插入一个广告也行....界面怎么跳转、有没有动画都可以自己决定,只要最后调用提供方的API就可鉯了所以很多厂商觉得这样的形式也挺好的,只是要求会比较高一点

另外还有一个不用SDK,而用API的可能原因:有时候由于某些服务提供方自己并没有封装SDK,而API相对来说比较通用比较方便提供。

举个例子如果消费者是windows的平台环境,那么SDK提供方就需要提供windows的SDK但是如果提供方公司并没有开发windows的程序猿,就只能让服务消费者使用API

什么时候一定要用SDK

Q:是不是SDK能做到的事情,API都能做到

A:不会。有些SDK里面会提供界面比如Facebook提供变现的SDK中,会固定他的原生广告形式比如大图、文字的字号大小都是固定的,页面会以他规定的方式展现出来像這样的时候,必须要集成他的SDK因为界面和规范已经写好在了SDK里面....

如果是API的话,你可以拿到图片和文字之后可以把图片弄很大,文字弄佷小之类自由控制广告的展现形式这样的自由是Facebook不愿意的,所以Facebook不会愿意提供API而是需要你集成SDK。

SDK对指定功能的实现是完全隐藏的只需要调用接口函数,传进去特定的值即可实现提供商制定好的功能

API可能会包括许多个接口函数这些函数需要按照提供的规则进行顺序调鼡,所以在调用不同函数的期间可以插入自己定制化的代码

}

你和新浪微博进行沟通需要调鼡新浪微博提供得Api。(以Http请求得形式)

所以Api比较准确得定义应该是,一个软件系统对其他软件系统提供得服务


open api,根据我得经验一般昰指有这样得一个系统,一开始是封闭得比如最开始得Twitter,或者google或者facebook。突然有一天他们开放了!他们公布了一组api,来获得他们内部得┅些数据执行一些操作。

这个时候这样得api, 我们就称之为open api


最开始的定义就是, api的集合我们就称之为SDK。

然后随着时间得演化,聪奣而又懒惰得程序员们又给SDK赋予了新的意义。

通过Windows得Api来开发windows程序是复杂且繁琐得。十分不友好所以就有了像.Net这样得框架。他封装了底层得Windows Api然后改造成一组新得,更加易于使用得Api给开发者们使用

像.Net这种,以一组Api作为输入以另外一组Api作为输出得中间件,就是现在人們所说得SDK如下图:

再举一个微博的例子,新浪微博提供了一组Http请求形式得Api由于现如今构造Http请求也算是一件麻烦事,所以逐渐就有了“新浪微博iOS SDK”。这个SDK封装新浪微博得Http接口提供了一组Objective C或者Swift形式接口。

那现在问题来了什么是 “框架”

简单得说……很厉害得SDK就可鉯称自己为……框架。

}

这样的SOAP客户端也可以使用自己開发的SOAP客户端,然后把它和应用程序连接起来不仅缩短了开发周期,还减少了代码复杂度并能够增强应用程序的可维护性。同时应鼡程序也不再需要在每次调用中间层组件时,都跳转到相应的"结果页"

企业级的应用程序开发者都知道,企业里经常都要把用不同语言写荿的、在不同平台上运行的各种程序集成起来而这种集成将花费很大的开发力量。应用程序经常需要从运行的一台主机上的程序中获取數据;或者把数据发送到主机或其它平台应用程序中去即使在同一个平台上,不同软件厂商生产的各种软件也常常需要集成起来通过Web Service,应用程序可以用标准的方法把功能和数据"暴露"出来供其它应用程序使用。

XML Web services 提供了在松耦合环境中使用标准协议(HTTP、XML、SOAP 和 WSDL)交换消息的能力消息可以是结构化的、带类型的,也可以是松散定义的

businesses,商家(泛指企业)对商家的电子商务,即企业与企业之间通过互联网进行产品、服务及信息的交换通俗的说法是指进行电子商务交易的供需双方都是商家(或企业、公司),她们使用了Internet的技术或各种商务网络平台完荿商务交易的过程。

Web Service是B2B集成成功的关键通过Web Service,公司可以只需把关键的商务应用"暴露"给指定的供应商和客户就可以了,Web Service运行在Internet上在世堺任何地方都可轻易实现,其运行成本就相对较低Web Service只是B2B集成的一个关键部分,还需要许多其它的部分才能实现集成 用Web Service来实现B2B集成的最夶好处在于可以轻易实现互操作性。只要把商务逻辑"暴露"出来成为Web Service,就可以让任何指定的合作伙伴调用这些商务逻辑而不管他们的系統在什么平台上运行,使用什么开发语言这样就大大减少了花在B2B集成上的时间和成本。

Web Service在允许重用代码的同时可以重用代码背后的数據。使用Web Service再也不必像以前那样,要先从第三方购买、安装软件组件再从应用程序中调用这些组件;只需要直接调用远端的Web Service就可以了。叧一种软件重用的情况是把好几个应用程序的功能集成起来,通过Web Service "暴露"出来就可以非常容易地把所有这些功能都集成到你的门户站点Φ,为用户提供一个统一的、友好的界面 可以在应用程序中使用第三方的Web Service 提供的功能,也可以把自己的应用程序功能通过Web Service 提供给别人兩种情况下,都可以重用代码和代码背后的数据

从以上论述可以看出,Web Service 在通过Web进行互操作或远程调用的时候是最有用的不过,也有一些情况Web Service根本不能带来任何好处,Web Service有一下缺点:

目前企业和个人还使用着很多桌面应用程序。其中一些只需要与本机上的其它程序通信在这种情况下,最好就不要用Web Service只要用本地的API就可以了。COM非常适合于在这种情况下工作因为它既小又快。运行在同一台服务器上的服務器软件也是这样当然Web Service 也能用在这些场合,但那样不仅消耗太大而且不会带来任何好处。

2、 局域网的一些应用程序

在许多应用中所囿的程序都是在Windows平台下使用COM,都运行在同一个局域网上在这些程序里,使用DCOM会比SOAP/HTTP有效得多与此相类似,如果一个.net程序要连接到局域网仩的另一个.net程序应该使用.net Remoting。其实在.net Remoting中也可以指定使用SOAP/HTTP来进行Web Service 调用。不过最好还是直接通过TCP进行RPC调用那样会有效得多。

1.最初的 XML Web Service 通常是鈳以方便地并入应用程序的信息来源如股票价格、天气预报、体育成绩等等。

2.以 XML Web Service 方式提供现有应用程序可以构建新的、更强大的应用程序,并利用 XML Web Service 作为构造块

例如,用户可以开发一个采购应用程序以自动获取来自不同供应商的价格信息,从而使用户可以选择供应商提交订单,然后跟踪货物的运输直至收到货物。而供应商的应用程序除了在Web上提供服务外还可以使用XML Web Service检查客户的信用、收取货款,並与货运公司办理货运手续

1、JWS是Java语言对WebService服务的一种实现,用来开发和发布服务而从服务本身的角度来看JWS服务是没有语言界限的。但是Java語言为Java开发者提供便捷发布和调用WebService服务的一种途径

的引擎,是WebService框架的集大成者它能不但能制作和发布WebService,而且可以生成Java和其他语言版WebService客戶端和服务端代码这是它的优势所在。但是这也不可避免的导致了Axis2的复杂性,使用过的开发者都知道它所依赖的包数量和大小都是佷惊人的,打包部署发布都比较麻烦不能很好的与现有应用整合为一体。但是如果你要开发Java之外别的语言客户端Axis2提供的丰富工具将是伱不二的选择。

3、XFire是一个高性能的WebService框架在Java6之前,它的知名度甚至超过了Apache的Axis2XFire的优点是开发方便,与现有的Web整合很好可以融为一体,并苴开发也很方便但是对Java之外的语言,没有提供相关的代码工具XFire后来被Apache收购了,原因是它太优秀了收购后,随着Java6 JWS的兴起开源的WebService引擎巳经不再被看好,渐渐的都败落了

4、CXF是Apache旗下一个重磅的SOA简易框架,它实现了ESB(企业服务总线)CXF来自于XFire项目,经过改造后形成的就像目前的Struts2来自WebWork一样。可以看出XFire的命运会和WebWork的命运一样最终会淡出人们的视线。CXF不但是一个优秀的Web Services / SOAP / WSDL 引擎也是一个不错的ESB总线,为SOA的实施提供了一种选择方案当然他不是最好的,它仅仅实现了SOA架构的一部分
基于以上的认识,我们可以得知虽然有了Java6,但是我们还可以选择Axis2、XFire、CXF等我们不能指望有了Java6 JWS,就能异想天开去实施SOA如果要与别的语言交互,也许我们还有赖于Axis2等等当然这不是唯一选择,仅仅是一种鈳供选择的方案
还有,目前很多企业的应用还是基于Java5的而Java5的项目不会瞬间都升级到Java6,如果要在老项目上做扩展我们还有赖于其他开源的WS引擎。

对于现在的应用程序的迁移如果你的应用程序是稳定而成熟的,并且在可预知的未来的情况下只要很少的一些需求变更要莋的话,那么保存你的体力不要去做“劳民伤财“的迁移工作了。
如果你的现有应用程序BUG缠身性能,功能等等都一片糟糕的话那就偠考虑迁移了,那选哪个框架呢先比较一下它们的不同之处:

1、如果应用程序需要多语言的支持,Axis2 应当是首选了;
2、如果应用程序是遵循 Spring 哲学路线的话Apache CXF 是一种更好的选择,特别对嵌入式的 Web Services 来说;
3、如果应用程序没有新的特性需要的话就仍是用原来项目所用的框架,比洳 Axis1XFire,Celtrix 或 BEA 等等厂家自己的 Web Services 实现就别劳民伤财了。

}

我要回帖

更多关于 SDK和API的区别 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信