API、Method和Library是什麼東西和關係?


這三者我一直搞不清楚,有時候API跟Method好像差不多,有時候覺得API概念不就跟Library一樣嗎?
後來發現這三者差別,需要視它們是對於一個"應用程式"而言是在什麼位置。是應用程式本身,還是不相關的應用程式,還是想要與應用程式互動的外部應用程式。


先來個例子:
今天有一個甲應用程式提供了API ReturnNumber(int a)

而甲應用程式裡面的處理是


int ReturnNumber(int a){

return round(random(a));

};

接著我們一一解釋它們各是甚麼。
round()、random():是由內建library提供的兩個method
ReturnNumber():是一個自己寫的Method,但因為我們提供它給外部使用,所以也是個API。

假設乙應用程式用了ReturnNumber()這個API,則只能傳進一個參數a,實際上他不知道這個API裡面寫了什麼,只能透過甲提供的文件說明來知道用途。

這個例子可以看到三者的實例,接著再來進一步說明。

-----------------------------------------------------------------------------------------------
API、Method和Library的關係

【Library】
函式庫,指將一群已經寫好的Method(Function)包成一個Library,當我們import這個Library後就能使用其包含的Method。(此處只是個程式語言的稱法不同,Method指Java、Function指C)

【API(Application Programming Interface)】
應用程式介面,指提供給外部程式存取或是已經寫好的功能,事實上可以把它當作一群Method的集合,外部程式只能用這些Method。

【Method】
在Java稱為Method,類似C的Function,但不完全相同,這又是另一段故事了。
(在物件導向中的Method是綁定Class,所以要用Method一定要先實體化一個Object。ex. student.gohome()。而Function對應到的是Static Method,也就是不用實體化物件就能使用。ex.sum(), 或自己定義的static fuction,裡面所有東西都是static或是內建函數,故不須物件就能使用。)
這些Method原本應該是提供應用程式自身使用,除非當有一天想把這些Method供外部使用,就會把它拉出來寫進API中,再將API提供給外部。

-----------------------------------------------------------------------------------------------

所以整合前面兩段內容可以發現兩者是不同的東西,差別在於可以給誰用
舉例來說:
Google Map本身是個應用程式,它有許多的Method,例如查詢後端DB或是印出Map等。
當Google想把部分功能提供給外部的網頁應用程式開發者、手機應用程式開發者,它不必把Library給大家也不必請大家自行寫功能,而是將一些已經寫好的Method包成一份Google Map API。


如此對我們這些應用程式開發者而言,如果想與Google Map這個應用程式作互動!我們只需去取得Google Map API,就能利用這寫已經寫好的Method。
例如我們只需利用GMap(),就能產生一個Google Map物件,但Google Map這個物件怎麼做出來的我們並不知道。


這裡就可以看出來,我們是利用API,將我們的應用程式與Google Map這個應用程式作互動,所以當Google Map本身掛掉或是改了一些API,則我們的應用程式就失去與Google Map之間的互動了。
這也是為什麼API會分版本,因為Google Map本身運作的一些Method改變了。其他外部與他有聯結的程式,也需要跟著修改API才能恢復連結。



最後再拉回開發一個應用程式來看,如果是本身應用程式要用到的Method,就叫它們Method吧;如果想提供給外部應用程式使用的Method,那就寫成另一個API吧。

留言

這個網誌中的熱門文章

《人月神話》簡易心得

Asp.net的網頁生命週期