使用Swagger實現webapi接口自動化文檔生成


         這里是實現自動化api穩當的生成,在網上看了很多swagger的文檔,可能都是在為實現接口時直接使用的swagger,其實步驟差不多,但是更加詳細的我還沒看到,又或者說,我看着文檔來的時候還是出錯啦,繞了很大的彎,之前有聽過要用這個,但是還是用過。接下來總結下我這次在使用過程中的步驟及一些問題。

        在接口已經成型的基礎上集成swagger,實現了接口文檔的自動化生成,相對於開發來說節約了寫文檔的大部分時間,無疑是一件莫大的好事情。接下來總結下這個過程:

         一、在現有Api的基礎上添加Nuget包的引用(這里簡述下現有api,不一定是webapi項目,要看接口實現在哪里,可以是類庫,也可以是項目webapi等),有2個包,一個是Swagger.Net.UI,一個是Swashbuckle,如下圖所示:

          (1)、Swagger.Net.UI的添加引用:

          

          (2)、Swashbuckled的添加引用

          

            這里的版本是4.5.2的版本,可能在4.0版本上就不一樣啦,這里我沒有嘗試。。。

 

          二、安裝成功后會有新增的文件如下所示:

                                               

             上面的因為前端的ui等都集成在dll中,所以SwaggerUI、App_Start下的SwaggerNet類都可以刪除 ,然后主要是配置SwaggerConfig.cs文件。      

 

           三、在設置的啟動項目下生成XML文件,步驟如下:

            例如:我目前項目中有去實現接口的web項目,我就選擇此“web項目”->“屬性”->“生成”->勾選XML文件文件,如下如所示:

            

           然后點擊保存,即可在bin文件下面找到此文件,可以自行去看下。

 

            、修改App_Start文件夾下的SwaggerConfig文件

             (1)、添加注釋

             打開App_Start文件夾下的SwaggerConfig文件,在方法Register把注釋過的c.IncludeXmlComments(GetXmlCommentsPath());放開,然后在此類中增加方法GetXmlCommentsPath來獲取生成文件的位置即可(又或者如下圖,直接取XML文件也可)。而下面的路徑是上面生成的XML文件的路徑,而放開注釋的那段代碼實現了對XMl文件的讀取,即添加注釋,方法的實現如下:

               

             (2)、隱藏不需要的接口(即可以添加重復的接口)

             

             上面就是所有用到的,關於處理接口的代碼,c.DocumentFilter<HiddenApiFilter>();這個是為了實現過濾自己不需要的接口來設置的

            HiddenApiFilter這個類的實現如下:

    /// <summary>  
    /// 隱藏接口,不生成到swagger文檔展示  
    /// </summary>  
    [System.AttributeUsage(System.AttributeTargets.Method | System.AttributeTargets.Class)]

    public partial class HiddenApiAttribute : System.Attribute { }
    public class HiddenApiFilter : IDocumentFilter
    {
        /// <summary>  
        /// 重寫Apply方法,移除隱藏接口的生成  
        /// </summary>  
        /// <param name="swaggerDoc">swagger文檔文件</param>  
        /// <param name="schemaRegistry"></param>  
        /// <param name="apiExplorer">api接口集合</param>  
        public void Apply(SwaggerDocument swaggerDoc, SchemaRegistry schemaRegistry, IApiExplorer apiExplorer)
        {
            foreach (ApiDescription apiDescription in apiExplorer.ApiDescriptions)
            {
                if (Enumerable.OfType<HiddenApiAttribute>(apiDescription.GetControllerAndActionAttributes<HiddenApiAttribute>()).Any())
                {
                    string key = "/" + apiDescription.RelativePath;
                    if (key.Contains("?"))
                    {
                        int idx = key.IndexOf("?", System.StringComparison.Ordinal);
                        key = key.Substring(0, idx);
                    }
                    swaggerDoc.paths.Remove(key);
                }
            }
        }

             這個類為了方便可以直接在swaggerconfig類中,如下圖所示:

              

             最后一步就是在我們不需要顯示的接口類或者類內方法上面添加如下過濾器如下:

                           

 

            五、修改App_Start文件夾下的SwaggerNet文件,注釋如下圖的代碼(我不知道為什么,如果不注釋會報錯的):

              

               注釋代碼如下:

              

             以上就是實現自動化的全部步驟,在地址欄中輸入地址如下:即可看到如下的界面:

              

                過程就是這樣的,可是做個小demo練習,我這個是直接在項目中添加啦。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM