今天有个朋友问我什么接口?你们平时都说在写接口,写的是什么鬼啊?我一开始就想,咦小陈同学怎么突然了解编程接口了,不过听到他后一个提问我知道原来他想的是API接口,不过被我主观意识习惯想成了编程定义上的接口。
所以就突发其想,想写篇东西说明一下编程定义的接口,与API接口含义。
为了区分统一两个概念,下面全文接口
是指编程定义的接口,API
是指API接口。
一、什么是接口?
1. 接口的概念
给一个定义,接口是指定一组函数成员而不实现成员的引用类型,其他类型-类和结构可以实现接口。
接口是对强类型的面向对象编程语言特有东西,如C#,Java
,通俗地说它的出现就是对这些强类型语言定义一个标准的入口然后供后续子孙继承使用。
结合生活再通俗一点说,就类似现在现在手机的充电口有Micro USB接口
、USB Type C接口
以及IOS系统手机的Lightning接口
,这三种接口就是一个接口定义,规定了这个充电头的形状,大小,然后怎么实现充电我不管了,不管你之前做成普通的充电,还是快充,也不管你给什么手机品牌,什么型号的手机使用。
2.接口的特点
C#接口特点1:都是“虚的”不能被实例化;
C#接口特点2:正因为接口是虚的,所以接口内的索引,属性,时间等只能有声明,而不能在接口内实现,具体如何实现是派生接口或者派生类的事;
C#接口特点3:都具有模板的性质,如果一个接口或者类从某一个接口继承,它将自动具有被集成者的特征(包括索引,属性,函数,实践等);
C#接口特点4:接口支持多重继承,而C#中,类之支持单一继承,接口实际表示的是一种承载能力。
3.接口定义与实现
一个接口可以从零或多个接口继承,那些被称为这个接口的显式基接口。当一个接口有比零多的显式基接口时,那么在接口的定义中的形式为,接口标识符后面跟着由一个冒号":"和一个用逗号","分开的基接口标识符列表。
一个类继承接口,那么就必须实现它的所有基接口定义的成员。
看下面代码例子:
interface IAnimal
{
void Alive ( ) ;
}
interface IFlyingAnimals:IAnimal
{
//定义一个索引
string this[int index] { get; set; }
//定义一个属性
bool HasFeather { get; set;}
//定义一个事件
event EventHandler Changed;
//定义一个方法
bool CanFly(string s);
}
//支持多继承
interface IBird:IAnimal,IFlyingAnimals
{
void CanCatchFish();
}
public class Animal:IAnimal
{
public void Alive(){..实现内容..}
}
public class Bird:IBrid
{
private void Alive ( ) ;
//实现一个索引
public string this[int index] { get; set; }
//实现一个属性
public bool HasFeather { get; set;}
//实现一个事件
public event EventHandler Changed {..实现内容..};
//实现一个方法
public bool CanFly(string s){..实现内容..};
public void CanCatchFish(){..实现内容..};
}
二、什么是API接口
API:Application Program Interface
,API就是操作系统留给应用程序的一个调用接口,应用程序通过调用操作系统的 API 而使操作系统去执行应用程序的命令。
通俗来说,API就是系统预留一个通道,按照约定对系统进行一些操作,如常见的就是系统的数据进行增删改查。
可能上面这些说法如果非程序员看还是会一头雾水,那么再举个生活例子,假如现在银行就是一个应用系统,我们想去银行拿一笔钱,那么我们需要做些什么操作:
- 去银行
- 到银行仓库拿一笔钱
- 把这笔业务写到记帐本上
- 离开银行
![](https://pic2.zhimg.com/80/v2-76e7f487a61e422c4d9ced428e9e7d21_1440w.jpg)
那么,显然这存在着问题:
想开开仓库门需要废很大力气,并不是所有的人都能打开,还有些人不识字不会记账。
在这个模式下,我们假定所有人都是诚实的,显然这并不成立。(说不定哪一个人拿了10000块钱记账的时候写了100块)。
这时你遇到麻烦了。
那我们应该怎么解决这个问题呢?
这个时候,我们其实只需要找一个专业的银行员工小娜来负责这些操作就好,建一个柜台将仓库和记账本和顾客分开,这样顾客就不需要再去管仓库和记账本了。想存钱的话直接找小娜就行。
![](https://pic3.zhimg.com/80/v2-7e387a8b95b5876df232ea8d3973362a_1440w.jpg)
这种模式下,要是有人想取钱,他们必须:
- 去银行
- 告诉小娜我是 MMM 我想要取¥¥¥。
- 小娜打开仓库把钱拿出来
- 小娜把业务(transaction )记录好
- 告诉你业务办好了
- 顾客离开银行
现在不会发生打不开仓库门或者是记错账的情况了,你觉得很满意。
这个银行员工小娜就是相当于一个API接口,我们雇一个收纳员帮顾客解决了开仓门,放钱,记账这一系列繁琐的过程。这大大节省了顾客的时间,同时提高了银行的效率。同理,如果我们将操作的具体实施步骤抽象化,这将会大大降低开发人员的负担(去记忆所有的步骤花费的力气),从而大大提高了效率。
API 应用范围很广:从操作系统中简单的 fork() 到我们接触的百度地图API,天气API,这些 API 都大大简化了程序员的工作,不用重复造轮子。
我们使用API需要遵循API的协议,否则就会报错或得不到想要的效果,就好比你在银行的存款明明只是100块,但你偏要去取1000块,这样就是遵循协议约定了。
在 API 术语中,协议 是规定了各部分之间如何进行交流的一系列规则的集合。各部分之间想要完成交互必须理解并且遵守同一个协议。
当我们为自己系统设计API的时候,一般来说我们是需要为API建立防火墙,在保护您的资源免受滥用的同时允许合法请求通过。
防火墙原则:
- API 能确认所有的操作都是合法的。
- 在发生错误的时候 API 会根据错误报告机制发出指示,减轻开发人员的负担。
- API中内置授权和访问控制,以确保只有授权人员才能访问特定数据。
- 我们可以实施速率限制来控制服务器资源的使用,以确保用户不会滥用服务。
三、总结
所以,接口与API以作用来说,就是定义一个规范,接口属于代码层次的定义,而API就是实现层次来定义,使工作更有效率,重复使用。
转载:https://zhuanlan.zhihu.com/p/93367446
标签:定义,..,windows,接口,一个,API,public From: https://www.cnblogs.com/Formulate0303/p/17301770.html