一.未使用Swagger狀況
相信無論是前端開發人員還是后端開發人員,都或多或少都被介面檔案折磨過,前端經常抱怨后端給的介面檔案或與實際情況不一致,后端又覺得撰寫及維護介面檔案會耗費不少精力,經常來不及更新, 其實無論是前端呼叫后端,還是后端呼叫后端,都期望有一個好的介面檔案,但是這個介面檔案對于程式員來說,就跟注釋一樣,經常會抱怨別人寫的代碼沒有寫注釋,然而自己寫起代碼起來,最討厭的,也是寫注釋, 所以僅僅只通過強制來規范大家是不夠的,隨著時間推移,版本迭代,介面檔案往往很容易就跟不上代碼了
二.使用Swagger狀況
Swagger 提供了一個可視化的UI頁面展示描述檔案,其中包括介面的呼叫,介面所需引數(header,body,url.params),介面說明,引數說明等,介面的呼叫方、測驗、專案經理等都可以在該頁面中對相關介面進行查閱和做一些簡單的介面請求,只要在專案框架搭建時,對Swagger 進行了配置,后面持續迭代的時候,只會花很小代價去維護代碼、介面檔案以及Swagger描述檔案,因為一旦介面發生改變,程式重新部署,介面檔案會重新生成對應新的檔案,
三.如何使用?
在NetCore專案中怎么去使用Swagger來生成介面檔案呢?
首先在 webApi 啟動專案 上 右鍵 點擊管理Nuget程式包, 安裝 Swashbuckle.AspNetCore ,然后到 Startup 中添加參考 using Swashbuckle.AspNetCore.Swagger;
在ConfigureServices方法中添加以下代碼
#region Swagger services.AddSwaggerGen(options => { options.SwaggerDoc("v1", new Info { Version = "v1", Title = "API Doc", Description = "作者:Levy_w_Wang", //服務條款 TermsOfService = "None", //作者資訊 Contact = new Contact { Name = "levy", Email = "[email protected]", Url = "https://www.cnblogs.com/levywang" }, //許可證 License = new License { Name = "tim", Url = "https://www.cnblogs.com/levywang" } }); #region XmlComments var basePath1 = Path.GetDirectoryName(typeof(Program).Assembly.Location);//獲取應用程式所在目錄(絕對,不受作業目錄(平臺)影響,建議采用此方法獲取路徑) //獲取目錄下的XML檔案 顯示注釋等資訊 var xmlComments = Directory.GetFiles(basePath1, "*.xml", SearchOption.AllDirectories).ToList(); foreach (var xmlComment in xmlComments) { options.IncludeXmlComments(xmlComment); } #endregion options.DocInclusionPredicate((docName, description) => true); options.IgnoreObsoleteProperties();//忽略 有Obsolete 屬性的方法 options.IgnoreObsoleteActions(); options.DescribeAllEnumsAsStrings(); }); #endregion
上面寫的回圈是因為專案中可能有多個控制器類別庫,為的是排除這種情況
接下來,再到 Configure 方法中添加:
#region Swagger app.UseSwagger(c => { c.RouteTemplate = "apidoc/{documentName}/swagger.json"; }); app.UseSwaggerUI(c => { c.RoutePrefix = "apidoc"; c.SwaggerEndpoint("v1/swagger.json", "ContentCenter API V1"); c.DocExpansion(DocExpansion.Full);//默認檔案展開方式 }); #endregion
這里使用了 RoutePrefix 屬性,為的是改變原始打開介面檔案目錄,原始路徑為 swagger/index.html ,現在為 /apidoc/index.html
這個時候在需要輸出注釋的控制器類別庫的屬性 中設定如下資訊,并添加上相關注釋


然后運行起來,打開本地地址加上 /apidoc/index.html 就可以看到效果,
特別提醒:如果打開下面這個界面能正常顯示,但是提示 Fetch errorInternal Server Error v1/swagger.json 錯誤,說明有方法未指明請求方式,如 HttpGet HttpPost HttpPut 等,找到并指明,重新運行就正常了

點擊方法右上角的 Try it out ,試下呼叫介面,然后點擊Exectue,執行查看結果,能得到后端方法回傳結果就說明成功,
特別說明:有介面不需要展示出去的時候,可以在方法上添加屬性 Obsolete ,這樣就不會顯示出來, 前提:有前面ConfigureServices中 后面的 忽略 有Obsolete 屬性的方法 設定才行!!!
最后可以看到介面回傳資料正常,并且也能看到介面回應請求嘛等等資訊,一個介面應該回傳的資訊也都有顯示,
總結:
本文從為開發人員手寫api檔案的痛楚,從而引申出Swagger根據代碼自動生成出檔案和注釋,
并且還可以將不需要的方法不顯示等設定,然后進行了簡單的測驗使用 ,
但是!!一般后端方法都有token等驗證,需要在header中添加token、sid等欄位來驗證用戶,保障安全性,
該設定將在下一章節中寫!
下一章 傳送門
以上若有什么不對或可以改進的地方,望各位指出或提出意見,一起探討學習~
有需要原始碼的可通過此 GitHub 鏈接拉取 覺得還可以的給個 start 和點個 下方的推薦哦~~謝謝!
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/91642.html
標籤:.NET Core
上一篇:ASP.NET Core 2.2 WebApi 系列【二】使用EF CodeFirst創建資料庫
下一篇:微信公眾號,那些踩過的坑
