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

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

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

从文件操作开始谈API。

以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控件与消息函数 ,如:

AdjustWindowRect 给定一种窗口样式,计算获得目标客户区矩形所需的窗口大小AnyPopup 判断屏幕上是否存在任何弹出式窗口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. Mac安装mysql没有提示初始密码解决办法,看完你会无地自容的一篇博客

    最近忙的觉都没得睡,更别提写博客了,困到爆炸... 安装mysql的时候,安装完竟然没有弹出一个初始密码,于是开始漫长的百度找解决办法...那都说的啥,进都进不去,让我操作这操作那,逗我呢吗? 于是就 ...

  2. 转载: linux awk 一看就懂 - 薰衣草的旋律 - 博客园

    转载: linux awk 一看就懂 - 薰衣草的旋律 - 博客园 https://www.cnblogs.com/wangqiguo/p/5863266.html 阅读目录 awk是什么 awk命令 ...

  3. 看C语言教学视频后第一次写博客

    看完老师的课程教学视频过后第一次写博客,我用的是Visual Studio编译软件写的,我发现在这个新的软件里面输入scanf()不能运行成功而必须要是scanf_s()才能使得程序运行,下面是我编写 ...

  4. 从 TikTok 危机看去中心化应用未来曙光 | ArcBlock 博客

    作者: 陈俊(ArcBlock 副总裁) 45 天之后,抖音海外版 TikTok 不是被美国公司收购,就是被勒令退出美国市场--这款风靡海外青少年用户的短视频分享应用最近极具戏剧性的遭遇无疑牵扯了许多 ...

  5. v24.03 鸿蒙内核源码分析(进程概念) | 如何更好的理解进程 | 百篇博客分析HarmonyOS源码

    子曰:"民可使由之,不可使知之." <论语>:泰伯篇 百篇博客系列篇.本篇为: v24.xx 鸿蒙内核源码分析(进程概念篇) | 如何更好的理解进程 进程管理相关篇为: ...

  6. 什么是API?(看完你就理解了)

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

  7. 看完让你理解WebSocket原理

    一.先来说一下Websocket是什么?(websocket与http有什么区别呢) WebSocket是html5出的东西(协议),并且是一个持久化的协议(下面将会讲到什么是持久化协议) HTTP是 ...

  8. 这篇看完我得理解ES6中中常见语法

    目录 前言 1let篇 1.1作用域 1.2变量提升 1.3相同作用域赋值 2const篇 3模板字符串篇 3.1传统 3.2模板字符串复制 4扩展运算符篇 4.1传统赋值 4.2扩展字符串复制 前言 ...

  9. storm的并行度的解释--- ( 看完就能理解 )

    关于storm的基础,参照我这篇文章:流式计算storm 关于并发和并行,参照我这篇文章:并发和并行 关于storm的并行度解释,参照我这篇文章:storm的并行度解释 关于storm的流分组策略,参 ...

最新文章

  1. 强化学习(十六) 深度确定性策略梯度(DDPG)
  2. WriteFile和GetSystemDirectory
  3. P2579,jzoj2288-[ZJOI2005]沼泽鳄鱼【矩阵乘法】
  4. 如何优化网站服务器来提高吞吐量并减少延迟时间
  5. bootstrap基础样式学习(二)——栅格
  6. 吴恩达机器学习作业(1)
  7. Revit API切换三维视图
  8. Halcon 入门教程
  9. java冒泡排序(含冒泡排序代码)
  10. Yasm的作用及NASM详解
  11. 二进制与十进制的转换
  12. 三分钟带你快速了解网站开发的整个流程
  13. CTF实验找不到ssh2john
  14. 微信企业号 sdk java_基于Java spring框架的微信企业号开发中关于js-sdk的配置
  15. 盐城工业职业技术学院计算机没用过,2020年江苏软考盐城工业职业技术学院考点参考人数266人...
  16. NLP模型笔记2022-11:CTB5和CTB8数据集预处理 【PennTreebank 和Chinese Treebank】
  17. 如何将录音转成文字?
  18. 使用mysqladmin修改用户密码的正确方法!
  19. 炫舞时代显示服务器出错,qq炫舞2各种常见bug大全 FAQ详解
  20. 阿里云OSS集成百度Ueidtor

热门文章

  1. 一级计算机考试word知识点,2017年计算机一级考试MSOffice考点解析:Word窗口及其组成...
  2. java 如何判断对象内的某个属性是空
  3. 教你做Ghost系统盘--Windows2000、XP、2003系统万能Ghost全攻略New!!!!!!
  4. 什么是Vue响应式原理?手把手教你
  5. Windows下编程--模拟时钟的实现
  6. 蛇形矩阵(3月23日)
  7. 头的各个部位示意图_最全的牛部位分割图各部件
  8. python怎么取小数点_Python如何取小数点位数
  9. 公务员中综合管理类和行政执法类有啥区别
  10. python制作飞船大战