使用 Swagger UI 與 Swashbuckle 創建 RESTful Web API 幫助文件

zjqjay 8年前發布 | 18K 次閱讀 API Swagger REST Spring MVC Web框架

 

本文旨在介紹如何使用常用的 Swagger 和 Swashbuckle 框架創建描述 Restful API 的交互界面,并為 API 用戶提供豐富的探索、文件和操作體驗。

源代碼: 下載 SwaggerUi_2.zip

步驟

在本文中,我們將在 Asp.Net 創建一個簡單的 Restful API,并整合 Swashbuckle 和 Swagger UI 。本文分為三部分。

  1. 創建 Asp.Net Web API項目

  2. 通過實體數據模型 (.edmx) 和 Scaffold API控件連接到 Sql Server數據庫

  3. 整合 Swashbuckle/Swagger UI框架以描述 API 操作

創建 Asp.Net Web API 項目

首先創建一個新的“Asp.Net Web應用”,將其命名為“Swagger”

從模板中選擇 Web API,也就是說, Visual Studio將把 MVC、與Web API相關的文件夾和核心引用添加到我們的應用中。然后,點擊“更改權限”,選擇“無權限”后點擊OK。通過以上設置,我們將跳過項目中與賬戶相關的控件和視圖。

執行 Visual Studio 啟動程序后,項目文檔和文件夾的結構如下:

我們將在應用 App_Start 文件夾中將 MVC 控件的路徑設置為 RouteConfig.cs ,將Web API控件的路徑設置為 WebApiConfig.cs 。

注:你可以在該區域看到“幫助頁”文件夾。此文件夾將包含 Visual Studio 生成的模型、視圖、控件和其他與幫助相關的文檔,以描述Web API幫助。我們將在下文對這一問題進行分析。

如果查看 NuGet 包管理器中的“已安裝包”,你會發現項目中已經添加了“ Microsoft Asp.Net Web API 2.2 幫助頁 ”包、Razor包和核心包。

通過實體數據模型(edmx)和Scaffold API控件連接到 SQL Server數據庫

我們先通過實體數據模型將應用連接到數據庫表。首先,創建新的“ADO.NET實體數據模型”項目,在模型文件夾中將其命名為 “SwaggerModel”。

附件 為在數據庫中創建新表格的腳本文件。

從向導中選擇“數據庫中的 EF Designer”,并點擊“下一步”連接到數據庫服務器(此處即為SQL Server)。

在實體數據模型向導頁面中,選擇連接到 Sql Server,并將連接字符串命名為“SwaggerConStr”,該字符串將保存在web.config文檔中。

點擊“下一步”,選擇實體框架版本(即本文中的6.x)。點擊“下一步”,選擇EDMX公司表,將其保存在EDMX文檔中。

選擇表格,點擊“完成”按鍵,最后會生成POCO類“Company.cs”和數據庫配置指令類“SwaggerConStr” 。

現在已經創建了實體數據模型和配置指令,那么我們可以通過Visual Studio支架特性創建新的API控件。但為了充分利用配置指令,在給 API 控件建立支架前,我們應先建立應用。即在建立支架之前,刪除控件文件夾中現有的ValuesController.cs。

點擊控件文件夾,并添加“控件…”,即打開帶有各種支架選項的“添加支架”窗口,選擇“ * Web API 2 Controller with actions, using Entity Framework(帶有動作、使用實體框架的Web API 2控件 *”,然后點擊“添加”。

在添加控件窗口中選擇模型(即本文的Company.cs)以及數據配置指令類(SwaggerConStr.cs)。將新控件命名為“CompanyController.cs”,并點擊“添加”。

為每個http 動作( GET, PUT, POST and DELETE )操作創建的新控件如下:

建立和運行應用后,可看到如下截圖。你可以在用戶界面頂端導航中看到“API”鏈接,點擊后進入“ Asp.Net API幫助頁 ”頁面。幫助主頁如下所示。

注:為了檢查API,應在url中添加“/api/company”,并在瀏覽器中提交。

點擊任意操作鏈接后將顯示更多詳情,如帶有URI、本體參數的“請求”信息、“響應”類型、json或xml等格式。下圖為GET方法截圖:

雖然Visual Studio團隊花費了很大精力為這項服務的消費者展示Web API幫助,但這項服務的薄弱點是用戶界面過于基礎,而且我們無法使用動作方法。這正是有必要使用 Swagger UI & Swashbuckle 的原因。

整合 Swashbuckle/Swagger UI,以描繪API操作

Swagger網站 可知,Swagger是展示RESTful API的簡單而強大的方法,它為此API提供了強大的接口。

Swashbuckle GitHub 可知,Swashbuckle可將Swagger無縫添加到WebApi中!將ApiExplorer與Swagger/swagge-ui 合并可以給 API 用戶帶來豐富的探索、文件和操作體驗。除Swagger生成器外,Swashbuckle還包含嵌入式版本的swagger-ui。

將Swashbuckle添加到 Web API中

點擊進入“ Manage NuGet Packages…(管理NuGet包)”,并在線搜索“Swashbuckle”。在列表中選擇 Richard Morris 創建的 5.2.2版Swashbuckle - Swagger for Web API ”,點擊安裝。

這一操作會將引用添加到“ Swashbuckle - Swagger for Web API ”與“ Swashbuckle.Core - Swagger for Web API ”中。且后者會在經過依賴檢查后添加到我們的項目中。在packages.config中也是如此。

<package id="Swashbuckle" version="5.2.2" targetFramework="net45" />  
<package id="Swashbuckle.Core" version="5.2.2" targetFramework="net45" />  

成功安裝后,我們可以在App_Start文件夾中看到一個新的“SwaggerConfig.cs”配置文檔,所有Swagger相關配置都會在此進行設置。

為了能直接鏈接到Swagger API 接口,應將下列所有動作鏈接到“_Layout.cshtml”頁面的頂部導航欄。

<li>@Html.ActionLink("Swagger Help", "", "Swagger", new { area = "" }, null)</li>  

現在,建立并運行應用。點擊頂部導航的“ Swagger Help ”后進入Swagger用戶界面。點擊列表操作(List Operations),查看所有交互指令操作及相應的動詞。

點擊操作后會顯示響應類別。點擊“ Try it out(試試看)! ”按鍵后可顯示請求URL、響應體、響應代碼和響應頭等細節。

GET操作:

POST操作細節:

刪除操作細節:

通過Id進行GET操作的細節:

PUT操作細節:

將XML注解包含在幫助文件中

點擊進入項目屬性,在建立標簽下的輸出區勾選“ XML documentation file(XML文檔文件): ”后,即可在保存文檔的二進制文件夾中看到 XML 路徑。

接著打開Swagger配置文檔,并添加 “IncludeXmlComments”語句,該語句可將路徑從二進制文件夾返回至 XML 文檔。

private static string GetXmlCommentsPath()  
{
    return String.Format(@"{0}\bin\SwaggerUi.XML", System.AppDomain.CurrentDomain.BaseDirectory);
}

在SwaggerConfig.cs Register靜態方法中啟用全局配置的方式如下:

public static void Register()  
{
    var thisAssembly = typeof(SwaggerConfig).Assembly;

    GlobalConfiguration.Configuration
        .EnableSwagger(c =>
        {
            c.SingleApiVersion("v1", "SwaggerUi");
            c.IncludeXmlComments(GetXmlCommentsPath());
        })
        .EnableSwaggerUi(c =>
        {
        });
}

用以下注解編輯控件GET方法,可檢查 XML 注解是否運行:

運行應用,并通過頂部導航欄導航到Swagger幫助頁面。隨后可看到添加到Swagger幫助頁面的XML注解。

用自定義CSS定制Swagger用戶界面

Swashbuckle文件規定開發者可用預定義的 “ InjectStylesheet ” 方法,將自定義 .css文件作為嵌入式資源注入。我們需要將文件的“ * Logical Name(邏輯名稱) * ”作為第二個參數,“media=screen”作為第三個可選參數,當前裝配作為第一個參數。

在內容文件夾中創建一個新的名為 “myStyle.css”的css文件,并通過添加以下樣式將標題默認背景色從綠色改成藍色。

.swagger-section #header {
    background-color: #0000ff;
    padding: 14px;
}

右鍵點擊文檔,選擇屬性,并將其Build操作設置為“ 嵌入式資源

現在,將以下代碼添加到 Swagger 配置設置中,以啟動用戶界面:

c.InjectStylesheet(thisAssembly, "SwaggerUi.Content.myStyle.css");  

注:樣式表單文件的“邏輯名稱”。

現在運行應用,觀察變化。

用自定義 JavaScript 定制 Swagger UI:

Swashbuckle 文件規定開發者可用預定義的 InjectJavaScript ” 方法,將自定義的JavaScript 文件作為嵌入式資源注入。我們要將文檔的 “ *Logical Name * ”作為第二參數,將當前裝配作為第一參數。

在腳本文件夾中創建新的 JavaScript 文件 “myScript.js” ,并添加以下基本腳本,這樣文件加載時可顯示自定義的告警消息。

$(document).ready(function () {
    alert("Hello from custom JavaScript file.");
});

右鍵點擊文檔,選擇屬性,將其Build操作設置為“ 嵌入式資源

現在將以下代碼添加到 Swagger 配置設置中,以啟動用戶界面:

c.InjectJavaScript(thisAssembly, "SwaggerUi.Scripts.myScript.js");  

注:Java 描述文件的“邏輯名稱”。

運行應用,以查看告警消息:

注: 我們可以在與API幫助交互之前,通過 “ InjectJavaScript ” 特性添加自己的用戶界面和行為。請參考 Steve Michelotti 的文章---" 在使用Swashbuckle的Swagger UI定制認證標頭 "。

最后, SwaggerConfig Register 方法文件如下所示:

public static void Register()  
{
    var thisAssembly = typeof(SwaggerConfig).Assembly;

    GlobalConfiguration.Configuration
        .EnableSwagger(c =>
        {
            c.SingleApiVersion("v1", "SwaggerUi");
            c.IncludeXmlComments(GetXmlCommentsPath());
        })
        .EnableSwaggerUi(c =>
        {
            c.InjectStylesheet(thisAssembly, "SwaggerUi.Content.myStyle.css");
            c.InjectJavaScript(thisAssembly, "SwaggerUi.Scripts.myScript.js");
        });
}

還有其它的定制方法,筆者今后將更新本文。

 

本文系OneAPM 工程師編譯呈現。OneAPM 能助您輕松鎖定.NET 應用性能瓶頸,通過強大的 Trace 記錄逐層分析,直至鎖定行級問題代碼。以用戶角度展示系統響應速度,以地域和瀏覽器維度統計用戶使用情況。想閱讀更多技術文章,請訪問OneAPM 官方博客。

 

原文地址: http://www.codeproject.com/Articles/1078249/RESTful-Web-API-Help-Documentation-using-Swagger-U#_articleTop

來自: http://news.oneapm.com/swaggerui-swashbuckle/

作者: Sreekanth Mothukuru 2016年2月18日

 本文由用戶 zjqjay 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!