API-SDK
說到API,往往是和SDK放在一起的。
什麼叫API,看一下餐廳裡怎麼點餐的就行了。
到了飯店,喊一場服務員,點餐。
服務員拿出來選單給你看,你點什麼,她在小本本上記什麼。
點好了之後,再把選單送到後廚去。
這裡服務員就是提供服務的(不然也不叫服務員),提供什麼服務呢?
點餐服務。
點餐服務需要什麼呢?
談一個服務,通常就是要談輸入是什麼,輸出又是什麼。
從眼下這個例子來看,輸入就是一道道菜品的名字(或者是ID,不知道你們見過菜品上面有編號,服務員只記編號的?),輸出的結果就是端過來的一道道菜。
有了輸入和輸出,服務員就可以提供了點餐的功能,這就是API,顧客就是呼叫者,服務員就是服務的提供者。
你可以在這裡把服務員替換成貓貓,假設女王大人貓貓來給你提供服務,只要輸出是菜品的名字,輸出是菜品,這個API就是能夠正常使用的。
而且,所有的顧客都可以用這種方式來點菜的~~~
再想想,是不是有的服務員手裡拿的是點餐機?想想一個漂亮的小姑娘,拿著一個和手機大小差不多的點餐機,這個點餐機,就是需要和後廚系統有互動,這種互動,就需要一種約束,來宣告點菜功能的輸入是什麼,輸出是什麼。比如說,如果使用者點了一道已經估清的菜,是不是服務員要告訴顧客一下?
API通常是以Http的形式提供,它隱藏的含義就是,只要你符合我定義的標準,你就可以來使用我。
比如說,服務員是中國姑娘,顧客是美國人,沒關係,只要美國人能說中國話,這套API就可以使用。如果美國人只會說英語,怎麼辦?讓和美國人一起來吃飯的中國朋友翻譯成中文,就可以了~~
那麼什麼是SDK呢?
當美國人不會說中文的時候,飯店裡的大堂經理來了,他來給美國佬當翻譯。這就是SDK,SDK一般都是和語言相關,是官方提供的各種不同語言的實現版本。
同樣的,我們再把思維模式擴大一點。
除了Http這種API,內部系統整合的元件,是否也是有API?
你會發現,確實是這樣的,比如說,JDK本身提供的各種API,在這裡,API和SDK的概念沒有那麼清楚了,但是API本身的含義就是,當服務的提供方對外提供服務的時候,應該宣告輸入和輸出和功能的明確含義。
而一組組明確宣告瞭的輸入,輸出和功能描述,就是服務方提供的各種API。
比如說陣列對外暴露的方法,連結串列對外暴露的方法等等。
那麼,API和方法之間有沒有明顯的區別呢?暴露出去的,可被公開使用的方法,統稱為API~~~
以上解釋不夠嚴謹,但是對於初學者來說,理解起來應該夠了。
如果你在理解API的時候有困難,大概問題並不是在API上,而是你有沒有理解清楚什麼叫做封裝,什麼叫做服務?