编程资料时经常会看到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. Java 8 Stream API详解--转

    原文地址:http://blog.csdn.net/chszs/article/details/47038607 Java 8 Stream API详解 一.Stream API介绍 Java8引入了 ...

  2. jqGrid APi 详解

    jqGrid APi 详解 jqGrid皮肤 从3.5版本开始,jqGrid完全支持jquery UI的theme.我们可以从http://jqueryui.com/themeroller/下载我们所 ...

  3. hibernate学习(2)——api详解对象

    1   Configuration 配置对象 /详解Configuration对象 public class Configuration_test { @Test //Configuration 用户 ...

  4. 网络编程socket基本API详解(转)

    网络编程socket基本API详解   socket socket是在应用层和传输层之间的一个抽象层,它把TCP/IP层复杂的操作抽象为几个简单的接口供应用层调用已实现进程在网络中通信. socket ...

  5. 转】Mahout推荐算法API详解

    原博文出自于: http://blog.fens.me/mahout-recommendation-api/ 感谢! Posted: Oct 21, 2013 Tags: itemCFknnMahou ...

  6. dom4j api 详解--XPath 节点详解

    dom4j api 详解 http://871421448.iteye.com/blog/1546955 XPath 节点 http://www.w3school.com.cn/xpath/xpath ...

  7. 百度地图API详解之事件机制,function“闭包”解决for循环和监听器冲突的问题:

    原文:百度地图API详解之事件机制,function"闭包"解决for循环和监听器冲突的问题: 百度地图API详解之事件机制 2011年07月26日 星期二 下午 04:06 和D ...

  8. 【Unity编程】Unity中关于四元数的API详解

    本文为博主原创文章,欢迎转载,请保留出处:http://blog.csdn.net/andrewfan Unity中关于四元数的API详解 Quaternion类 Quaternion(四元数)用于计 ...

  9. SDN 网络系统之 Mininet 与 API 详解

    SDN 网络系统之 Mininet 与 API 详解 Mininet 是轻量级的软件定义网络系统平台,同时提供了对 OpenFlow 协议的支持.本文主要介绍了 Mininet 的相关概念与特性,并列 ...

  10. Webdriver之API详解(1)

    说明 Webdriver API详解,基于python3,unittest框架,driver版本和浏览器自行选择. 本内容需要对python3的unittest框架有一个简单的了解,这里不再赘述,不了 ...

随机推荐

  1. Goland断点调试一直进gopark

    现象 使用Goland断点调试一直进gopark 分析 直接运行调试,不打断点,会有一个warning: undefined behavior - version of Delve is too ol ...

  2. Linux系统基本介绍

    一.Linux系统基本介绍 [1].Linux操作系统特点 多任务的操作系统 多任务操作系统 严格区分大小写 Linux一切皆文件 所有文件的起点都是"/"根目录 对于Linux操 ...

  3. SpringBoot能同时处理多少请求

    SpringBoot默认的内嵌容器是Tomcat,也就是我们的程序实际上是运行在Tomcat里的.所以与其说SpringBoot可以处理多少请求,到不如说Tomcat可以处理多少请求. 关于Tomca ...

  4. SpringBoot整合模版引擎freemarker实战

    Freemarker相关maven依赖 <dependency> <groupId>org.springframework.boot</groupId> <a ...

  5. javascript深入参数传递

    我们都知道javascript的基础数据类型有: Undefined . Null . Boolean . Number . String . 如果从一个变量向另一个变量复制基本类型的值,会在变量对象 ...

  6. CF372C

    思路 根据题意可以得到dp转移方程是 \(f_{i,j}=\max\{f_{i-1,k}+b_i-|a_i-j|\}\) 而且 \(j-(t_{i}-t_{i-1})\times d\le k\le ...

  7. 图的存储、创建、遍历、求最小生成树、最短路径(Java)

    带权无向图 存储结构 存储结构选用邻接表. 当一个图为稀疏图时,使用邻接矩阵法显然要浪费大量的存储空间,而图的邻接表法结合了顺序存储和链式存储方法,大大减少了这种不必要的浪费. 当然,即使我们所处理的 ...

  8. [oeasy]python0008_输出h字符_REPL_引号_括号_什么是函数

    输出h字符_REPL_引号_括号_什么是函数 回忆上次内容 上次 继续在游乐场里 玩耍 键盘按键 作用 ↑ 上一条指令 ↓ 下一条指令 ← 光标 向左移动 一格 → 光标 向右移动 一格 ctrl + ...

  9. 简单的字符串处理函数_C语言

    字符串数组 // Code file created by C Code Develop #include "stdio.h" #include "stdlib.h&qu ...

  10. JavaScript小面试~href和src的区别

    href:中文名称叫超文本引用 src:中文叫资源 先要知道它们两个的区别,我们首先要看哪些元素在使用这些属性. href:a,link src:img,style,input,script,ifra ...