時間:2014.07.02
地點:基地
--------------------------------------------------------------------------------
一、什麼是API
API(Application Programming Interface)在現代軟件中隨處可見,目的在於爲某個組件的功能提供一個邏輯接口,同時隱藏該模塊內部的實現細節。是對問題的抽象,以及客戶與解決問題的軟件組件之間進行交互的方式。總的來說:API是一個明確定義的接口,它可以爲其它軟件提供特定的服務。
比如讀取圖像的API可能僅僅提供一個LoadImage()函數,它接收一個文件名作爲參數,然後返回一個2維像素數組,而所有文件格式和數據壓縮的細節全部隱藏在這個看似簡單的接口之下。客戶端代碼可以通過調用該API的公有接口。
--------------------------------------------------------------------------------
二、C++中的API
C++中的API一般包括一個或多個頭文件已經輔助文檔。某個特定的API的具體實現通常是可以被鏈接到最終用戶程序中的庫文件,比如windows下的 .lib文件,或者動態鏈接庫,比如windows下的 .dll文件。
而對於API這一詞而言,工程師們也更喜歡擴展爲 Abstract Programming Interface——抽象編程接口。它包含的元素總結如下:
a.頭文件:一組.h頭文件。頭文件定義了接口,使得客戶端代碼能夠對該接口進行編譯。開源的API就還包括API實現的源代碼(.cpp文件)。
b.類庫:一個或多個靜態庫或動態庫文件,它們提供了API的具體實現,客戶端代碼可以把它們的代碼和這些庫文件進行鏈接,從而爲它們的應用程序添加相應的功能。
c.文檔:如何使用API的概述信息。
下面舉例來說:
衆所周知的Win32 API就是Windows操作系統的API,它是C函數,數據類型和常量的集合,包括文件處理函數,進程與線程管理函數,創建圖形用戶界面的函數,與網絡交互的函數等。Win32 API是一個純C API,但我們可在C++程序中直接使用C API,C++中API的典型代表是STL,它包括一組容器類。對容器中元素進行遍歷的迭代器以及作用於容器的各種算法。STL提供了操作元素集合任務的邏輯接口,且沒有暴露算法內部實現任何細節。
總的一句:。API是軟件組件的邏輯接口,它隱藏了實現這個接口所需的內部細節 。
在設計API時,因爲API描述了其它工程師構建他們的應用軟件所使用的軟件,因此,API必須擁有良好的設計,文檔、迴歸測試,並且保證發佈之間的穩定性。
--------------------------------------------------------------------------------
三、API的層次
API的大小任意,小到一個函數,大到多個類組成的集合。可提供訪問任意架構層面的功能,從底層操作系統調用到GUI工具包等。比如常見的API有:
3.1操作系統API
每個操作系統都必須提供一系列標準API,以方便程序員調用系統級服務。例如:POSIX API中關於進程操作的幾個API,fork() ,getpid(),kill()等。而Win32 API中相應的有 CreateProcess(),GetCurrentProcess()以及TerminateProcess()等函數。這些都是很底層的API,必須保持穩定健壯,否則很可能導致很多程序崩潰。
3.2語言API
比如C語言標準庫中的printf(),scanf()和fopen()和C++標準模板庫中的容器類型std::string ,std::vector,std::set,std::map;迭代器還有泛型算法等很多API。
3.3圖像API
3.4三D圖像API
3.5圖形用於界面API
最典型的代表恐怕就是熟知的 Qt了。