生动形象的理解API是如何工作的!

API(Application Programming Interface,应用程序编程接口)


简单来说,就是其他人开发出来一块程序,你想用,他会告诉你调用哪个函数,给这个函数传什么参数,然后又会返回给你一个什么样的结果,你不需要知道他函数里面到底是怎么做的,只要清楚这样调用就能实现某种功能就可以了。


比如别人已经做好了一块几何处理程序,你想拿来算圆的面积,他会告诉你把半径传给他,他就把面积值传给你,至于他里面是怎么算的不用你管。


API是这种模式再复杂很多的应用,涉及硬件软件多方面的工作,不过总体来说就是他告诉你怎么用能产生什么结果,你就直接拿来用就行了

 

追问

就比如现在LBS网要和围脖连动起来
那API 用在哪里  帮我分析下 谢谢

追答

我不知道你是做的哪一边,总之要看另一方提供给你了什么功能来使。
比如你要在网页上展示微博内容,那微博供应方应该给你提供出相应的接口,你照他的说明操作就OK,反之亦然。
API不是用在哪里,而是你要在哪里用,就问对方有没有在这方面能提供给你的,拿来用,如果他没提供你就根本用不了,明白?

追问

那就是说:我做一套网站或软件
然后比如
我里面地图 我就调用google的API
签到就调用 LBS网站的
微波掉用 SINA的
信息调用 大众点评的API

那我就是负责把参数调整好,把界面做好
功能都让他们去为我实现??
那不是简单了很多啊

那数据呢
在我自己这  通过他们的API不是  数据也会陪他们拿掉吗

追答

API就是这样啊,你以为他能有多复杂
数据肯定会形成共享,这是与别人合作的必然,人家做事也得是有利可图不能做白工
你需要决定取舍,图省事就用别人现成的,想自己控制性大一些就自己另起炉灶
建议是找一些口碑好一些的
不过企业级站点的话,用这些API恐怕会涉及一些商业应用协议,需要提前了解


大家可能最近经常听到 API 这个概念,那什么是API,它又有什么特点和好处呢?

wiki 百科镇楼

…[APIs are] a set of subroutine definitions, protocols, and tools for building application software. In general terms, it’s a set of clearly defined methods of communication between various software components.

翻译:API 是用于构建应用程序软件的一组子程序定义,协议和工具。一般来说,这是一套明确定义的各种软件组件之间的通信方法。(回来再看(。・∀・)ノ)。

本篇文章中,我会用浅显的比喻来解释API,接口(interface),协议(protocol)这些基本概念。enjoy it ! 

假设你有一个银行


这里写图片描述
你有一个仓库来存钱,一个记账本来记各种业务。一个简单的管理银行的方法是直接将权限给所有人,让客户自己动手完成各种业务。

这种模式下,一个客户想要存钱的话,他需要:

  1. 拿着钱去银行
  2. 打开仓库把钱放进去
  3. 把这笔业务写到记帐本上
  4. 离开银行

显然这存在着问题:

  1. 想开开仓库门需要废很大力气,并不是所有的人都能打开,还有些人不识字不会记账。
  2. 在这个模式下,我们假定所有人都是诚实的,显然这并不成立。(说不定哪一个人存了100块钱记账的时候写了10000块)。

这时你遇到麻烦了。

雇一个柜员


要是我们雇一个体格棒,办事还麻利的人来处理开仓库,记账的问题呢?

小娜登场了。

现在模式为:建一个柜台将仓库和记账本和顾客分开,这样顾客就不需要再去管仓库和记账本了。想存钱的话直接找小娜就行。

这里写图片描述

这种模式下,要是有人想存钱,他们必须:

  1. 拿钱去银行
  2. 告诉小娜我是 MMM 我想要存¥¥¥。
  3. 小娜打开仓库把钱放进去
  4. 小娜把业务(transaction )记录好
  5. 告诉你业务办好了
  6. 顾客离开银行

现在不会发生打不开仓库门或者是记错账的情况了,你觉得很满意。

到此我们引出今天的主角API( Application Programming Interface),它能够帮你实现轻松的和其他软件组件(如服务器,操作系统等)的交互。

在上面举的例子中,我们雇一个收纳员帮顾客解决了开仓门,放钱,记账这一系列繁琐的过程。这大大节省了顾客的时间,同时提高了银行的效率。同理,如果我们将操作的具体实施步骤抽象化,这将会大大降低开发人员的负担(去记忆所有的步骤花费的力气),从而大大提高了效率。

另外的好处是,只要他们遵循了同一个协议,组件可以交换或者是改变。银行不需要知道时哪一个顾客或者说顾客是怎么进来的,顾客也不需要知道银行拿自己的钱去做什么了。只要负责的柜员在这里并做好工作,整个流程将会继续工作。

API 应用范围很广:从操作系统中简单的 fork() 到我们接触的百度地图API,和风天气API,又或者是邢远分享的段子,这些 API 都大大简化了程序员的工作。

银行里有什么


这里写图片描述

你可能已经注意到了银行分成了两个区域:顾客在前台排好队来办理业务,后台完成各种对钱的操作。在中间层,前台和后台发生了交互,双方都不能越界,交互只能发生在中间的区域。

在 API 术语里面,我们管中间的这块区域叫做接口 Interface;在这里各个部分发生交互。在我们的银行中,前台和后台都同意并且规定使用 Interface 来交换信息。

现在,我们假定 Bob 想要取钱。他到了柜台找到了小娜,小娜知道该怎样去取钱,她取好了之后告诉了 Bob。

这里写图片描述

Bob 这时候又问:“你知道今天的股票行情吗”

小娜:????WTF ?

在这个例子里面,小娜知道怎样取钱和存钱 , 但是她不知道如何去给Bob查查今天的股票行情是怎样的。这个例子引出了另一个概念 协议(Protocol)。

在 API 术语中,协议 是规定了各部分之间如何进行交流的一系列规则的集合。各部分之间想要完成交互必须理解并且遵守同一个协议。

同时,我们注意到了交换时用的是中文。如果Bob 对小娜说「我想撳五百蚊出嚟呀唔該」,小娜不懂广东话,所以没法理解Bob说的是什么,这又引出了另一个概念 格式(Format)

在程序员的世界里,通用的格式包含 XMLJSON

最后,让我们假设银行想要扩展业务到股市,这时候就需要一位特殊的接待员来处理与股票相关的业务了,这时,小冰就登场啦。 
这里写图片描述

在 API 术语里面, API 端点通常是指在同一个接口中提供特定功能子集的服务提供者。在这种情况下,小冰和小娜都是端点。(小冰和小娜是同一个柜台不同功能的提供者)不同的端点可以有不同的协议和不同的格式。

总结起来:接口是不同组件进行交互的地方。协议是一系列规定了他们之间怎样进行交互的规则。格式定义了他们通过什么进行交流(JSON或者是XML),端点可以在同一个接口里面提供不同的功能。

柜员还能干什么?


到现在我们把 API 的基础知识过了一遍,接下来我们再来谈一谈 API 的其他特征。w(゚Д゚)w

现在又有客户来取钱了,他想要取¥10000。 
这里写图片描述

首先,我们可以指示小娜在操作前先去确认一下 Bob 是否真的有这么多钱。(API 能确认所有的操作都是合法的。

小娜查到 Bob 账户里只有一百块了,告诉 Bob 余额不足。(在发生错误的时候 API 会根据错误报告机制发出指示,减轻开发人员的负担。

Bob 认为肯定是哪里出错了,他要求银行给他列一张表,给出他所拥有的每个账户上的余额。结果显示一共有 200 个账户。把他们一下子全给列出来不太实际,所以小娜每次给 Bob 看十个账户,看完了之后再来十个。(这叫做分页(pagination),可以节省带宽和服务器资源,因为你不需要一次获取数据集中的所有内容。

如果 Bob 只想要知道他某一个账户中的余额的话,他可以要求小娜只给她看那个的(这称为过滤(filtering),它还有助于节省带宽和资源,并且更易于导航。

在检查完所有账户之后,鲍勃现在知道他的帐户中确实没有10000美元。他知道爱丽丝购买股票并获得了大量资金,于是伪装成爱丽丝并重新进入银行。他告诉莎莉:“我是爱丽丝,我想从我的账户中提取10000美元。” 小娜识破了他的骗局。(API中内置授权和访问控制,以确保只有授权人员才能访问特定数据。

最后,在试图从银行拿到10000美元失败后,他想报复小娜,他进入银行并多次从账户中提取0.01美元。 (我们可以实施速率限制来控制服务器资源的使用,以确保用户不会滥用服务。

API 通常都会被设计具有这些功能,它可以充当防火墙,在保护您的资源免受滥用的同时允许合法请求通过。

再读Wiki


…[APIs are] a set of subroutine definitions, protocols, and tools for building application software. In general terms, it’s a set of clearly defined methods of communication between various software components.

API 是用于构建应用程序软件的一组子程序定义,协议和工具。一般来说,这是一套明确定义的各种软件组件之间的通信方法。

现在是不是头脑里对这个概念清晰多了呢。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/457142.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ann matlab,人工神经网络ann及其matlab仿真.ppt

人工神经网络ann及其matlab仿真人工神经网络 的研究方法及应用刘 长 安2004. 12. 31 引 言 利用机器模仿人类的智能是长期以来人们认识自然、改造自然和认识自身的理想。 研究ANN目的: (1)探索和模拟人的感觉、思维和行为的规律,设计具有人类智能的计算机…

字符串与树的结合

https://leetcode.com/problems/scramble-string/?tabDescription 虽然题目不常见,但是里面关于字符串调转和递归的思路,还是很有代表性的。 https://discuss.leetcode.com/topic/14337/share-my-4ms-c-recursive-solution/2 这个解法也把里面关于递归的…

ubuntu 安装过程所需软件

ubuntu 开发过程好用的软件 Remarkable 一个用于书写文档的好工具,包括方便书写数学公式。安装过程 点击上面“remarkable”下载.deb文件,然后双击会跳转到ubuntun的软件安装中心,点击install进行安装。 sublime text3 配置 自定义快捷键Pref…

Day05-循环和列表字符串、元组和字典

一、字符串 字符串就是由若干个不同的unicode字符组成的不可变序列 1 .字符串创建 #单引号字符串 str1 天要下雨,娘要嫁人,由他去吧 str2 str() #空串 str3 str([10,20,30]) ​ #双引号字符串 str2 "天要下雨,娘要嫁人&#xff…

@查看MySQL版本的方法

1.在终端下:mysql -V. [rootlocalhost bin]# mysql -V; mysql Ver 14.14 Distrib 5.6.21, for Linux (x86_64) using EditLine wrapper [rootlocalhost bin]# mysql -v; ERROR 1045 (28000): Access denied for user rootlocalhost (using password: NO) 注意,这…

echarts 柱状图 ,颜色和显示设置

最近在使用echart开发图标,api里面虽然有些设置,但是如果想让柱状图每个柱的颜色都不相同,简单的通过color设置是没有作用的,这里,就要用到其他的方式了 下面只是列举下我认为比较常用的,其他的比较简单&am…

Pycharm 专业版 导入系统pip安装的包

Pycharm 专业版 导入系统pip安装的包 在setting 中找到project interpeter ,点击设置图标,点击Add,得到如图所示选择 System Interpreter即可,这样 用pip安装的包都加再进来了

nodejs express

2019独角兽企业重金招聘Python工程师标准>>> 创建express服务器 //app.js文件 var express require(express); var app express(); //指定更目录显示的内容 app.get(/, function(req, res){ res.send(Hello World); }); //指定监听端口 var server app.listen(…

JS常见知识点

1、写一个按照下面方式调用都能正常工作的 sum 方法 console.log(sum(2,3)); // Outputs 5 console.log(sum(2)(3)); // Outputs 5 解决方案 function sum() {var fir arguments[0];if (arguments.length 2) {return arguments[0] arguments[1]} else {return function (sec…

格雷码 matlab,基于格雷码的结构光重建代码(MATLAB版本)

【实例简介】该代码为brown university相关技术人员编写,旨在用于学习研究3D结构光的原理、算法实现和应用。由于原有的网站( http://mesh.brown.edu/byo3d/index.html )近期无法访问,为了便于3D爱好者可以方便学习相关内容,特将该网站部分代…

Day06-函数

函数 一、集合(set) 特点:不允许有重复元素,如果添加重复元素,则会自动过滤,可以进行交集、并集的运算。 本质:无序且无重复元素的数据结构 1 创建集合 s1 set() #空集合 不能是{},这是字典 s2 {1…

在TextView中实时显示数据

//下面实时更新显示在textView中的数据handler new Handler();runnable new Runnable(){Overridepublic void run(){// TODO Auto-generated method pushupTextView.setText(Integer.toString(Number.pushup_number)); handler.postDelayed(this, 1000); }}; handle…

DuangDuangDuang!码云项目的 Readme.md 特殊技能

为什么80%的码农都做不了架构师?>>> 我们在 码云 上创建新项目的时候,常常会看到默认使用 README 文件初始化该项目(如图1 所示),然后在新建项目的根目录下就会生成一个 README.md 文件(如图2 …

java sunjce,无法初始化类javax.crypto.SunJCE_b

我已经开发了一个Javaservlet应用程序,并且在我的开发PC上,一切正常,包括按计划使用SFTP通过端口8443等上的HTTPS并以适当的SSL证书通过PDF复制PDF。但是,当我尝试在实时服务器上运行该应用程序时,会收到错误消息。jav…

GitHub添加SSH keys报错Key is invalid. It must begin with 'ssh-ed25519', 'ssh-rsa', 'ssh-dss', 'ecdsa-sha

GitHub添加SSH keys报错Key is invalid. It must begin with ‘ssh-ed25519’, ‘ssh-rsa’, ‘ssh-dss’, ecdsa-sha 在GitHub上Add SSH key的时候报错:Key is invalid. It must begin with ‘ssh-ed25519’, ‘ssh-rsa’, ‘ssh-dss’, ecdsa-sha。。。&#xff…

System.Diagnostics.Process 执行.EXE

分类: C#WINFORM 2009-04-05 21:09 459人阅读 评论(0) 收藏 举报 我们经常会遇到在Winform或是WPF中点击链接或按钮打开某个指定的网址, 或者是需要打开电脑中某个指定的硬盘分区及文件夹, 甚至是"控制面板"相关的东西, 那么如何做呢? 答案是使用Sys…

php 扩展 返回字符串,基于PHP7的PHP扩展开发之四(字符串的处理)

目的:熟悉字符串在PHP扩展里面如何处理要实现的PHP代码如下:1、当字符串不包含指定前缀字符串时,把前缀字符串和被检测字符合并返回。2、当字符串包含指定前缀字符串时,原样返回。 我们将使用PHP扩展的方式实现str_concat功能。fu…

对象之int介绍

#Auther Bob #--*--conding:utf-8 --*-- #创建两个int的对象&#xff0c;age1和age2age1 10 age2 int(1)#查看对象的类print(type(age1))# <class int>print(type(age2))# <class int> #bit_length表示一个十进制数最少需要占用多个二进制位print(age1.bit_lengt…

Unchecked runtime.lastError: Could not establish connection. Receiving end does not exist.

谷歌浏览器报错 版本 73.0.3683.103&#xff08;正式版本&#xff09; &#xff08;32 位&#xff09;报错内容如下Unchecked runtime.lastError: Could not establish connection. Receiving end does not exist.jquery.js:2 Cross-Origin Read Blocking (CORB) blocked cros…

OpenStack 之vmware机器迁移到openstack集群

原理 openstack本身是支持使用vmware格式的镜像的&#xff0c;但是是需要我们我们在/etc/nova/nova.conf的配置文件中指定该计算节点使用vmware的驱动 123456789101112# Driver to use for controlling virtualization. Options# include: libvirt.LibvirtDriver, xenapi.XenAP…