引子
API和SDK作為強大的技術(shù),目前在互聯(lián)網(wǎng)行業(yè)中被廣泛使用。然而在生物信息行業(yè)中,對其了解、掌握和使用的人卻很少。故作為GeneDock生物信息工程師的本文作者,希望通過這個博客,記錄自己學習API和SDK的心得,也幫助更多其他生物信息從業(yè)人員使用它。
背景介紹
什么是API?
API(Application Programming Interface)是一組規(guī)則、協(xié)議或工具,清楚地定義了不同軟件部分之間通信的方法。其將應用程序(application)的實現(xiàn)過程隱藏,只暴露調(diào)用所必須的部分,供其他開發(fā)者使用。
舉個例子,大部分人都不知道投影儀的實現(xiàn)過程和原理,但是很多人都可以按照產(chǎn)品說明書,將電腦通過數(shù)據(jù)線連接到投影儀上,最終放映幻燈片。
相似地,你可能不知道一個應用程序(例如google map)的實現(xiàn)過程和原理,但是通過閱讀API文檔、調(diào)用API,你就可以方便地使用這個應用程序。
再進一步,GeneDock平臺也提供了API和SDK,您可以不知道GeneDock產(chǎn)品的實現(xiàn)過程、數(shù)據(jù)庫結(jié)構(gòu)、后臺代碼,只需調(diào)用GeneDock的API,就可以方便地、自動地使用我們GeneDock系統(tǒng)了。
什么是SDK?
SDK(Software Development Kit)往往是對一個或者多個API的封裝,形成軟件包,更進一步地方便其他開發(fā)者使用。不同的編程語言會有不同版本的SDK(例如GeneDock目前提供python和java版本的SDK),但是調(diào)用的是同一套API。
什么是Web API?
Web API是一種應用在互聯(lián)網(wǎng)領(lǐng)域的API。目前很多互聯(lián)網(wǎng)應用通常使用“客戶端-服務端模式”(client-server model):客戶端(例如chrome等瀏覽器)根據(jù)服務入口(endpoint),發(fā)送請求(request),后端接受請求后做出相應的響應(response)。
舉個例子,打開瀏覽器,在地址欄中輸入“https://genedock.com”,點擊回車,會返回GeneDock的首頁。這個過程可以分解為:
- 您的瀏覽器(客戶端client-side)通過URL(服務入口endpoint)向GeneDock后端(服務端server-side)發(fā)送了一個“獲取首頁”的請求(request);
- GeneDock后端服務做出響應(response)返回一個html文件;
- 該文件經(jīng)過瀏覽器渲染,即是您看到的GeneDock首頁了。
實際的過程可能是多次請求-響應,但是整體邏輯類似。
什么是RESTful API?
RESTfull API是一套web API的設計風格或理論,它對API設計進行了規(guī)定和限制。符合REST風格的API會更方便、更簡潔、更可靠。
基于資源(Resource Based)
例如,RESTful API會規(guī)定,API的設計要基于資源而非動作,基于名詞而非動詞。
舉個例子,GeneDock的API基于工具、工作流、任務進行設計,而不會基于創(chuàng)建(create)、更新(put)、刪除(delete)或者給出列表(list)來設計。
統(tǒng)一接口(Uniform Interface)
使用HTTP動詞(HTTP verbs)來表示動作,使用含有資源名稱的URI,響應(HTTP response)包含狀態(tài)碼(status)和內(nèi)容(body)。
常用的HTTP動詞
| 動詞 | 解釋 |
|---|---|
| GET | 類似于獲取 |
| POST | 類似于創(chuàng)建 |
| PUT | 類似于更新 |
| DELETE | 類似于刪除 |
常用的狀態(tài)碼
| 狀態(tài)嗎 | 解釋 |
|---|---|
| 2xx | 成功 |
| 4xx | 客戶端錯誤 |
| 5xx | 服務端錯誤 |
實際操作
使用python調(diào)用ListTool API
介紹完上邊的一些背景知識,我們具體演示一下,通過python的requests包調(diào)用GeneDock的ListTool API來獲取某一賬號下的工具列表。
注意,本文使用python,其他編程語言也有類似功能,但是限于作者能力,目前只演示python版本。另,本文使用python 2.7版本,python 3以上操作類似。
安裝requests包
通過python的包管理工具pip安裝requests包。
|
|
請求簽名
調(diào)用GeneDock API,首先要進行請求簽名,以保證數(shù)據(jù)的安全性。但是,由于請求簽名算法比較復雜,而且具體步驟我也不太懂,此處略去。
您可以直接復制下方代碼(定義了一個供requests包直接進行請求簽名的GeneDockAuth類),或使用我們的python SDK(后邊會介紹)。
具體算法可以參考我們的API文檔-請求簽名。
|
|
調(diào)用GeneDock ListTool API
定義變量api_endpoint、access_key_id和access_key_secret。
|
|
由于ListTool API的請求語法是Get /accounts/<account_name>/projects/<project_name>/tools/ HTTP/1.1,為您的賬號名,為項目名,目前為default。
|
|
最終返回的resp變量是一個requests包響應的類requests.models.Response。您可以進一步打印其中變量。
|
|
如果返回的狀態(tài)碼是200,至此,您就已經(jīng)成功使用python的requests包,通過調(diào)用GeneDock ListTool API,列出了您賬號下的工具。
注意調(diào)用API的響應結(jié)果是json格式,若想形成列表,您可能還需要接著學習python的json包。
使用GeneDock的python SDK調(diào)用ListTool API
正如上文提到的,由于SDK是對一個或者多個API的封裝,因此通過SDK調(diào)用API更加簡單。
安裝GeneDock的python SDK
下載python SDK安裝包,解壓文件后,運行代碼:
|
|
請求簽名
由于python SDK內(nèi)置了用于請求簽名的類GeneDockAuth,故您可以直接使用。
|
|
調(diào)用GeneDock ListTool API
|
|
打印結(jié)果
|
|
相比與直接調(diào)用API,通過SDK來調(diào)用API,不僅更加方便,而且還提供了很多變量,方便用戶使用。
更多API和SDK的例子可以參考我們的api-reference和python?or?java?SDK手冊。
結(jié)語
通過調(diào)用API和SDK的方法,對于使用者的編程能力是有一定的要求的。但是,一旦掌握,您可以在程序中直接調(diào)用,實現(xiàn)自動化、批量化,極大地方便系統(tǒng)之間的交互,實現(xiàn)強大的功能。
另外,我們目前正在開發(fā)基于SDK的命令行工具(command line tool)進一步來調(diào)用API,屆時使用起來將會更加方便。敬請期待…
閱讀原文:https://www.genedock.com/blog/2017/03/08/api-sdk_for-bioinfo/#container