基於.NetCore3.1搭建項目系列 —— 使用Swagger做Api文檔 (上篇)

来源:https://www.cnblogs.com/i3yuan/archive/2020/03/21/12539597.html
-Advertisement-
Play Games

前言 為什麼在開發中,介面文檔越來越成為前後端開發人員溝通的樞紐呢? 隨著業務的發張,項目越來越多,而對於支撐整個項目架構體系而言,我們對系統業務的水平拆分,垂直分層,讓業務系統更加清晰,從而產生一系統平臺和系統,並使用介面進行數據交互。因此可見,業務的不斷發展,介面不斷增多,很多介面各自寄宿在不同 ...


前言

  為什麼在開發中,介面文檔越來越成為前後端開發人員溝通的樞紐呢?

  隨著業務的發張,項目越來越多,而對於支撐整個項目架構體系而言,我們對系統業務的水平拆分,垂直分層,讓業務系統更加清晰,從而產生一系統平臺和系統,並使用介面進行數據交互。因此可見,業務的不斷發展,介面不斷增多,很多介面各自寄宿在不同的項目中,如果沒有使用api工具進行管理,那麼使用和說明將變得非常複雜。所以,介面管理運營應運而生。

  在過去的開發中,沒有API文檔管理工具之前,很多的API文檔在什麼地方寫的都有,有在word寫的,有在excel寫的,也有對應的項目目錄下readme.md寫的,每個公司都有每個公司的玩法,但是文檔規範極其不統一,甚至出現開發介面更新,但文檔不更新,最終導致代碼和介面不匹配,開發功能出問題。擼碼一分鐘,對接三小時。這往往是大家最痛苦的。    

                     

  因此,在前後端分離的情況下,怎樣讓前後端開發人員更容易、更直觀、更舒服的方式進行溝通交流。在這裡,推薦一款輕量級的項目框架Swagger給大家使用。Swagger就是一款讓你更好書寫API文檔的框架

開始

一、 引用Swagger的nuget包

  Swashbuckle.AspNetCore

 然後就在項目的Nuget依賴里看到剛剛引入的Swagger

二、服務配置環節

Startup.cs頁面中: 編輯 ConfigureServices 類:
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddSwaggerGen(c =>
            {
                c.SwaggerDoc("V1", new OpenApiInfo
                {
                    Version = "V1",   //版本 
                    Title = $"XUnit.Core 介面文檔-NetCore3.1",  //標題
                    Description = $"XUnit.Core Http API v1",    //描述
                    Contact = new OpenApiContact { Name = "艾三元", Email = "", Url = new Uri("http://i3yuan.cnblogs.com") },  
                    License = new OpenApiLicense { Name = "艾三元許可證", Url = new Uri("http://i3yuan.cnblogs.com") }
                });
            });
            services.AddControllers();
        }
其中的Url地址不能為空。 三、中間件啟動環節 編輯Configure類 註意:路徑配置,設置為空,表示直接在根功能變數名稱(localhost:8001)訪問該文件,註意localhost:8001/swagger是訪問不到的,去launchSettings.json把launchUrl去掉,如果你想換一個路徑,直接寫名字即可,比如直接寫c.RoutePrefix = "swagger";
        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }

            app.UseSwagger();
            app.UseSwaggerUI(c => {
                c.SwaggerEndpoint($"/swagger/V1/swagger.json", $"XUnit.Core V1");
                c.RoutePrefix = string.Empty;     //如果是為空 訪問路徑就為 根功能變數名稱/index.html,註意localhost:8001/swagger是訪問不到的
                //路徑配置,設置為空,表示直接在根功能變數名稱(localhost:8001)訪問該文件
                // c.RoutePrefix = "swagger"; // 如果你想換一個路徑,直接寫名字即可,比如直接寫c.RoutePrefix = "swagger"; 則訪問路徑為 根功能變數名稱/swagger/index.html
            });

            app.UseRouting();

            app.UseAuthorization();

            app.UseEndpoints(endpoints =>
            {
                endpoints.MapControllers();
            });
        }
到這裡之後,我們已經完成了對swagger的添加,F5運行之後,

 運行項目之後,我們發現官方預設的是 /WeatherForecast地址,所以我們修改成在功能變數名稱後面輸入/index.html,就可以正常訪問了。

如果想修改預設的啟動地址,可以在launchSetting.json文件中的launchUrl設置為空,或者刪除掉就可以了。

 這個時候我們再次啟動項目,就可以直接訪問根目錄下的文件了。

如果啟動應用,並導航到 http://localhost:<port>/swagger/V1/swagger.json。 生成的描述終結點的文檔顯示如下json格式。

補充

  1. 已經有介面了,但如何添加註釋呢?   2. 作為介面使用者,我們關心的是介面的返回內容和響應類型,那我們如何定義描述響應類型呢?   3. 在項目開發中,使用的實體類,又如何在Swagger中展示呢?   4. 在部署項目,引用Swagger既有文檔又不需要額外部署,但是如何在開發環境中使用,而在生產環境中禁用呢?   以上的這些內容,會在下一篇講解Swagger做Api文檔做詳解。 好了,今天的使用Swagger做Api文檔上篇內容就說到這裡了,希望能給大家在使用Core開發項目中使用Swagger生產介面文檔帶來幫助。

總結

 1. 從過去手寫Api文檔,到引入Swagger工具自動生產API介面說明文檔,這一轉換,讓更多的介面可以以通俗易懂的方式展現給開發人員。

 2. 後續會繼續介紹Swagger的一些高級用法,希望對大家使用Swagger有所幫助。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 根據老師講的思路寫的,沒有百度,所以也不知道完不完全正確,但目前測試都還好,都可以正常排序。 1 #include <iostream> 2 using namespace std; 3 4 void quickSort(double *q ,int n) //一個double型數組還有一個代表這個 ...
  • "本文原文鏈接地址:http://nullpointer.pw/mapstruct%E6%9C%80%E4%BD%B3%E5%AE%9E%E8%B7%B5.html" 前言 按照日常開發習慣,對於不同領域層使用不同JavaBean對象傳輸數據,避免相互影響,因此基於資料庫實體對象User衍生出比如U ...
  • 大家在學習Python的時候,有人會問“Python要學到什麼程度才能出去找工作”,對於在Python培訓機構學習Python的同學來說這都不是問題,因為按照Python課程大綱來,一般都不會有什麼問題,而對於自學Python來說,那就比較難掌握,冒然出去找工作非常容易受打擊,從而失去學習Pytho ...
  • 1、Go 語言最主要的特性 自動垃圾回收 更豐富的內置類型 函數多返回值 錯誤處理 匿名函數和閉包 類型和介面 併發編程 反射 語言交互性 2、$GOPATH目錄約定有三個子目錄 src存放源代碼(比如:.go .c .h .s等) 按照golang預設約定,go run,go install等命令 ...
  • 關鍵詞:鄭州 二本 物理專業 先前端實習生 後Java程式員 更多文章收錄在碼雲倉庫:https://gitee.com/bingqilinpeishenme/Java Tutorials 前言 沒有正式復工,就一直在老家待著,已經很長時間沒有在三月份時候待在老家了,好久好久,從08年去縣城上高中開 ...
  • 問題背景 使用mybatis-plus進行資料庫交互,預設開啟null不更新設置,在新增數據後,編輯頁面將欄位值清除後(date類型,int類型,為避免預設值傳入,model全部使用包裝類型初始化為null)無法將null值更新至資料庫 單個解決方案 通過UpdateWrapper的set方法強制字 ...
  • Spring 整合 Mybatis 在開始使用 MyBatis Spring 之前,需要先熟悉 Spring 和 MyBatis 這兩個框架和有關它們的術語。 MyBatis Spring 需要以下版本: | MyBatis Spring | MyBatis | Spring 框架 | Spring ...
  • Startup構造函數 ConfigureServices方法 Configure方法 在ConfigureWebHostDefaults中直接配置服務和請求管道 ASP.NET Core一般使用Startup類來進行應用的配置。在構建應用主機時指定Startup類,通常通過在主機生成器上調用Web ...
一周排行
    -Advertisement-
    Play Games
  • .Net8.0 Blazor Hybird 桌面端 (WPF/Winform) 實測可以完整運行在 win7sp1/win10/win11. 如果用其他工具打包,還可以運行在mac/linux下, 傳送門BlazorHybrid 發佈為無依賴包方式 安裝 WebView2Runtime 1.57 M ...
  • 目錄前言PostgreSql安裝測試額外Nuget安裝Person.cs模擬運行Navicate連postgresql解決方案Garnet為什麼要選擇Garnet而不是RedisRedis不再開源Windows版的Redis是由微軟維護的Windows Redis版本老舊,後續可能不再更新Garne ...
  • C#TMS系統代碼-聯表報表學習 領導被裁了之後很快就有人上任了,幾乎是無縫銜接,很難讓我不想到這早就決定好了。我的職責沒有任何變化。感受下來這個系統封裝程度很高,我只要會調用方法就行。這個系統交付之後不會有太多問題,更多應該是做小需求,有大的開發任務應該也是第二期的事,嗯?怎麼感覺我變成運維了?而 ...
  • 我在隨筆《EAV模型(實體-屬性-值)的設計和低代碼的處理方案(1)》中介紹了一些基本的EAV模型設計知識和基於Winform場景下低代碼(或者說無代碼)的一些實現思路,在本篇隨筆中,我們來分析一下這種針對通用業務,且只需定義就能構建業務模塊存儲和界面的解決方案,其中的數據查詢處理的操作。 ...
  • 對某個遠程伺服器啟用和設置NTP服務(Windows系統) 打開註冊表 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders\NtpServer 將 Enabled 的值設置為 1,這將啟用NTP伺服器功 ...
  • title: Django信號與擴展:深入理解與實踐 date: 2024/5/15 22:40:52 updated: 2024/5/15 22:40:52 categories: 後端開發 tags: Django 信號 松耦合 觀察者 擴展 安全 性能 第一部分:Django信號基礎 Djan ...
  • 使用xadmin2遇到的問題&解決 環境配置: 使用的模塊版本: 關聯的包 Django 3.2.15 mysqlclient 2.2.4 xadmin 2.0.1 django-crispy-forms >= 1.6.0 django-import-export >= 0.5.1 django-r ...
  • 今天我打算整點兒不一樣的內容,通過之前學習的TransformerMap和LazyMap鏈,想搞點不一樣的,所以我關註了另外一條鏈DefaultedMap鏈,主要調用鏈為: 調用鏈詳細描述: ObjectInputStream.readObject() DefaultedMap.readObject ...
  • 後端應用級開發者該如何擁抱 AI GC?就是在這樣的一個大的浪潮下,我們的傳統的應用級開發者。我們該如何選擇職業或者是如何去快速轉型,跟上這樣的一個行業的一個浪潮? 0 AI金字塔模型 越往上它的整個難度就是職業機會也好,或者說是整個的這個運作也好,它的難度會越大,然後越往下機會就會越多,所以這是一 ...
  • @Autowired是Spring框架提供的註解,@Resource是Java EE 5規範提供的註解。 @Autowired預設按照類型自動裝配,而@Resource預設按照名稱自動裝配。 @Autowired支持@Qualifier註解來指定裝配哪一個具有相同類型的bean,而@Resourc... ...