**一、什么是API?
**
对于普通吃瓜而言,API是到底是个啥真心听不懂。下面我们来看一下实例:周末想出去玩,自已不想太累,索性打车,到了车上你告诉司机,去某某地方,司机明白了,直接将你送到指定位置,而无须你去考虑如何走的问题。这里司机提供的是打车服务,服务的提供者就是司机,你就是服务的调用者或者使用者。
我们再来以IT的视角来描述下API是个啥?API(Application Programming Interface,应用程序编程接口)是一些预先定义的函数,目的是提供一种访问函数的能力,而又无需访问函数内部的源码或者理解内部编写的细节。
如果你来对比一下,可以发现打车服务和访问函数的能力非常类似。API实质上就是为别人或第三方提供服务的接口。
前面说到API是为第三方提供服务的接口,那为什么软件需要API呢,我们可以从软件的提供者、使用者、开发者等几个角度来说明:
从软件提供者的角度来讲,特别是“平台型”软件提供者,提供API供第三方应用程序来调用,可以形成生态,才能更有竞争力。如百度AI开放平台提供语音、图像、人脸与人体识别、视频等技术的API,打造全球领先的人工智能服务平台。。
从软件使用者的角度来讲,特别是大型电信运营商,在建设内部系统时,一般会寻求从多家软件厂商采购,避免被软件提供商锁定,出现“结婚容易离婚难”的窘境。如运营商的运营支撑系统包含客户关系管理系统、计费系统、呼叫中心、合作伙伴关系管理系统、ERP系统等,通常是几家软件提供商共建整个运营支撑系统。
从应用开发者的角度来讲,特别是“内容聚合系统”之类公司,通过调用开放的API,可以直接调用API来做自己的应用,集成各大公司的内容,并基于此做更高层次的创新。如今日头条聚合了各家公司的内容,外加大数据分析推荐系统,形成个性化的服务。
1.本地调用
我们知道在本地调用非常地简单,例如实现如下3个值的相加,就可以写一个简单的函数,供主函数main()来调用。在执行过程中,调用是发生在同一CPU、内存地址空间:
2. RPC
那如果是不同机器上的不同程序间的调用应该如何来做呢?ANDREW D. BIRRELL在论文《Implementing Remote Procedure Calls》给出了一种解决方案:RPC(Remote Procedure Calls,远程过程调用)。其主要思想是调用远程机器上的程序就像在本地机器的地址空间中一样。隐藏分布式环境重要的部分:对参数和结果的编解码、消息传递以及保留过程调用的语义。其基本流程图如下所示:
① User以本地调用函数的方式去调用User-stub;
② User-stub生成消息并调用RPC Runtime;
③ RPC Runtime将消息发送给远程RPC Runtime;
④ 远程RPC Runtime将请求消息交给Server-stub;
⑤ Server-stub提取参数并调用Server;
⑥ Server执行业务逻辑,并将结果返回给Server-stub;
⑦ Server-stub生成响应消息,而后调用RPC Runtime;
⑧ RPC Runtime将响应消息发送给客户端RPC Runtime;
⑨ RPC Runtime将消息交给User-stub;
⑩ User-stub提取结果信息,返回给User。
3. RESTFUL API
随着互联网的发展,使得这ICT领域开始融合,“如何开发在互联网环境中使用的软件”成为一个课题,也就是Web 应用应该如何运转?Roy Thomas Fielding认为“一个由Web页组成的网络,用户通过选择链接在应用中前进(状态迁移),导致下一个页面(应用的下一个状态的表述)被转移给用户,并且呈现给他们,以便他们来使用”,并在论文《架构风格和基于网络的软件架构设计》给出了一种解决方案:REST(Representational State Transfer,表现层状态转化)。其主要特点为资源、统一接口、URI、无状态。这里说明下资源和统一接口即:
u 资源:将网络中任何实体都看成资源。可以是一段文本、一张图片、一首歌曲、一个视频。其具体的体现形式:文本可以用txt、HTML、XML、Json或二进制等格式表现。
u 统一接口:REST架构风格规定,数据的增删除查改对应于HTTP方法,统一了数据操作的接口,如GET用来获取资源,POST用来新建资源,PUT用来更新资源,DELETE用来删除资源。
总的来说,REST可以理解为:使用URL表示资源,使用HTTP的GET\\PUT\\POST等方法进行资源的操作。
全部0条评论
快来发表一下你的评论吧 !