以下文章涉及概念理解纯属博主个人理解。如有错误,欢迎批评指正
接口
接口,一个抽象又简单的概念。本人工作的时候,最常与他们打交道。接口可以简单理解为提供某种功能的一个工具。通过这个工具我们可以得到我们想要的数据或者结果而不必知晓内部的具体逻辑,从而进行系统之间或者各类工具之间的数据交互。
举个例子,我们去自动贩卖机买饮料,我们按价格提供货币,自动贩卖机就会把我们需要的饮料掉下来给我们。对于我们而言,我们不关心贩卖机是怎么做到的,我们只关心有没有拿到我们要的饮料。而贩卖机的厂家只关心你有没有收到你投入的货币。
从例子中我们可以这样抽象来看:
- 贩卖机跟顾客是两个独立的个体,我们可以看成系统A与系统B
- 贩卖机的饮料:系统A的数据库
- 顾客给贩卖机投掷的货币:系统B提供给系统A的入参
- 贩卖机给用户提供需要的饮料:系统A给系统B提供的出参
- 贩卖机给用户做的投币的入口:系统A给系统B提供的接口
- 贩卖机上给用户查看的操作指引:系统A给系统B提供的接口文档
解释两个概念:
入参:入参是一串数字或者字符,是系统B所能继续运行下去的所必须需要的数据。上面的例子,客户没有投入货币,自然不会有饮料出来。
出参:即系统B提供了所需要的东西后,系统A应当提供的数据或者结果。上面的例子就是用户想要的某一款饮料。
为什么要有接口?其实道理很简单,一是为了代码看起来更简洁有条理性,二是因为很多时候我们希望为特定的人和特定的公司提供一些常见的功能,但是我又不想让对方知道我是怎么实现的。通常是因为第二点。
常见的接口类型
用一种不严谨的话来描述接口,我更愿意称之为:提供某种功能的一个工具。在开发中,常提到的,常见的接口类型从系统自身的角度主要可以分别为:
- 系统内部的接口:比如在学习编程语言时候的都会介绍到的interface。c#是直接用interface关键字,而C++中是多数用头文件表示(.h文件),不需要关键字都可以,比如C++抽象编程——接口总结——随机库代码这篇文章。我们可以认为random.h文件就是一个接口文件,而random.cpp是一个具体的接口实现文件。如果作为开发者要使用这个接口,只需要看random.h就可以了,他并不关心andom.cpp是怎么实现的。这个接口通常是为了更好的管理代码或者更好的代码复用所做的。
- 系统外部的接口:也就是目前用的最广的接口。由于接口可以让开发者不必知道接口内部细节即可享受接口的服务,所以接口也就有了跨语言的应用。常见的接口形式有dll、webservice、webAPI。dll常用于客户端开发,而后两者常用于web开发。
接口的使用方式
对于dll(动态链接库)而言,需要下发到各个需要用到的开发者手中。开发者通过系统进行引用。比如 A写了一个dll,B,C,D需要引用,那么A需要向B.C.D提供此dll。如果dll更新,也要分别通知他们。dll甚至可以封装窗口。但是dll使用之前可能需要注册。下图是自己封装的一个日志类的dll
而webservice、webAPI则是部署在服务器上,以链接的方式显示。A只需要把写好的接口部署到服务器上,则BCD都可以通过访问接口获得需要的数据,灵活性更强。下图是网上找的某个开放api的示例,大家直接百度免费开放api就有一大堆了:
接下来的文章将详细介绍此几类接口在C#中是怎么做的。