周末抽了點時間把Swagger看了一下,這里寫篇文章小結一下。Swagger的官網上有一個在線的demo,可以在線體驗。我們也可以下載其源碼,執行dist\index.html文件,即可得到和官網一樣功能的demo,不需要架設服務器就能使用。
從網絡請求中查看,發現它請求了一個名為swagger.json的文件。
而這個json文件里面定義的基本就是文檔的schema。從這個頁面我們基本上可以發現swagger的原理了:
-
swagger依賴一個基於openapi規范的json文檔,它定義了接口schema。
-
頁面加載后,會獲取指定的接口的schema,然后生成接口頁面。
-
點擊執行后,會通過瀏覽器發送ajax請求,然后將結果呈現在界面上,從而實現接口測試。
簡單的來講,swagger接口測試是一個純前端的實現,不需要后台支持。它就是一個在線版的postman,實際上,postman也支持openapi規范,通過導入scheme后,也可以實現一樣的功能。不過,和postman相比,swagger具有如下優勢:
-
不需要本地客戶端
-
可以和應用集成,不需要手動導入接口定義
-
通過瀏覽器發送的ajax請求,往往可自動基礎了用戶的身份信息,測試帶權限控制的接口非常方便。
在.net core中,要將swaggerui和站點集成,需要進行如下幾步:
-
根據ApiExplore生成接口文檔內容
-
注冊路由,提供接口文檔的下載地址
-
將swaggerui頁面集成到站點中
-
將路由路徑設置到swagger頁面中
簡單的來講就兩步,提供接口文檔下載url和集成swaggerui。當前.net core已經有了一些開源實現,如:swashbuckle和nswag。對於大多數的場景來說,直接使用它們是非常方便的。
然而,有的時候我們是需要一些高級的功能的,如分布式的服務需要提供一個集中的api頁面,或者需要對頁面進行一些定制(如分組,權限控制,樣式調整等)。雖然這些庫也提供了一定的支持,但往往不夠靈活。一個簡單的方案是:只利用這些庫來生成swagger接口文檔swagger.json,在官方的靜態頁面基礎上自己定制UI,這樣要靈活的多。