编程资料时经常会看到API这个名词,网上各种高大上的解释估计放倒了一批初学者。初学者看到下面这一段话可能就有点头痛了。

API(Application Programming Interface,应用程序编程接口)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。——百度百科

这篇文章我们就来通俗易懂地解释下什么叫做 API,你只需要花费1分钟时间。

从文件操作开始谈API。  获取key和密钥

以C语言为例,我们使用fopen()函数可以打开一个文件,感觉非常简单。文件保存在硬盘上,要经过复杂的处理才能显示,这些细节对我们来说是透明的,由操作系统完成。也就是说,我们调用fopen()函数来通知操作系统,让操作系统打开一个文件。

那么,我们如何告诉操作系统打开文件呢?

看似简单的操作到底层都非常复杂,打开文件首先要扫描硬盘,找到文件的位置,然后从文件中读取一部分数据,将数据放进I/O缓冲区,放进内存;这些数据都是0、1序列,还要对照ASCII表或Unicode表”翻译“成字符,再在显示器上显示出来。这个过程如果要让程序员来完成,那简直是噩梦!

怎么办呢?操作系统想了一个很好的办法,它预先把这些复杂的操作写在一个函数里面,编译成一个组件(一般是动态链接库),随操作系统一起发布,并配上说明文档,程序员只需要简单地调用这些函数就可以完成复杂的工作,让编程变得简单有趣。这些封装好的函数,就叫做API(Application Programming Interface),即应用程序编程接口。

说得更加通俗易懂一些,别人写好的代码,或者编译好的程序,提供给你使用,就叫做API。你使用了别人代码(或者程序)中的某个函数、类、对象,就叫做使用了某个API。

操作系统 API。

操作系统已经为我们实现了很多功能,它们都被封装成了一个一个的函数,有成百上千个之多,这些函数就叫做 API。程序员要想使用某个功能,只需要调用相应的函数。Windows、Linux、Mac OS、Unix 这些常见的操作系统大部分功能都使用C语言开发,它们的 API 也以C语言的形式呈现。操作系统 API 数目众多,官方必须提供详细的说明文档(Windows API 的说明文档叫 MSDN),程序员在使用 API 时,需要频繁地查阅这些文档。

Windows API控件与消息函数 ,如:

1.AdjustWindowRect 给定一种窗口样式,计算获得目标客户区矩形所需的窗口大小。

2.AnyPopup 判断屏幕上是否存在任何弹出式窗口。

3.ArrangeIconicWindows 排列一个父窗口的最小化子窗口。

编程语言 API

各种编程语言自带的标准库其实也是API。这些API由编程语言的开发者们编写,安全、高效、健壮,为我们实现了常见的功能,让我们不用再重复造轮子。

C语言 API 以函数的形式呈现,例如 printf()、scanf()、fopen() 等。

Java API 主要以类的形式呈现,例如 String、Thread、Date 等。

C++ 是在C语言的基础上进行的扩展,所以 C++ API 既包含函数也包含类。

第三方库(框架)

libxml2——xml的c语言版库,2个项目使用过,win和Linux下都很犀利~~比较快捷

CURL—— 这个用的主要是使用了他的封装的http和https的请求,比较犀利,其中包含了openssl的内容

iconv——功能强大的编码格式转化库,UTF8,Unicode等互相转化很方便

openssl——C的开源密库,可以进行证书加密和https的访问的模拟提交可以和CURL配合使用

cocos2d——2D游戏引擎,相比较传统的UI自己控制的重画

OpenCV——开源图像库

还有很多第三方(非官方)的组织机构、公司、个人提供的代码,也是一种 API。这些代码有的免费,有的收费;有的开源,有的闭源。这些代码大都针对某个特定的应用领域编写,有时候被称为框架或者库。例如基于C语言的图形界面库GTK,基于C++的网络库ACE,基于Java的大数据处理平台Hadoop,基于Python的Web开发框架Django,基于JavaScript的前端开发框架React。

全球最大的代码托管网站GitHub也贡献了很多优秀的代码,它们大都开源免费。作为开源代码库以及版本控制系统,Github拥有超过900万开发者用户。随着越来越多的应用程序转移到了云上,Github已经成为了管理软件开发以及发现已有代码的首选方法。。这些第三方的API数目众多,种类丰富,我们应该大胆去使用,尽量避免重复造轮子。

常见问题:

假设你想在你的窗体模块中声明一个函数,粘贴然后运行,VB会告诉你:编译错误...Declare 语句不允许作为类或对象模块中的Public(公共的) 成员。..看起来很糟糕,其实你需要做的只是在声明前面添加一个Private(私有的)。不要忘了,可是这将使该函数只在该窗体模块可用。. 在有些情况下,你会得到"不明确的名称"这样的提示,这是因为函数、常量或其他的什么东西共用了一个名称。由于绝大多数的函数都进行了别名化,亦即意味着你可以通过Alias子句使用其它的而不是他们原有的名称,你只需简单地改变一下函数名称而它仍然可以正常运行。

总结:API随处可见,它屏蔽了很多底层细节,实现了很多常用功能,大大简化了程序员的工作。用好API,事半功倍!

什么是API?(详细解说)相关推荐

  1. Win32下病毒设计入门详细解说

    Win32下病毒设计入门详细解说 [ 2006-02-19 21:30:14 | 作者: neeao ] 收藏到[365Key] [del.icio.us] 字体大小: 大 | 中 | 小 本文假定你 ...

  2. Teams团队的成员列表API的已知问题

    如果大家经常使用Graph API来对Teams进行操作管理的话,有时候会遇到一些奇怪的问题,我前两天还在Stack Overflow上回答了一个用户的问题,这个问题我自己也遇到过.所以我想用这篇文章 ...

  3. Android JNI学习(四)——JNI的常用方法的API

    前三篇主要讲解了jni基础相关的理论知识,今天主要讲解一下JNI的常用方法的API,掌握了基本的理论知识和常用的API接下来才能更好的实战. jni的常用API大纲 再看API前,我建议大家主要结合官 ...

  4. nonebot2调用文本API发送随机文本

    前言 我们经常可以看到能够发送随机文本的QQ机器人,接下来我们会学习到如何编写这种插件 效果展示 正文 文本API选择 文本API可以按照其返回数据的方式分成几种,我这里使用的API的类型是直接返回文 ...

  5. openCV第一个lena程序新建运行与详细解说

    openCV第一个lena程序新建运行与详细解说 作者:吴甜甜 文字配套视频见B站:https://www.bilibili.com/video/av67293028 完整复制文字请到我的github ...

  6. Koin--适用于Kotlin的超好用依赖注入框架,Dagger替代者,Koin史上最详细解说,一篇就够了,妈妈再也不用担心我不会依赖注入了

    今年呆在家中实在无聊,外面太危险了,还是在家学习比较安全可持续. 过年期间,我又复习了几遍依赖注入框架Dagger. 诶,什么是依赖注入? 说白了就是降低跟类对象之间的耦合,当需要修改类对象的时候,能 ...

  7. 淘宝获取单笔订单信息服务端调用API及流程

    淘宝获取单笔交易接口(文档地址):https://open.taobao.com/api.htm?docId=54&docType=2 调用接口所需依赖(文档地址):https://devel ...

  8. rancher部署项目Validation failed in API: Deployment.apps“”must be no more than 63 characters问题原因及解决方法

    Validation failed in API: Deployment.apps "xxxxxxxxxx-x x x x x x x x x" is invalid: [meta ...

  9. RPC 笔记(01)— RPC概念、调用流程、RPC 与 Restful API 区别

    1. 基本概念 PRC 远程过程调用 Remote Procedure Call,其就是一个节点请求另外一个节点提供的服务.当两个物理分离的子系统需要建立逻辑上的关联时,RPC 是牵线搭桥的常见技术手 ...

最新文章

  1. 车牌识别算法_PC端车牌识别SDK融入好算法
  2. 抗生素抗性基因研究进展PPT分享
  3. error: xxxx.o: Relocations in generic ELF (EM: 3)解决办法
  4. 什么是加载因子/负载因子/装载因子
  5. 3500字的txt文件_split文件拆分与合并,看完还不会,拿头拍我
  6. flask的ajax的csrf代码
  7. ef mysql modelfirst_Entity Framework(EF的Model First方法)
  8. C socket demo
  9. 【渝粤教育】 国家开放大学2020年春季 2772家畜环境卫生与设施 参考试题
  10. 1235813找规律第100个数_人教版一年级下册数学第1-8单元知识点梳理填空,附答案...
  11. 将结构体写入文件_将COCO检测结果写入json文件
  12. HarmonyOS 生态最重的拼图,手机开发者 Beta 版终于到来
  13. 免费录屏、最快截图、装X必备、看完工作学习效率直接翻倍
  14. 关于自定义异常中为什么带参构造器需要显示调用父类异常的带参构造器
  15. webgis之qgis缓存
  16. 实体与表映射关系XXX.hbm.xml配置详解(转)
  17. android phone win10下载,Win10稳定版提供Win10 Your Phone运行Android应用
  18. 动态水印跟踪去除_PS教程:怎么去除gif动态图片中的水印文字
  19. 世界 6 大航空动力巨头企业
  20. 幂等 (idempotence) 的概念

热门文章

  1. MongoDB Tailable Cursors
  2. 回归预测 | MATLAB实现SSA-BP多输入单输出回归预测
  3. 阿里巴巴字体图标使用
  4. 漫反射辐照——并不是很完全的翻译
  5. 循环赛日程表(递归实现)
  6. 《通用数据保护条例》(GDPR)系列解读四:出海欧洲必须遵守的七大数据处理原则
  7. android textview 显示表情和文字 表情带超链接
  8. CouchDB的简单使用
  9. OpenCV之视频截取
  10. C++晋升之图像采集(我也略懂皮毛)