通過程式碼解釋什麼是API,什麼是SDK?

胡塗阿菌發表於2022-05-03

這個問題說來慚愧,讀書時找實習面的第一家公司,問的第一個問題就是這個。

當時我沒能說清楚,回去之後就上百度查。結果查了很久還是看不懂,然後就把這個問題擱置了。

誰知道畢業正式工作後,又再一次地面對了這個問題......(事實告訴我們,欠的知識債總是要還的)

現在回過頭想,我能明白自己為啥想不通這個問題:

  1. 沒用過 SDK
  2. 思維只停留在前後端 API 介面互動

所以想要弄清楚這個問題,看別人寫的概念解釋文章可能幫助不大,還是得自己親手設計一下 API,使用或簡單封裝一個 SDK。

下面,我嘗試設計一個小故事,直接通過程式碼講清楚這個事兒。

對外提供雲你好服務

假設我是一個軟體服務提供商,我設計了一個打招呼的服務,給他起了個名字叫:雲你好。

使用者只要呼叫我的 API 介面,就能使用我的服務,我會向他打一個招呼。

首先我起一個後端服務,這裡選擇用 python,主要是用 python 比較快,程式碼少,解釋這個問題和語言無關哈。(先看程式碼,再解釋)

# 雲你好服務原始碼
from flask import Flask
from flask import request

app = Flask(__name__)

# 雲你好服務 API 介面
@app.get("/api/hello")
def hello():
    # 看使用者是否傳遞了引數,引數為打招呼的目標
    name = request.args.get("name", "")
    # 如果傳了引數就向目標物件打招呼,輸出 Hello XXX,否則輸出 Hello World
    return f"Hello {name}" if name else "Hello World"

# 啟動雲你好服務
if __name__ == '__main__':
    app.run()

從上面程式碼可以看出,我定義好了你好雲的 API 介面:

@app.get("/api/hello")
def hello():
    ......

當我的服務跑起來後,我就會告訴使用者我的 API 呼叫方式:

請求地址:GET http://127.0.0.1:5000/api/hello

可選請求引數:name - 打招呼的物件名兒

當然更規範的做法是提供一份 API 文件。

沒有 SDK 如何使用雲你好

接下來我們切換一下身份,假設我現在是一名雲你好的使用者。

在我登陸上雲你好的官網後,只看到了雲你好定義的 API 呼叫規則。

也就是說,如果我想使用雲你好服務,不管我是寫 python,寫 java,或是寫 golang,都得寫傳送 http 請求的程式碼,呼叫雲你好的 API 使用打招呼服務。

比如在 python 中我們可以這樣寫:

# 我是雲你好服務的一名客戶,我通過傳送 http get 請求使用雲你好

import requests

# API 地址
url = "http://127.0.0.1:5000/api/hello"
# 傳送 GET 請求
response = requests.get(url=url, params={"name": "阿菌"})
# 列印響應結果
print(response.text)

最後得到結果:Hello 阿菌

更好地服務我的客戶

接下來我們切換一下身份,假設我變回了雲你好的服務提供商。

經過一些簡單的調研,我聽說有非常多的 python / java / golang 工作者喜歡使用我們的雲你好服務。

為了讓他們更方便地使用雲你好服務,我決定向他們提供雲你好服務 python sdk / java sdk / golang sdk,進一步降低他們使用雲你好服務的難度(忽悠他們更多的服務費)

下面我以 python sdk 作為示例,在 sdk 中,我會封裝好使用雲你好服務的邏輯,僅對使用者提供一個 hello 方法,這樣只要使用者安裝好雲你好 sdk,就能直接呼叫 hello 方法使用雲你好服務了。

# 雲你好 python sdk
import requests


class HelloSDK:
    # 雲你好服務地址
    service_url = "http://127.0.0.1:5000/api/hello"

    @classmethod
    def hello(cls, name):
        response = requests.get(url=cls.service_url, params={"name": name})
        return response.text

寫好 sdk 後,我們會在官方網站上更新道:

大家好,歡迎使用雲你好 python sdk,您可以通過以下方式使用 sdk:

  1. 安裝雲你好 sdk:pip install hello-sdk
  2. 使用你好雲 sdk:
from hello_sdk import HelloSDK

HelloSDK.hello("阿菌")

使用 SDK 訪問你好雲

然後我們再次切換身份,假設我是你好雲服務的使用者,你好雲釋出 SDK 了,我非常高興,於是我的程式碼就簡化成這樣了:

# 我是雲你好服務的一名客戶,我通過你好雲的 hello-sdk 使用你好雲服務

from hello_sdk import HelloSDK

HelloSDK.hello("阿菌")

得到的結果仍然是:Hello 阿菌

總結

希望上面的程式碼能幫助大家理解 API 和 SDK,當然它只是一個極簡的 Demo,不能代表 API 和 SDK 這兩個概念的全部東西。

IT 行業中有很多概念,他們背後往往對應的是一類行為,如果僅從技術名詞的角度理解是非常痛苦的,所以極力推薦動手實踐學習。

API 的全稱是:Application Program Interface(應用程式介面)

SDK 的全稱是:Software Development Kit(軟體開發工具包)

如果讓我總結 API 和 SDK 的區別,我覺得 API 可以理解成一種標準吧,我們按照服務提供商定義的 API 標準去呼叫他們的服務,就能得到相應的結果。

而 SDK 可以理解為對 API 背後服務的一種封裝,它更貼近使用者,能大幅降低使用者使用服務的開發成本。

最後,如果同學們還想進一步學習的話,推薦去看一下雲廠商的 API 和 SDK 定義,甚至分別動手體驗一下,絕對瞬間秒懂。

參考講解 - 連結地址

相關文章