API是啥?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了API是啥?相关的知识,希望对你有一定的参考价值。
这个要说明白还真不容易,百科中找到以下说明,希望对你有帮助.API(Application Programming Interface,应用程序编程接口)是一套用来控制Windows的各个部件(从桌面的外观到为一个新进程分配的内存)的外观和行为的一套预先定义的Windows函数.用户的每个动作都会引发一个或几个函数的运行以告诉Windows发生了什么.
这在某种程度上很象Windows的天然代码.其他的语言只是提供一种能自动而且更容易的访问API的方法.VB在这方面作了很多工作.它完全隐藏了API并且提供了在Windows环境下编程的一种完全不同的方法.
这也就是说,你用VB写出的每行代码都会被VB转换为API函数传递给Windows.例如,Form1.Print...VB 将会以一定的参数(你的代码中提供的,或是默认参数)调用TextOut 这个API函数.
同样,当你点击窗体上的一个按钮时,Windows会发送一个消息给窗体(这对于你来说是隐藏的),VB获取这个调用并经过分析后生成一个特定事件(Button_Click).
API函数包含在Windows系统目录下的动态连接库文件中(如User32.dll,GDI32.dll,Shell32.dll...).
API 声明
正如在"什么是API"中所说,API函数包含在位于系统目录下的DLL文件中.你可以自己输入API函数的声明,但VB提供了一种更简单的方法,即使用API Text Viewer.
要想在你的工程中声明API函数,只需运行API Text Viewer,打开Win32api.txt(或.MDB如果你已经把它转换成了数据库的话,这样可以加快速度.注:微软的这个文件有很多的不足,你可以试一下本站提供下载的api32.txt),选择"声明",找到所需函数,点击"添加(Add)"并"复制(Copy)",然后粘贴(Paste)到你的工程里.使用预定义的常量和类型也是同样的方法.
你将会遇到一些问题:
假设你想在你的窗体模块中声明一个函数.粘贴然后运行,VB会告诉你:编译错误...Declare 语句不允许作为类或对象模块中的 Public 成员...看起来很糟糕,其实你需要做的只是在声明前面添加一个Private(如 Private Declare Function...).--不要忘了,可是这将使该函数只在该窗体模块可用.
在有些情况下,你会得到"不明确的名称"这样的提示,这是因为函数.常量或其他的什么东西共用了一个名称.由于绝大多数的函数(也可能是全部,我没有验证过)都进行了别名化,亦即意味着你可以通过Alias子句使用其它的而不是他们原有的名称,你只需简单地改变一下函数名称而它仍然可以正常运行.
你可以通过查看VB的Declare语句帮助主题来获取有关Alias的详细说明.
消息(Messages)
好了,现在你已经知道什么是API函数了,但你也一定听说过消息(如果你还没有,你很快就会)并且想知道它是什么.消息是Windows告诉你的程序发生了哪些事件或要求执行特定操作的基本方法.例如,当用户点击一个按钮,移动鼠标,或是向文本框中键入文字时,一条消息就会被发送给你的窗体.
所有发送的消息都有四个参数--一个窗口句柄(hwnd),一个消息编号(msg)还有两个32位长度(Long)的参数.
hwnd即要接受消息的一个窗口的句柄,msg即消息的标识符(编号).该标识符是指引发消息的动作类型(如移动鼠标),另外两个参数是该消息的附加参数(例如当鼠标移动时光标的当前位置)
但是,当消息发送给你时你为什么看不到呢--就象有人在偷你的信一样?请先别恼火,让我告诉你.
小偷其实是Visual Basic.但它并没有偷走你的信,而是在阅读了之后挑出重要的以一种好的方式告诉你.这种方式就是你代码中的事件(Event).
这样,当用户在你的窗体上移动鼠标时,Windows会发送一条WM_MOUSEMOVE消息给你的窗口,VB得到这条消息以及它的参数并运行你在事件MouseMove中的代码,同时VB会把这条消息的第二个32位数(它包含了x,y坐标,单位为像素(Pixel),每个位16位)转换为两个单精度数,单位为缇(Twip).
现在,如果你需要光标坐标的像素表示,然而VB已经把它转换成了缇,因此你需要重新把它转换为以像素为单位.在这里,Windows给了你所需要的,但VB"好意地"进行了转换而使你不得不重新转换.你可能会问--我难道不能自己接收消息吗?答案是肯定的,你可以使用一种叫做子类处理(Subclass)的方法.但你除非必须否则最好不要使用,因为这与VB的安全程序设计有一点点的违背.(注:子类处理确实有很大的风险,但如果使用得当,是很有用处的.不过有一点一定要注意,即千万不要使用VB的断点调试功能,这可能会导致VB崩溃!)
需要补充说明的是:你可以发送消息给你自己的窗口或其他的窗口,只需调用SendMessage或PostMessage(SendMessage会使接受到消息的窗口立刻处理消息,而PostMessage是把消息发送到一个称为消息队列的队列中去,等候处理(它将会在该消息处理完后返回,例如有些延迟)).你必须制定接受消息的窗口的句柄,欲发送消息的编号(所有的消息的编号均为常量,你可以通过API Text Viewer查得)以及两个32位的参数。
API:应用程序接口(API:Application Program Interface)
应用程序接口(API:application programming interface)是一组定义、程序及协议的集合,通过 API 接口实现计算机软件之间的相互通信。API 的一个主要功能是提供通用功能集。程序员通过使用 API 函数开发应用程序,从而可以避免编写无用程序,以减轻编程任务。
API 同时也是一种中间件,为各种不同平台提供数据共享。根据单个或分布式平台上不同软件应用程序间的数据共享性能,可以将 API 分为四种类型:
远程过程调用(RPC):通过作用在共享数据缓存器上的过程(或任务)实现程序间的通信。
标准查询语言(SQL):是标准的访问数据的查询语言,通过通用数据库实现应用程序间的数据共享。
文件传输:文件传输通过发送格式化文件实现应用程序间数据共享。
信息交付:指松耦合或紧耦合应用程序间的小型格式化信息,通过程序间的直接通信实现数据共享。
当前应用于 API 的标准包括 ANSI 标准 SQL API。另外还有一些应用于其它类型的标准尚在制定之中。API 可以应用于所有计算机平台和操作系统。这些 API 以不同的格式连接数据(如共享数据缓存器、数据库结构、文件框架)。每种数据格式要求以不同的数据命令和参数实现正确的数据通信,但同时也会产生不同类型的错误。因此,除了具备执行数据共享任务所需的知识以外,这些类型的 API 还必须解决很多网络参数问题和可能的差错条件,即每个应用程序都必须清楚自身是否有强大的性能支持程序间通信。相反由于这种 API 只处理一种信息格式,所以该情形下的信息交付 API 只提供较小的命令、网络参数以及差错条件子集。正因为如此,交付 API 方式大大降低了系统复杂性,所以当应用程序需要通过多个平台实现数据共享时,采用信息交付 API 类型是比较理想的选择。
API 与图形用户接口(GUI)或命令接口有着鲜明的差别:API 接口属于一种操作系统或程序接口,而后两者都属于直接用户接口。
有时公司会将 API 作为其公共开放系统。也就是说,公司制定自己的系统接口标准,当需要执行系统整合、自定义和程序应用等操作时,公司所有成员都可以通过该接口标准调用源代码,该接口标准被称之为开放式 API。
另一种含义:
1:美国石油协会(API:American Petrolenm Institute):
API610/682是机械密封的设计和选用标准;
API676 转子泵的标准;
2:API还有一种含意:空气污染指数。【英文 air pollution index 的缩写】
空气污染指数(AIR POLLUTION INDEX,简称API)是一种反映和评价空气质量的方法,就是将常规监测的几种空气污染物的浓度简化成为单一的概念性数值形式、并分级表征空气质量状况与空气污染的程度,其结果简明直观,使用方便,适用于表示城市的短期空气质量状况和变化趋势。
空气污染指数的确定原则:空气质量的好坏取决于各种污染物中危害最大的污染物的污染程度。空气污染指数是根据环境空气质量标准和各项污染物对人体健康和生态环境的影响来确定污染指数的分级及相应的污染物浓度限值。目前我国所用的空气指数的分级标准是:(1)空气污染指数(API)50点对应的污染物浓度为国家空气质量日均值一级标准;(2)API100点对应的污染物浓度为国家空气质量日均值二级标准;(3)API200点对应的污染物浓度为国家空气质量日均值三级标准;(4)API更高值段的分级对应于各种污染物对人体健康产生不同影响时的浓度限值,API500点对应于对人体产生严重危害时各项污染物的浓度。
根据我国空气污染的特点和污染防治工作的重点,目前计入空气污染指数的污染物项目暂定为:二氧化硫、氮氧化物和总悬浮颗粒物。随着环境保护工作的深入和监测技术水平的提高,再调整增加其它污染项目,以便更为客观地反应污染状况。
空气污染指数的计算与报告:
污染指数与各项污染物浓度的关系是分段线性函数(见表1和图1),用内插法计算各污染物的分指数In(具体计算方法请参见《环境监测简报》1997年第9期),取各项污染物分指数中最大者代表该区域或城市的污染指数。即:API=max(I1,I2···Ii,···In)
该指数所对应的污染物即为该区域或城市的首要污染物。当污染指数API值小于50时,不报告首要污染物。
3:在JAVA中,API除了有应用“程序程序接口”的意思外,还特指JAVA API的说明文档,也称为JAVA帮助文档。
4.API Q1质量体系认证是您向用户证明您有一套API认可的完善的质量管理体系, 有些石油、天然气设备制造商所生产的产品目前没有所适用API会标产品的规范对应, 但他们又想向用户证明他们的产品或服务符合API标准的要求,所以API Q1质量体系认证可以帮您办到。API Q1质量体系认证特别适用于那些所生产的产品没有相应的API会标产品规范所对应的石油、天然气设备生产厂家, 或向石油、天然气行业提供服务的公司。
5.原料药(Active Pharmaceutical Ingredients): 指的是药物活性成分,也就是我们通常所说的原料药。
另一种含义:
使用API(应用编程接口,英文全称:Application Programming Interface)构建业务是实现开放式业务结构的关键技术,也是下一代网络区别于传统电信网的主要特点之一。目前,关于下一代网络的开放式业务API标准主要包括:由Parlay组织、3GPP和ETSI SPAN共同制定的Parlay/OSA API以及由SUN公司在Java平台上推出的JAIN API。
Parlay API是由Parlay组织定义的便于业务开发者快速创建电信业务的应用编程接口,自1999年成立以来,Parlay组织已制定了4个版本的Parlay协议。开放式业务结构(OSA)是3GPP制定的多媒体业务框架,选定Parlay作为其开放式业务接口API。两者结合的Parlay/OSA API独立于具体的实现技术,可以应用于固定网络、移动网络以及下一代网络的业务提供;独立于具体的实现语言,可以用C、C++、Java等各种语言实现;定义了完善的认证和授权机制,以支持对第3方应用的支持。
Parlay/OSA API位于由网络运营商管理的Parlay网关和由业务提供商管理的应用服务器之间。Parlay网关对应用服务器屏蔽了下层网络的技术实现细节,使得应用服务器可以使用统一的方式对网络能力进行访问。
Parlay/OSA API包括两类接口:业务接口和框架接口。业务接口提供应用访问网络能力和信息的接口,框架接口提供业务接口安全、管理所必需的支持能力。业务接口保证用户能够接入传统网络,如呼叫控制、呼叫管理、发送消息、用户交互等;框架接口提供的功能有:业务登记、业务预订、业务发现、认证、授权和综合管理。
JAIN API和Parlay/OSA API设计思想相近,功能上具有互补性。它采用专一的Java语言实现,并且定义了比较完备的访问各种网络的网络协议API。目前Parlay/JAIN联合工作组正在进行两者的融合工作。
API:医药活性物原料药 参考技术A API(Application Programming Interface,应用程序编程接口)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。 参考技术B 回答
基本API方法总结##java_基本API的总结#####类 String方法:###1.**substring(int beginIndex, int endIndex) :**返回一个新的字符串,它是此字符串的一个子字符串。用法:- **String sex = id[i].substring(16, 17);** //16位开始,17位结束.2.**charAt(int index):**返回指定索引处的 char 值。用法:- **char s=str.charAt(5);**//5指str的下标.3.**contains(CharSequence s):**当且仅当此字符串包含 char 值的指定序列时,才返回 true。 用法:- String str = "abcdefg"; System.out.println(str.contains("c"));4.**endsWith(String suffix):**测试此字符串是否以指定的后缀结束。用法:- String str="soccer"; System.out.println(str+"是否以r结尾:"+str.endsWith("r"));5.**indexOf(String str):**返回第一次出现的指定子字符串在此字符串中的索引。 **用法: 用法同charAt,返回值为int类型.**6.**length():** 返回此字符串的长度. 用法:这里需要注意length和length()的用法- 对于字符串,可以: String s = "abcd"; System.out.println(s.length()); //打印字符串长度 对于数组,length不是方法,而是属性,应该这样: String[] aa = "abc", "123"; System.out.println(aa.length); //注意,没有括号 7.**:replace(char oldChar, char newChar)**返回一个新的字符串,它是通过用 newChar 替换此字符串中出现的所有 oldChar 而生成的。 用法:- String str="abcdefg" 8.**toLowerCase():**使用默认语言环境的规则将此 String 中的所有字符都转换为小写。用法:- public static void main(String[] args) String str=" Another day"; String[] sb=str.split(" "); String s=sb[1].toLowerCase(); System.out.println(s + sb[2]); 9.**toUpperCase(Locale locale):**使用给定的 Locale 规则将此 String 中的所有字符都转换为大写。用法 :- public static void main(String[] args) String str=" that is it"; String[] sb=str.split(" "); String s=sb[1].toUpperCase (); System.out.println(s + sb[2] +sb[3]); 10.**valueOf(char c):** 返回 char 参数的字符串表示形式。 用法:- static String valueOf(char c) //返回 char 参数的字符串表示形式。 https://www.jianshu.com/p/7d5c03824f45 可以去这个链接看一下 现在在学进程间通信,是C!! https://blog.csdn.net/nanguol/article/details/106309829 这个
API标准主要是规定设备性能,有时也包括设计和工艺规范,标准制定领域包括石油生产、炼油、测量、运输、销售、安全和防火、环境规程等,其信息技术标准包括石油和天然气工业用EDI、通信和信息技术应用等方面。
API的一项重要任务就是负责石油和天然气工业用设备的标准化工作,以确保该工业界所用设备的安全、可靠和互换性。
API是美国石油学会(AmericanPetroleumInstitute)的英文缩写。API建于1919年,是美国第一家国家级的商业协会,也是全世界范围内最早、最成功的制定标准的商会之一。
/iknow-pic.cdn.bcebos.com/9d82d158ccbf6c81fbaf3843b23eb13532fa4084"target="_blank"title="点击查看大图"class="ikqb_img_alink">/iknow-pic.cdn.bcebos.com/9d82d158ccbf6c81fbaf3843b23eb13532fa4084?x-bce-process=image%2Fresize%2Cm_lfit%2Cw_600%2Ch_800%2Climit_1%2Fquality%2Cq_85%2Fformat%2Cf_auto"/>
扩展资料:
从API的网上名单上看,目前国内几大知名润滑油企业都榜上有名,但这与国内号称有4000余家润滑油厂商来说,获API认证的比例很不相称。
一些国有强势润滑油企业并不缺乏获API认证的技术优势,但在API的榜上无名,他们缺少的是像民营企业那样强烈的市场化意识,对消费者心理的领悟和市场动态的快速反应,习惯按照固有的模式运行。
而那些杂牌润滑油企业都意识到API认证的价值,其产品不论好赖,统统都贴上“API认证”的标签,这样能够增加卖点,增强消费者对产品的信任感。
因此,润滑油市场上就出现了“API认证”标志满天飞、消费者难辩真假的现象。实际上,API的许多低档油标准早已升级,只要按照一定路径,登录API网址就可以了解真正获得API认证的企业名单。
从国内企业获得API认证不多的现状来看,国内企业的润滑油产品大部分集中在中低档次上,高档的不多。因为如果要进军高档油领域,就必须用API标准来衡量和评价产品品质。
因此,获得API认证的过程并不难,难的是产品的技术实力能否达到API认证的要求。
参考资料:/www.people.com.cn/GB/paper1668/10138/928602.html"target="_blank"title="人民网-冒用API认证标志是违法行为">人民网-冒用API认证标志是违法行为
- 官方服务
- 官方网站官方网站
Hadoop DistributedCache 已弃用 - 首选 API 是啥?
【中文标题】Hadoop DistributedCache 已弃用 - 首选 API 是啥?【英文标题】:Hadoop DistributedCache is deprecated - what is the preferred API?Hadoop DistributedCache 已弃用 - 首选 API 是什么? 【发布时间】:2014-02-09 23:03:10 【问题描述】:我的地图任务需要一些配置数据,我想通过分布式缓存分发这些数据。
Hadoop的MapReduce Tutorial显示了DistributedCache类的usage,大致如下:
// In the driver
JobConf conf = new JobConf(getConf(), WordCount.class);
...
DistributedCache.addCacheFile(new Path(filename).toUri(), conf);
// In the mapper
Path[] myCacheFiles = DistributedCache.getLocalCacheFiles(job);
...
但是,DistributedCache
在 Hadoop 2.2.0 中是 marked as deprecated。
实现这一目标的新首选方法是什么?是否有涵盖此 API 的最新示例或教程?
【问题讨论】:
【参考方案1】:提到的解决方案都没有完全对我有用。这可能是因为 Hadoop 版本不断变化,我使用的是 hadoop 2.6.4。本质上,不推荐使用 DistributedCache,所以我不想使用它。正如一些帖子建议我们使用 addCacheFile() 然而,它已经改变了一点。这是它对我的工作方式
job.addCacheFile(new URI("hdfs://X.X.X.X:9000/EnglishStop.txt#EnglishStop.txt"));
这里的 X.X.X.X 可以是 Master IP 地址或 localhost。 EnglishStop.txt 存储在 HDFS 的 / 位置。
hadoop fs -ls /
输出是
-rw-r--r-- 3 centos supergroup 1833 2016-03-12 20:24 /EnglishStop.txt
drwxr-xr-x - centos supergroup 0 2016-03-12 19:46 /test
有趣但方便,#EnglishStop.txt 意味着现在我们可以在映射器中以“EnglishStop.txt”的形式访问它。这是相同的代码
public void setup(Context context) throws IOException, InterruptedException
File stopwordFile = new File("EnglishStop.txt");
FileInputStream fis = new FileInputStream(stopwordFile);
BufferedReader reader = new BufferedReader(new InputStreamReader(fis));
while ((stopWord = reader.readLine()) != null)
// stopWord is a word read from Cache
这对我有用。您可以从存储在 HDFS 中的文件中读取行
【讨论】:
【参考方案2】:我没有使用 job.addCacheFile()。相反,我像以前一样使用了 -files 选项,例如“-files /path/to/myfile.txt#myfile”。然后在 mapper 或 reducer 代码中我使用下面的方法:
/**
* This method can be used with local execution or HDFS execution.
*
* @param context
* @param symLink
* @param throwExceptionIfNotFound
* @return
* @throws IOException
*/
public static File findDistributedFileBySymlink(JobContext context, String symLink, boolean throwExceptionIfNotFound) throws IOException
URI[] uris = context.getCacheFiles();
if(uris==null||uris.length==0)
if(throwExceptionIfNotFound)
throw new RuntimeException("Unable to find file with symlink '"+symLink+"' in distributed cache");
return null;
URI symlinkUri = null;
for(URI uri: uris)
if(symLink.equals(uri.getFragment()))
symlinkUri = uri;
break;
if(symlinkUri==null)
if(throwExceptionIfNotFound)
throw new RuntimeException("Unable to find file with symlink '"+symLink+"' in distributed cache");
return null;
//if we run this locally the file system URI scheme will be "file" otherwise it should be a symlink
return "file".equalsIgnoreCase(FileSystem.get(context.getConfiguration()).getScheme())?(new File(symlinkUri.getPath())):new File(symLink);
然后在mapper/reducer中:
@Override
protected void setup(Context context) throws IOException, InterruptedException
super.setup(context);
File file = HadoopUtils.findDistributedFileBySymlink(context,"myfile",true);
... do work ...
请注意,如果我直接使用“-files /path/to/myfile.txt”,那么我需要使用“myfile.txt”来访问该文件,因为这是默认的符号链接名称。
【讨论】:
【参考方案3】:我遇到了同样的问题。不仅不推荐使用 DistributedCach,而且不推荐使用 getLocalCacheFiles 和“新作业”。所以对我有用的是:
司机:
Configuration conf = getConf();
Job job = Job.getInstance(conf);
...
job.addCacheFile(new Path(filename).toUri());
在 Mapper/Reducer 设置中:
@Override
protected void setup(Context context) throws IOException, InterruptedException
super.setup(context);
URI[] files = context.getCacheFiles(); // getCacheFiles returns null
Path file1path = new Path(files[0])
...
【讨论】:
【参考方案4】:为了扩展 @jtravaglini,在 YARN/MapReduce 2 中使用 DistributedCache
的首选方式如下:
在您的驱动程序中,使用Job.addCacheFile()
public int run(String[] args) throws Exception
Configuration conf = getConf();
Job job = Job.getInstance(conf, "MyJob");
job.setMapperClass(MyMapper.class);
// ...
// Mind the # sign after the absolute file location.
// You will be using the name after the # sign as your
// file name in your Mapper/Reducer
job.addCacheFile(new URI("/user/yourname/cache/some_file.json#some"));
job.addCacheFile(new URI("/user/yourname/cache/other_file.json#other"));
return job.waitForCompletion(true) ? 0 : 1;
在您的 Mapper/Reducer 中,覆盖 setup(Context context)
方法:
@Override
protected void setup(
Mapper<LongWritable, Text, Text, Text>.Context context)
throws IOException, InterruptedException
if (context.getCacheFiles() != null
&& context.getCacheFiles().length > 0)
File some_file = new File("./some");
File other_file = new File("./other");
// Do things to these two files, like read them
// or parse as JSON or whatever.
super.setup(context);
【讨论】:
这是在哪里记录的?【参考方案5】:在 org.apache.hadoop.mapreduce.Job
类中可以找到用于 YARN/MR2 的新 DistributedCache API。
Job.addCacheFile()
不幸的是,目前还没有很多这样的综合教程式示例。
http://hadoop.apache.org/docs/stable/api/org/apache/hadoop/mapreduce/Job.html#addCacheFile%28java.net.URI%29
【讨论】:
我不知道如何检索这些使用Job.addCacheFile(URI)
添加的缓存文件。使用旧方法 (context.getCacheFiles()
) 对我不起作用,因为文件为空。【参考方案6】:
分布式缓存的 API 可以在 Job 类本身中找到。在此处查看文档:http://hadoop.apache.org/docs/stable2/api/org/apache/hadoop/mapreduce/Job.html 代码应该类似于
Job job = new Job();
...
job.addCacheFile(new Path(filename).toUri());
在您的映射器代码中:
Path[] localPaths = context.getLocalCacheFiles();
...
【讨论】:
谢谢 - 我假设我因此需要使用更新的mapreduce
API 而不是 mapred
,否则 JobContext
对象不会提供给映射器...
我认为 getLocalCacheFiles()
已被弃用,但 getCacheFiles()
没问题 - 虽然返回 URI 而不是路径。
不错!这是一个比使用 DistributedCache 更干净、更简单的 API。
@DNA 我不认为getLocalCacheFiles()
和getCacheFiles()
是一样的。你可以查看我的问题(***.com/questions/26492964/…)。如果你想访问本地化文件但不想使用已弃用的api,可以使用文件名直接打开它(后面的技术称为符号链接)。
但是如果我们使用一些框架(如级联)来创造工作机会呢?我们只能将 jobconf 传递给级联框架 - 在这种情况下,分布式缓存的替代方案是什么?以上是关于API是啥?的主要内容,如果未能解决你的问题,请参考以下文章