IDE:集成開發環境:包括代碼編輯器、代碼檢測、代碼調試器、譯器/解釋器、以及其他工具
SDK:SDK是IDE的基礎引擎 ,比IDE更基本,因為它通常沒有圖形工具。工程師為輔助開發某類軟件的相關文檔、范例和工具的集合,使用SDK可以提高開發效率,更簡單的接入某個功能。
舉例說明:一個產品想實現某個功能,可以找到相關的SDK,工程師直接接入SDK,就不用再重新開發了。
.NET SDK 是一組庫和工具,開發人員可用其創建 .NET 應用程序和庫。 它包含以下用於構建和運行應用程序的組件:
- .NET CLI。
- .NET 庫和運行時。
dotnet
驅動程序。
API:應用程序接口,可以通過這個程序提供的公開接口,使用程序給功能。API 接口實現計算機軟件之間的相互通信
框架:為開發
組件:
CLI:NET Core命令行界面(CLI)是一個新的跨平台工具,用於創建,還原程序包,構建,運行和發布.NET應用程序。.NET CLI 附帶了 .NET SDK。
1、使用命令行CLI(command-line interface)工具用於安裝、運行、卸載軟件的原因是命令可以詳細的顯示出哪里出問題了,如果直接點擊軟件安裝,不知道哪里出錯了。cli對程序員提供更多信息
2、物聯網、服務器是沒有GUI界面的,只能通過CLI和機器交換
3、有時候運行效率更高,可以把命令寫成.bat文件。
鏈接:https://zhuanlan.zhihu.com/p/338580653
來源:知乎
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。
前言
什么是 API?
什么是 SDK?
兩者之間有何關系?
歡迎來到本次的每周一問系列。
既然點進來了,相信你或多或少都聽說過這兩個名詞了,因此,在為你解答之前,讓我們先從一個例子出發。 假如你想開發一個 OCR 應用(通俗的說就是文字識別應用),他的功能是識別用戶上傳的一張圖片,然后將圖片中的文字識別出來返回給用戶。如下圖所示:
通常,OCR 應用的后端服務都會部署在雲上,那么我們應該如何在移動應用程序與基於雲的服務之間進行通信呢
這就是 API 和 SDK 的用武之地了。
API
API 的特點
通信
首先我們要明白的是 API 是和通信有關的,是用於應用(服務)與其他應用(服務)對話所定義的協議。在上述例子中,你可以簡單理解為 API 是 OCR 應用和雲端服務之間溝通的橋梁。
那么 API 到底是什么?
API 全稱 Application Programming Interface,即「應用程序接口」。
一般是指一些預先定義的函數,目的是供應用程序與開發人員基於某軟件或硬件得以訪問一組程序的能力,而又無需訪問源碼,或理解內部工作機制的細節。
以 Java 為例,當你想要實現一個數組排序的功能時,你是會先手寫一個排序算法,還是直接使用Arrays.sort()
函數?我想你心里是有答案的。
抽象
其次,我們要理解,API 的另一個重要特點——抽象。
抽象指的又是什么?
還是以這個 OCR 應用為例,當我們在使用雲端提供的文字識別能力時(比如百度文字識別),他的背后可能會有成千上萬的代碼,比如提供識別能力的機器學習的代碼、提供 Web 能力的后端代碼等等。

但是你作為一個 APP 的開發者,你需要去看這些代碼是怎么寫的嗎?難道不知道背后的源碼就不能調用百度提供的文字識別能力了嗎?當然不是。
通常服務商已經給你提供了文檔,告訴你如何去調用相應服務,只要你按照他的要求來即可。

因此,在你的 APP 和 OCR 服務之間,API 抽象出所有復雜的邏輯,簡化了調用過程,這使得你只需要考慮獲取所需的數據即可。
標准化
API 是標准化的,這意味着存在有關如何定義 API 的行業標准,比如 SOAP、REST、GraphQL 等。
我在 《你的第一本 SpringBoot 書》中寫到什么是 RESTful API,有興趣的小伙伴可以點擊閱讀,這是我正在寫的一本 SpringBoot 入門教程,目前還沒完工,歡迎讀者們不要吝嗇自己的建議 。
API 的構成要素
那么,API 通常由什么組成呢?
首先,我們要發送一些數據到雲端,即所謂的「請求」。
從本地應用發請求到雲端,我們需要分幾步完成,以 REST 為例。
對於 REST API 調用請求,第一步是指定傳輸的方法,通常是和 HTTP 方法對應的,如下圖所示:

當你想要上傳一張圖片時,通常會使用 POST 方法,然后是傳遞一些參數,包括請求的內容(圖像本身)。然后加上需要請求的地址,即可構成一個完整的請求。如下圖所示:

之后,服務器再以 JSON 等形式將數據返還給你,在你使用的雲服務的文檔中也會有所標注。

SDK
說了這么多,你應該對 API 有所了解了,那么這時候問題就來了,作為開發人員,你如何在實際的項目中調用 API?
你要自己構造 HTTP 請求、拼接 URL、添加需要的參數、處理返回的 JSON 對象,麻煩嗎?
麻煩。
那有沒有什么好的辦法簡化這些操作,使得我只需要給一張圖片然后就給我返回結果的呢?
自然是有的,這就是接下來我們要說的 SDK 了。
SDK 全稱 Software Development Kit,軟件開發工具包。
一般都是一些軟件工程師為特定的軟件包、軟件框架、硬件平台、操作系統等建立應用軟件時的開發工具的集合。
通俗來講就是第三方服務商提供的實現產品軟件某項功能的工具包。例如 JDK 就是一種 SDK。
還是以上面的 OCR 應用為例,如果使用了某廠商的 SDK 服務,那么我們連 HTTP 請求的構建都不需要了,僅調用一個方法,可能的代碼如下圖所示。
OCRResult res = ocrClient.ocr("pic.jpg").getResult();
通過調用這行代碼,SDK 會自動封裝 API 請求,而且作為響應,你獲得的結果也不一定是 JSON 對象,也有可能是代碼,例如上述代碼段里的OCRResult
,這是因為 SDK 也已經將 JSON 對象反序列化成你需要的對象,比如一個 Java Model。
SDK 相當於開發集成工具環境,API 就是數據接口。API 可以在 SDK 提供的“環境”里請求。同樣的,這里的“環境”也是一個抽象的概念。如果不使用 SDK,也可以直接調用 API,只不過,這個環境就要由開發者自己實現了。
區別
其實從上面的內容,我們也已了解到,API 在更多場合下更像是 SDK 的一個子集,他們的區別如下:
- API 通常是一個函數,有特定的功能;而 SDK 是一個很多功能函數的集合體,更像是一個工具包。
- API 通常扮演數據接口的形象,SDK 相當於一個工具環境,通常是需要在 SDK 的環境下調用 APl。
- SDK 相較於 API 封裝層次更高。