<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
Swagger是一個與語言無關的規範,用於描述REST API。因為Swagger專案已捐贈給OpenAPI計劃,所以也叫OpenAPI。它允許計算機和人員瞭解服務的功能,可以直接線上存取測試API方法。而Swagger UI提供了基於Web的UI,它使用生成的Swagger規範提供有關服務API的資訊。Swashbuckle和NSwag均包含Swagger UI的嵌入式版本,因此可使用中介軟體註冊呼叫將該嵌入式版本託管在ASP.NET Core應用程式當中。Swagger的核心是Swagger規範,預設情況下是名為swagger.json的檔案。它由Swagger工具鏈(或其第三方實現)根據你的服務生成。它描述了API的功能以及使用HTTP對其進行存取的方式。它驅動Swagger UI,並由工具鏈用來啟用發現和使用者端程式碼生成。
NET Swagger實現分為兩大分類:
但是由於工作比較忙,我就不打算兩個型別都講了,我只選擇Swashbuckle.AspNetCore來講解和演示。
Swashbuckle有三個主要組成部分:
安裝Swashbuckle元件方法有兩種:
--PowerShell Install-Package Swashbuckle.AspNetCore -Version 5.0.0
or
--.NET Core CLI dotnet add TodoApi.csproj package Swashbuckle.AspNetCore -v 5.0.0
我百度一下,度娘解釋是:REST是(Representational State Transfer)“表現層狀態轉移”的縮寫,它是由羅伊·菲爾丁(Roy Fielding)提出的,是用來描述建立HTTP API的標準方法,他發現這四種常用的行為“檢視(view),建立(create),編輯(edit)和刪除(delete)”都可以直接對映到HTTP中已實現的GET、POST、PUT和DELETE方法。
將Swagger生成器新增到Startup.ConfigureServices方法中的服務集合中:
//註冊Swagger生成器,定義一個或多個Swagger檔案. services.AddSwaggerGen(c => { c.SwaggerDoc("v1", new OpenApiInfo { Title = "My API", Version = "v1", Description = "測試描述" }); });
OpenApiInfo物件是用來標識Swagger檔案資訊(諸如作者、許可證和說明的資訊),您還可以自定義您的主題的資訊顯示在UI上,詳情設定,我就不多說,大家可以看官網描述,如上述OpenApilnfo資訊設定範例圖:
而在啟動應用程式後並導航到http://localhost:<port>/swagger/v1/swagger.json。生成的描述終結點的檔案顯示在Swagger規範(swagger.json)中:
在Startup.Configure方法中,啟用中介軟體為生成的JSON檔案和Swagger UI提供服務:
//使中介軟體能夠將生成的Swagger用作JSON端點. app.UseSwagger(); //允許中介軟體為swagger ui(HTML、JS、CSS等)提供服務,指定swagger JSON端點. app.UseSwaggerUI(c => { c.SwaggerEndpoint("/swagger/v1/swagger.json", "My API V1"); });
根據上述設定就能夠啟用swagger測試API服務介面了,如下圖所示:
swagger還可以把服務API中對應方法名稱,實體屬性註釋給在UI上顯示出來,讓您更加直觀瞭解每個方法使用資訊,並對沒有註釋每個方法進行警告提示,具體啟用XML註釋操作在“解決方案資源管理器”中右鍵單擊該專案,然後選擇“編輯<project_name>.csproj”,手動將突出顯示的行新增到.csproj 檔案:
<PropertyGroup> <GenerateDocumentationFile>true</GenerateDocumentationFile> </PropertyGroup>
在啟用了XML註釋後,swagger只會針對沒有新增註釋每個方法進行警告提示,而新增了註釋的方法則不會進行警告提示:
而每個新增了註釋的方法會通過在Startup.ConfigureServices/services.AddSwaggerGen中設定Swagger JSON和UI的註釋路徑後:
//設定Swagger JSON和UI的註釋路徑. var xmlFile = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml"; var xmlPath = Path.Combine(AppContext.BaseDirectory, xmlFile); c.IncludeXmlComments(xmlPath);
會在專案根目錄生成的一個對應專案檔名的XML檔案,而檔案裡面就包含所有已註釋的方法,用於UI上顯示:
在啟動應用程式後,我們會看到每個有註釋方法在左側會有一行文字描述,效果如下圖所示:
如果某個方法或者類下面所有方法不想警告提示,可以通過加入#pragma warning disable宣告遮蔽警告提示:
加入宣告之後,大家會看到警告提示消失了。
可以使用System.ComponentModel.DataAnnotations名稱空間中的屬性來標記模型實體,以幫助驅動Swagger UI 元件。將[Required]屬性新增到TodoItem類的Name屬性:
namespace TodoApi.Models { public class TodoItem { public long Id { get; set; } [Required] public string Name { get; set; } [DefaultValue(false)] public bool IsComplete { get; set; } } }
此屬性的狀態會更改掉基礎JSON架構:
而將[Produces("application/json")]屬性新增到API控制器去,這樣做的目的是宣告控制器的操作支援application/json的響應內容型別:
[Produces("application/json")] [Route("api/[controller]")] [ApiController] public class ValuesController : ControllerBase { /// <summary> /// 獲取值 /// </summary> /// <returns></returns> // GET api/values [HttpGet] public async Task<ActionResult<IEnumerable<string>>> Get() { var result = await new GitHubApi().GetUser(); return new string[] { result.id.Value.ToString(), result.login }; } }
“響應內容型別”下拉選單選此內容型別作為控制器的預設GET操作:
Swagger/OpenAPI出現,大大減少開發者偵錯時間,增加開發者開發效率,讓開發者更加方便偵錯跟直觀瞭解對應服務方法。
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援it145.com。
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45