與 SwaggerHub API 整合

  2015 年 10 月 22 日

作者:Ole Lensmar

在我們不斷努力推廣 Swagger 的過程中,Swagger 團隊最近推出了 SwaggerHub,這是一個線上服務,它將核心 Swagger 工具(UI、編輯器、程式碼產生器、驗證器)整合到一個協作平台中,旨在讓您更容易開始使用 Swagger 及其工具。在這篇文章中,我將重點介紹 SwaggerHub 公開的對應 API,它允許您在 SwaggerHub 註冊表中搜尋、擷取、建立和更新 Swagger 定義。這讓您可以:

  • 將 SwaggerHub 中 Swagger 定義的搜尋和擷取整合到現有的 API 工具中
  • 直接將 Swagger 定義儲存到 SwaggerHub

SwaggerHub API 可在 https://app.swaggerhub.com/apis/swagger-hub/registry-api/ 取得,其 Swagger 2.o 定義可在 https://swaggerhub.com/api/swagger-hub/registry-api 取得。

SwaggerHub API 識別碼

在我們深入了解 API 本身之前,讓我們先快速看看 SwaggerHub 如何識別 API - 因為這個「方案」在 API 和 SwaggerHub 本身中都普遍使用。

SwaggerHub 中的每個 Swagger 定義都由以下值識別:

  • 擁有者 - 擁有 API 的帳戶
  • api - 擁有者帳戶下 API 的唯一識別碼
  • 版本 - 唯一的版本識別碼

在 API 和 SwaggerHub 應用程式中,這些都按上述順序組合成路徑段,這讓您可以使用以下任一方式直接連結到 SwaggerHub 上的 API 及其 API:

https://swaggerhub.com/api/{owner}/{api}/{version}

https://api.swaggerhub.com/apis/{owner}/{api}/{version}

對於 SwaggerHub API,這些端點為:

如果您省略結尾的版本,您將獲得稍微不同的結果

  • 網頁版本將顯示 API 的預設版本(可在 API 設定中設定)
  • api 版本將傳回 API 所有版本的 apis.json 清單

apis.json

許多對 SwaggerHub API 的 GET 呼叫會傳回 apis.json 格式的 API 清單。例如,https://api.swaggerhub.com/apis/swagger-hub/registry-api 將傳回 SwaggerHub API 所有版本的清單。您可以在 apisjson.org 網站上閱讀有關 apis.json 格式的資訊。上述清單中的每個項目都包含許多 SwaggerHub 特有的自訂「X-??」屬性

  • X-Version:SwaggerHub 中對應 API 的版本
  • X-Created:版本在 SwaggerHub 中建立的時間
  • X-Modified:版本上次在 SwaggerHub 中修改的時間
  • X-Published:此 API 版本是否已在 SwaggerHub 上「發布」(表示它已處於最終狀態)

對於此特定清單,您應該在結果中取得(在撰寫本文時)3 個項目;版本 1.0.0、1.0.1 和 1.0.2 - 以及對應的中繼資料。

驗證

SwaggerHub API 公開的大多數資源不需要驗證權杖 - 目前唯一需要的是 POST 到 /apis/{owner}/{api} 的呼叫,它會建立/更新指定的版本(稍後會詳細說明)。若要進行此呼叫,您需要提供一個「Authorization」HTTP 標頭,其中包含您可以透過 SwaggerHub UI 取得的 API 金鑰,方法是執行下列步驟

  • 選取右上角選單中的「設定」
  • 選取左側的「API 金鑰」
  • 按一下「建立 API 金鑰」

apikey

這個金鑰不僅可讓您在您的帳戶下張貼新的/更新的 API,還會為搜尋和 API 清單新增一些額外功能

  • 一個額外的 X-UserRole apis.json 屬性,說明已驗證的使用者對特定 API 擁有的角色(擁有者、編輯、檢視)
  • 可以指定 filter=user 作為 API 搜尋呼叫的查詢引數,它將僅傳回已驗證使用者有權存取(作為擁有者或協作者)的 API(X-UserRole 屬性將為「擁有者」或「編輯」)

搜尋 SwaggerHub 註冊表

好的 - 讓我們直接進入重點 - SwaggerHub API 的基本資源位於 https://api.swaggerhub.com/apis

此資源將傳回 SwaggerHub 註冊表中所有公開 API 的分頁清單(在撰寫本文時,所有 API 都是公開的 - 但這在不久的將來肯定會改變)。如 Swagger 定義所示,有多個查詢引數可用於篩選

  • query:在所有 API 的擁有者、名稱、swagger.info.title 和 swagger.info.description 上搜尋
  • tag:僅傳回具有指定標籤的 API
  • state:僅傳回具有指定狀態的 API
  • page 和 limit:分頁
  • sort 和 order:排序和排序 (!)

因此,舉例來說,如果您想要尋找已發佈的金融 API,您可以呼叫

在撰寫本文時,它會傳回一個 API - 太棒了!

如果您想要將搜尋範圍縮小到僅限特定擁有者的 API,請依照 swagger.json 中的說明將其新增至路徑

您可能會注意到,您從上述 API 呼叫獲得的結果與您在 SwaggerHub UI 中看到的結果完全相同,這僅僅是因為 SwaggerHub 在幕後將相同的 API 用於其所有 API 搜尋/擷取/更新功能。

搜尋結果中的 API 版本

如您所見,每個 {owner}/{api} 只會傳回一個項目 - 您不會獲得該 API 每個版本的項目。API 的預設版本會在 X-Version apis.json 屬性中傳回,以及其 Swagger 屬性中 swagger.json 的連結。此外,也會新增 X-Versions 屬性,其中包含該 API 所有版本的逗號分隔清單;已發佈的版本會加上星號作為前綴。

例如,fehguy 的家庭自動化專案在上述清單中具有以下屬性

apisjson-listing

這表示預設版本設定為 1.0.0,但還有其他版本可用(1.0.1 和 1.0.2)。它還表示唯一發佈的版本是 1.0.1。

API 識別碼新增至路徑將顯示該 API 的所有版本。例如,以下傳回 SwaggerHub 註冊表 API 的所有版本

https://api.swaggerhub.com/apis/swagger-hub/registry-api

擷取 API 定義

擷取 API 定義非常簡單,如上所示。只需使用端點 https://api.swaggerhub.com/apis/{owner}/{api}/{version} 以 JSON 或 YAML 格式擷取 Swagger 定義(預設為 JSON - 將 Accept 標頭設定為「application/yaml」以取得 YAML 版本)。如果您想要直接鎖定特定格式,您可以將 swagger.json 或 swagger.yaml 附加至端點。例如,SwaggerHub 定義的 JSON 版本可在 https://api.swaggerhub.com/apis/swagger-hub/registry-api/1.0.0/swagger.json 取得。

建立/更新 API 定義

如上所述,一旦您準備好 API 金鑰,您就可以在 SwaggerHub 註冊表中建立和更新 Swagger 定義。只需將實際的 Swagger 2.0 定義 POST 到 https://api.swaggerhub.com/apis/{owner}/{api}。

以下規則適用

  • 您只能更新/建立您帳戶下的 API - 即以您的使用者名稱作為擁有者。
  • 目前,檔案必須包含語法有效的 YAML 或 JSON 內容。
  • API 的版本將從 Swagger 定義中的 version 屬性擷取 - 如果遺失或無效,該定義將會遭到拒絕。
  • 如果已存在具有該版本的 API 版本,它將會使用新的定義來更新(除非該版本已發佈 - 在這種情況下,更新將會遭到拒絕)。

就這樣!

簡單又直接 - 對吧?您可以如上所述直接在瀏覽器中玩轉 API(因為大多數呼叫都是 GET 呼叫),或者您可以使用 SwaggerHub 中的整合式 Swagger-UI,網址為 https://swaggerhub.com/api/swagger-hub/registry-api/1.0.0/ui(請注意結尾的「ui」- 它會在介面中自動選取 Swagger-UI 標籤)。

現在就用您的整合來吸引我們吧 - 我們很樂意在 https://swagger.dev.org.tw 上分享它們。如果您想查看實際的整合範例,請參考 Ready! API SwaggerHub 外掛的原始碼,網址為:https://github.com/SmartBear/readyapi-swaggerhub-plugin

Swagger 加油!