iT邦幫忙

2024 iThome 鐵人賽

DAY 2
1

什麼是API?

API,全名是 Application Programming Interface,也就是「應用程式介面」。

把這個詞拆開來看,「應用程式」大家應該都很熟悉;至於「介面」,對於初學者來說可能有些陌生。

當我們去 Google 搜尋「介面」的定義,會得到這樣的答案:

「介面(英語:interface)是泛指實體把自己提供給外界的一種抽象化物,用以由內部操作分離出外部溝通方法,使其能被修改內部而不影響外界其他實體與其互動的方式,介面是兩實體交換資料的媒介,交換資料的實體可以是軟體、電腦硬體、外部裝置、人等等。」

讀完這段描述,你可能感覺更困惑了,別擔心,我們換個方式來理解這個概念。


介面(Interface)是什麼?

在生活中,介面可以是任何促進溝通和交互的東西。比如你使用的手機螢幕、鍵盤、瀏覽器,這些都是介面,它們讓你能夠與裝置互動。而在軟體設計中,介面扮演的是定義與規範的角色。這種「抽象的約定」確保不同的軟體系統可以用一致的方式進行溝通,交換資料,甚至執行功能。

想像一下,一個應用程式想要存取一台伺服器上的資料,或者兩個應用程式需要互相傳遞訊息。這時候,介面就是他們之間的通訊協定,確保數據可以正確且有序地傳輸。而這就是 API 的工作——它是應用程式之間的「溝通語言」與「交互標準」。


程式設計中的介面:C# 的範例解說

在 C# 等程式語言中,介面(Interface) 是一個非常重要的概念,它允許開發者定義某一組行為或功能,並由不同的類別來實作這些行為。介面本身只是一個「約定」,它不包含任何實作細節,而具體的類別才會負責如何執行這些行為。

想像一下,你是一個喜歡到處吃美食的饕客,而「介面」(Interface)就像是一種料理的基本約定。比方說,有一個介面是「日式料理」,它包含了幾道經典的日式餐點:拉麵、生魚片、丼飯、壽司。這就是這個介面所包含的內容。

現在,各家餐廳(類別)都決定要提供這些日式料理,但他們可以按照自己的方式來做這些菜餚。也就是說,每家餐廳繼承了「日式料理」這個介面,但每家餐廳對這些料理的做法可能都不一樣。

在程式設計中,介面(Interface)是一種抽象類型,用來定義一組不具體實作的方法、屬性、事件或索引子(indexers),而不包含任何實作細節。它強調「行為的約定」,即哪些方法或功能必須被實作,但不會具體描述這些方法該如何運作。介面本身無法被實體化,必須由具體的類別來實作。任何實作這個介面的類別都必須遵守這些定義——就像各家餐廳都得做出拉麵、生魚片、丼飯和壽司,不過具體怎麼做,每家餐廳可以自由發揮。

讓我們來看個程式碼範例:

//建立一個介面interface  名稱是 IJapaneseCuisine
public interface IJapaneseCuisine
{
    void MakeRamen();  // 定義了做拉麵的方法
    void MakeSashimi();  // 定義了做生魚片的方法
    void MakeDonburi();  // 定義了做丼飯的方法
    void MakeSushi();  // 定義了做壽司的方法
}

public class TokyoRestaurant : IJapaneseCuisine
{
    public void MakeRamen()
    {
        Console.WriteLine("使用豚骨湯底製作拉麵");  // 東京餐廳用豚骨湯底做拉麵
    }

    public void MakeSashimi()
    {
        Console.WriteLine("使用最新鮮的海鮮做生魚片");  // 使用最新鮮的海鮮做生魚片
    }

    public void MakeDonburi()
    {
        Console.WriteLine("做一碗豪華的海鮮丼飯");  // 做一碗豪華的海鮮丼飯
    }

    public void MakeSushi()
    {
        Console.WriteLine("做一份經典壽司拼盤");  // 做一份經典壽司拼盤
    }
}

public class OsakaRestaurant : IJapaneseCuisine
{
    public void MakeRamen()
    {
        Console.WriteLine("使用醬油湯底製作拉麵");  // 大阪餐廳用醬油湯底做拉麵
    }

    public void MakeSashimi()
    {
        Console.WriteLine("使用當地漁獲做生魚片");  // 使用當地漁獲做生魚片
    }

    public void MakeDonburi()
    {
        Console.WriteLine("做一碗關西風的牛肉丼飯");  // 做一碗關西風的牛肉丼飯
    }

    public void MakeSushi()
    {
        Console.WriteLine("做一份創意壽司");  // 做一份創意壽司
    }
}

在這個例子裡,IJapaneseCuisine 介面定義了幾道日式料理的方法:MakeRamen()MakeSashimi()MakeDonburi()MakeSushi()。無論是哪家餐廳(類別),只要它繼承了 IJapaneseCuisine 介面,就必須提供這些料理的做法。

然而,東京餐廳可能更喜歡用豚骨湯底來做拉麵,而大阪餐廳則選擇醬油湯底。同樣的生魚片、丼飯和壽司,每家餐廳都有自己獨特的製作方式。

儘管製作方法各不相同,最後呈現的仍然是符合「日式料理」這個定義的菜餚。這就是介面的魅力所在:它定義了一組必須提供的功能(或菜餚),但具體如何實現,則由各個類別(餐廳)自行決定。


這個比喻應該能幫助你更好地理解介面的概念。無論哪家餐廳如何創新,它們做出的拉麵、生魚片、丼飯和壽司始終還是「日式料理」,就像任何類別實作的介面方法最終還是符合介面的定義一樣。

當然,如果要深入探討,這個例子還有很多值得延伸的地方,比如:如果兩家餐廳使用相同的方法製作某道菜,或者其中一家餐廳不提供拉麵,該怎麼處理?(空繼承),如果是餐廳是總店與分店的概念呢?分店如果有特殊餐點的話呢?等等非常多特殊的情境,而這就涉及更深的設計模式探討了,這部分如果之後篇幅夠有機會在說吧~


回到 API

現在,讓我們回到 API 的話題。其實 API 的概念也非常簡單。API 就是幫你溝通、交流、傳遞各不同系統的應用程式中介,是軟體之間溝通的橋樑,透過定義好的規則,讓不同系統交換數據或請求服務,提升整體整合和運作效率。


API 的種類

API 可以有多種形式,根據應用場景的不同,API 的種類也有區分。以下是幾種常見的 API:

  1. Web API
    Web API 是用於不同網站或應用之間交換數據的一種 API。常見的 Web API ,如RESTful API ,通常使用 HTTP 協定進行通信。這類 API 非常靈活,可以讓應用程式之間互相交流,實現數據的整合和功能的擴展。
  2. 操作系統 API
    操作系統 API 是指操作系統提供的介面,讓應用程式可以與底層硬體進行互動。舉例來說,當你開發一個應用程式,需要讀取文件或管理記憶體時,就會使用操作系統提供的 API。
  3. 庫或框架 API
    各種程式庫(如 jQuery、React)或框架(如 .NET Framework)也提供 API,讓開發者可以透過這些 API 存取或擴展現有的功能。這些 API 將複雜的邏輯包裝起來,讓開發者可以更專注於應用程式的邏輯,而不必重新實作所有底層功能。

API 在日常生活中的應用

API 是現代應用程式開發的關鍵部分,很多我們日常使用的應用程式背後都依賴於各種 API 進行數據交換和功能整合。以下是幾個常見的例子:

  • 社交媒體整合:當你使用第三方應用登入 Facebook 或 Twitter 時,這背後就是 API 在運作。應用透過 API 向社交媒體伺服器請求數據,並完成認證和資料交換。
  • 支付系統:許多電商網站使用支付 API(如 PayPal 或 Stripe)來處理交易。透過 API,這些網站能夠安全地將支付信息傳遞給支付系統,並獲取交易結果。
  • 地圖服務:像 Google Maps API 這樣的地圖服務,讓開發者可以輕鬆將地圖功能嵌入到自己的應用中,而不需要自己去開發整個地圖系統。

API 的優勢

API 的最大優勢在於其靈活性和可擴展性。開發者可以重複使用別人的 API,整合現有的技術和數據,而不必重新發明輪子。這樣不僅節省了時間和成本,還提高了系統的互通性,讓不同應用能夠無縫協作。


今日小結:

今天,我們初步了解了什麼是 API,它的種類,以及它如何在我們的日常生活中默默發揮作用。API 的存在讓開發者能夠輕鬆地利用他人的技術成果,讓軟體開發變得更加高效。明天,我們將繼續探索 API 的世界,看看 API 是如何像一個「外送員」一樣,幫助應用之間運送數據。那我們這系列文章主要聚焦在WebAPI,後續說到API都是指WebAPI,而非另外兩種API。/images/emoticon/emoticon29.gif


上一篇
Day 1 前言與主題概述!
下一篇
Day 3 什麼是Web API?
系列文
使用 C# 從零開始玩轉 Web API,從基礎到微服務與雲端部署的全面探索22
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言