给你举个特别容易理解的例子
有一天,轮子哥写了一个专门抓取知乎小黄文的AI,而他每天都会查阅小黄文列表并且点赞。恰好你也是小黄文爱好者,那么轮子哥的账号对你来说就是API接口,你要做的唯一事情就是关注轮子哥账号,每天只需要查阅轮子哥的动态就能看到小黄文,但是不用关心轮子哥到底是用什么方法找到这么多小黄文的。
话说轮子哥别打我~~(つд⊂)
思考这个问题的朋友,相信都已从定义得知,API就是接口,就是通道,负责一个程序和其他软件的沟通,本质是预先定义的函数。各位答主也已经举了很多直观的例子。这里想从另外的角度,谈一谈好的API,希望对大家有用。譬如我们去办事,窗口就类似一个API,如果对于某一件不简单的事情,这个窗口能做到让我们“最多跑一次”,“只盖一枚章”,这个API就是不错的。(当然,API不太一样,适用接口隔离原则,即使用多个隔离的接口,如用户注册与用户登录分别写两个接口,可以提高程序设计灵活性。)
但我们知道,现实中“最多跑一次”还很困难,需要有关部门把内部各种流程、数据通道梳理清楚,让这个窗口很容易拿到各种数据帮助我们。所以说,设计很好的API,也是不容易的。
这里还有一个来自设计人员的解读,更注重强调API包含计算和逻辑判断:假设物流中“货物”是数据,存放货物的“总仓库”是数据库,“店铺”是我们的网站、App。页面上显示的内容、数字,以及用户的操作请求和结果都是需要不停搬运的“货物”——数据,则负责调配分配打包的中转站就是API,店铺小哥直接从中转站取货就好。
由上,API的作用也就很清楚:
- 对于软件提供商来说,留出API,让别的应用程序来调用,形成生态,软件才能发挥最大的价值,才能更有生命力。(同时别人也看不见代码,不伤害商业机密。)
- 对于应用开发者来说,有了开放的API,就可以直接调用多家公司做好的功能来做自己的应用,不需要所有的事情都自己操刀,节省精力。
云计算、共享经济时代,API就是技术服务商为客户提供服务的方法。例如,网易云基于十多年IM技术积累打造的通信与视频服务,开发者通过集成客户端 SDK 和云端 Open API,即可快速实现强大的通信与视频功能。
说到API,往往是和SDK放在一起的。
什么叫API,看一下餐厅里怎么点餐的就行了。
到了饭店,喊一场服务员,点餐。
服务员拿出来菜单给你看,你点什么,她在小本本上记什么。
点好了之后,再把菜单送到后厨去。
这里服务员就是提供服务的(不然也不叫服务员),提供什么服务呢?
点餐服务。
点餐服务需要什么呢?
谈一个服务,通常就是要谈输入是什么,输出又是什么。
从眼下这个例子来看,输入就是一道道菜品的名字(或者是ID,不知道你们见过菜品上面有编号,服务员只记编号的?),输出的结果就是端过来的一道道菜。
有了输入和输出,服务员就可以提供了点餐的功能,这就是API,顾客就是调用者,服务员就是服务的提供者。
你可以在这里把服务员替换成猫猫,假设女王大人猫猫来给你提供服务,只要输出是菜品的名字,输出是菜品,这个API就是能够正常使用的。
而且,所有的顾客都可以用这种方式来点菜的~~~
再想想,是不是有的服务员手里拿的是点餐机?想想一个漂亮的小姑娘,拿着一个和手机大小差不多的点餐机,这个点餐机,就是需要和后厨系统有交互,这种交互,就需要一种约束,来声明点菜功能的输入是什么,输出是什么。比如说,如果用户点了一道已经估清的菜,是不是服务员要告诉顾客一下?
API通常是以Http的形式提供,它隐藏的含义就是,只要你符合我定义的标准,你就可以来使用我。
比如说,服务员是中国姑娘,顾客是美国人,没关系,只要美国人能说中国话,这套API就可以使用。如果美国人只会说英语,怎么办?让和美国人一起来吃饭的中国朋友翻译成中文,就可以了~~
那么什么是SDK呢?
当美国人不会说中文的时候,饭店里的大堂经理来了,他来给美国佬当翻译。这就是SDK,SDK一般都是和语言相关,是官方提供的各种不同语言的实现版本。
同样的,我们再把思维模式扩大一点。
除了Http这种API,内部系统集成的组件,是否也是有API?
你会发现,确实是这样的,比如说,JDK本身提供的各种API,在这里,API和SDK的概念没有那么清楚了,但是API本身的含义就是,当服务的提供方对外提供服务的时候,应该声明输入和输出和功能的明确含义。
而一组组明确声明了的输入,输出和功能描述,就是服务方提供的各种API。
比如说数组对外暴露的方法,链表对外暴露的方法等等。
那么,API和方法之间有没有明显的区别呢?暴露出去的,可被公开使用的方法,统称为API~~~
以上解释不够严谨,但是对于初学者来说,理解起来应该够了。
如果你在理解API的时候有困难,大概问题并不是在API上,而是你有没有理解清楚什么叫做封装,什么叫做服务?