1
先看一道題。請找出以下可以被成為接口的選項:
USB
水龍頭
用戶界面 UI
函數
2
接口的英文是 interface。
interface的中文譯名為 “界面” 或 “接口”。當接口是 interface 的譯名時,接口是用於溝通的中介物的抽象化概念。
不同的事物之間很難有辦法進行溝通交流,所以才有牛頭不對馬嘴的說法。電腦要想獲取手機里面的數據,最簡單的辦法就是使用一個適配器把二者匹配起來,這個東西就是 USB 接口。電腦要想通電,和電力系統進行交流,也需要用到接口,也就是電源適配器。水龍頭的作用也類似。
這類接口被稱為硬件接口。硬件接口(hardware interface)指的是兩個硬件設備之間的連接方式。硬件接口既包括物理上的接口,還包括邏輯上的數據傳送協議。
像 USB接口,3.5mm 耳機接口都屬於接口。有了接口,我們就可以對不同的物體進行適配,讓他們之間進行數據交互,達到溝通的目的。但是他們相互之間並不知道對方內部發生了什么事情,他們在乎的是對方到底有沒有給我相應的數據和回饋。
耳機里面播放出音樂,耳機是不會管電腦和手機是如何把一個 mp3 文件轉化成聲音的,更不會管 cpu 里有多少個晶體管在工作,不會管他們用的是 Intel 芯片還是 海思芯片。
同樣的,當我們去銀行取錢的時候,我們只需要提交申請單給銀行櫃員,然后銀行櫃員會給我們很多錢,至於工作人員在櫃台后面執行了什么操作,我們是不知道到的。
3
接口除了硬件接口,還有軟件接口。這也是我們日常主要理解的接口形式。軟件接口是涉及到軟件程序和其他系統進行交互溝通的時候的接口。它可以分為兩類:
用戶和程序之間的中介。
程序與程序之間的中介。
用戶和程序之間的中介被稱為用戶界面或者用戶接口,也就是 UI (User Interface)。所以 UI 也是一種接口。
程序與程序之間的中介被稱為應用程序編程接口,英文名是 API (Application Programming Interface)。
4
API(Application Programming Interface,應用程序編程接口)是一些預先定義的函數,目的是提供應用程序與開發人員基於某軟件或硬件得以訪問一組例程的能力,而又無需訪問源碼,或理解內部工作機制的細節。
通過定義可以知道,API 還是繼承了接口定義的特性,提供的還是和其他系統進行溝通的能力,而不需要其他系統如何實現的。
用來描述 API 的功能和具體設置的說明被成為 API 文檔,也叫接口文檔。接口文檔通常包含以下部分:
接口名稱和作用
接口請求參數
接口返回數據
接口異常數據
5
如果你會一門編程語言,比如說 python。你總是會有機會接觸到第三方庫的 API 文檔,像我們經常使用的 requests 庫的 API 文檔就在這里:https://2.python-requests.org//zh_CN/latest/api.html
文檔中關於 get 這個接口的文檔描述是這樣的:
接口名稱:get
接口作用:Sends a GET request
接口參數:url, params, **kwargs
接口返回數據:requests.Response
6
通過上面的例子我們知道一個接口對應的其實是一個函數,接口 get 指的就是 request.get(url, params=None, **kwargs) 這個函數。當然他也可以通過類的形式存在。
函數 f() 就像機器或黑箱,給予輸入值 x 便產生唯一輸出值 f(x) 。這和接口的解釋異曲同工。他們都只關心相互傳遞的數據,而不關心對方內部的實現過程。
當你寫了一個庫,里面有很多函數,如果別人要使用你這個庫,但是看不懂每個函數內部是怎么實現的。這個時候他就會去看你關於這個函數的說明。這個函數的作用是什么,需要傳遞哪些參數,會返回什么數據。對於使用這些函數的用戶來說 ,你的這些函數就是 API。
7
在工作中有一個非常有意思的現象,我們會把某個 URL 稱為接口。這是為什么呢?
在進行 HTTP 請求的時候通常來說 URL 地址會和接口進行綁定。當訪問一個 URL 地址時,服務器會執行對應的接口,也就是函數。
因為函數對於非專業人員不友好,所以我們通常就用 URL 來代替函數來稱呼接口。當我們討論某個接口的時候,指的是 URL 后面綁定的函數。