﻿
{"id":10861,"date":"2019-05-06T14:55:09","date_gmt":"2019-05-06T14:55:09","guid":{"rendered":"https:\/\/www.gencayyildiz.com\/blog\/?p=10861"},"modified":"2019-05-06T14:56:12","modified_gmt":"2019-05-06T14:56:12","slug":"asp-net-core-swagger-araci","status":"publish","type":"post","link":"https:\/\/www.gencayyildiz.com\/blog\/asp-net-core-swagger-araci\/","title":{"rendered":"Asp.NET Core &#8211; Swagger Arac\u0131"},"content":{"rendered":"<div id=\"fb-root\"><\/div>\n<p>Merhaba,<\/p>\n<p>Bu i\u00e7eri\u011fimizde Restful servisler i\u00e7in olmazsa olmaz bir d\u00f6k\u00fcman arac\u0131 olan Swagger&#8217;i inceliyor olaca\u011f\u0131z. Swagger; web API uygulamalar\u0131nda endpointleri test etmek yahut server side uygulamalar\u0131na entegre olacak clientlara yard\u0131mc\u0131 olmak i\u00e7in uygulamadaki t\u00fcm endpointleri otomatik analiz edebilen ve bunlar\u0131n testi i\u00e7in hali haz\u0131rda bir aray\u00fcz olu\u015fturan developer dostu bir ara\u00e7t\u0131r. Hemen hemen her modern programlama dili ve ortam\u0131nda Swagger desteklenmektedir. <\/p>\n<p>Swagger, sistemdeki t\u00fcm endpointleri yakalayabilmek i\u00e7in t\u00fcm controller&#8217;lar ve i\u00e7lerindeki actionlar\u0131 bir .json format\u0131ndaki veri ile tutmakta ve bunu d\u00f6k\u00fcmantasyon i\u00e7in kullan\u0131lan Swagger-UI i\u015flevsel aray\u00fcz\u00fcne g\u00f6ndermektedir. B\u00f6ylece geli\u015fim s\u00fcrecindeki API uygulamas\u0131nda de\u011fi\u015fen yahut yeni eklenen t\u00fcm endpointler Swagger arac\u0131 sayesinde dinamik olarak yakalanabilmekte ve bu durumda bizler a\u00e7\u0131s\u0131ndan total maliyetten olduk\u00e7a k\u00e2r elde edilmektedir. Dolay\u0131s\u0131yla s\u00fcrekli geli\u015fen yahut de\u011fi\u015fen bir sistemi d\u00f6k\u00fcmante \u015fekilde tarif edebilmek s\u00fcrekli takip ve d\u00f6k\u00fcman g\u00fcncellemesi gerektirece\u011finden dolay\u0131 olduk\u00e7a yo\u011fun bir emek sarf etmemizi gerektirecektir. <\/p>\n<p>\u0130\u015fte Swagger, t\u00fcm bu emekleri do\u011fru yere sarf etmemiz ve enerjimizi do\u011fru yere y\u00f6nlendirmemiz i\u00e7in geli\u015ftirilmi\u015f bir yap\u0131lanmad\u0131r. T\u00fcm bunlar\u0131n yan\u0131nda d\u00f6k\u00fcmante \u00f6zelli\u011fiyle birlikte endpointleri sunmu\u015f oldu\u011fu Swagger-UI \u00fczerinden h\u0131zl\u0131ca test etmemizi sa\u011flayarak taktirleri katbekat hak etmeyi ba\u015farm\u0131\u015ft\u0131r.<\/p>\n<h4>Kurulumu<\/h4>\n<p>Swagger arac\u0131n\u0131 kullanabilmek i\u00e7in ilk olarak i\u00e7in <a href=\"https:\/\/www.nuget.org\/packages\/swashbuckle.aspnetcore\/\" rel=\"noopener noreferrer\" target=\"_blank\">\u015fu<\/a> adresteki en g\u00fcncel s\u00fcr\u00fcm\u00fcn\u00fc istedi\u011finiz y\u00f6ntemle uygulamaya indiriniz. \u00d6rnek olarak bu i\u00e7eri\u011fin klavyeye al\u0131nd\u0131\u011f\u0131 anda en g\u00fcncel olarak bulunan &#8220;4.0.1&#8221; s\u00fcr\u00fcm\u00fcn\u00fc .NET CLI arac\u0131l\u0131\u011f\u0131yla a\u015fa\u011f\u0131daki kod sayesinde uygulamaya import ediyorum.<\/p>\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\r\ndotnet add package Swashbuckle.AspNetCore --version 4.0.1\r\n<\/pre>\n<p><a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2019\/05\/Asp.NET-Core-Swagger-Arac\u0131.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2019\/05\/Asp.NET-Core-Swagger-Arac\u0131.png\" alt=\"Asp.NET Core - Swagger Arac\u0131\" width=\"1833\" height=\"171\" class=\"aligncenter size-full wp-image-10867\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2019\/05\/Asp.NET-Core-Swagger-Arac\u0131.png 1833w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2019\/05\/Asp.NET-Core-Swagger-Arac\u0131-300x28.png 300w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2019\/05\/Asp.NET-Core-Swagger-Arac\u0131-768x72.png 768w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2019\/05\/Asp.NET-Core-Swagger-Arac\u0131-1024x96.png 1024w\" sizes=\"auto, (max-width: 1833px) 100vw, 1833px\" \/><\/a><\/p>\n<p><strong><em>Swashbuckle<\/em><\/strong> isimli k\u00fct\u00fcphanenin Swagger i\u00e7in otomatik UI \u00fcretilmesini sa\u011flayan bir sorumlulu\u011fu mevcuttur. <\/p>\n<h4>Entegrasyonu<\/h4>\n<p>Bu i\u015flemden sonra Swagger arac\u0131n\u0131 uygulamaya entegre etmek i\u00e7in Startup dosyas\u0131nda &#8220;ConfigureServices&#8221; metodu i\u00e7erisinde &#8220;AddSwaggerGen&#8221; metodunu a\u015fa\u011f\u0131daki gibi kullan\u0131yoruz.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n        public void ConfigureServices(IServiceCollection services)\r\n        {\r\n            .\r\n            .\r\n            .\r\n            services.AddSwaggerGen(_ =&gt; _.SwaggerDoc(&quot;docname&quot;, new Info { Title = &quot;Doc Title&quot;, Version = &quot;v1&quot; }));\r\n            .\r\n            .\r\n            .\r\n        }\r\n<\/pre>\n<p>Yukar\u0131daki kod blo\u011funu incelerseniz e\u011fer uygulamaya Swagger k\u00fct\u00fcphanesi dahil edilmekte bununla beraber olu\u015fturulacak Swagger d\u00f6k\u00fcman\u0131n\u0131n temel konfig\u00fcrasyon ayarlar\u0131 sa\u011flanmaktad\u0131r.<\/p>\n<p>Bu i\u015flemden sonra servis olarak eklenen Swagger arac\u0131n\u0131, uygulaman\u0131n kullanmas\u0131 i\u00e7in yine Startup dosyas\u0131ndaki &#8220;Configure&#8221; metodu i\u00e7erisinden a\u015fa\u011f\u0131daki gibi ayarlamam\u0131z gerekmektedir.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n        public void Configure(IApplicationBuilder app, IHostingEnvironment env)\r\n        {\r\n            .\r\n            .\r\n            .\r\n            app.UseSwagger();\r\n            app.UseSwaggerUI(_ =&gt; _.SwaggerEndpoint(&quot;\/swagger\/docname\/swagger.json&quot;, &quot;Project Name&quot;));\r\n            .\r\n            .\r\n            .\r\n        }\r\n<\/pre>\n<p>Burada ise &#8220;UseSwagger&#8221; metodu ile uygulaman\u0131n Swagger arac\u0131n\u0131 kullanmas\u0131n\u0131, &#8220;UseSwaggerUI&#8221; metodu ile ise kullan\u0131lacak Swagger arac\u0131n\u0131n UI endpoint bilgilerini ayarlam\u0131\u015f bulunmaktay\u0131z. Muhtemelen g\u00f6z\u00fcn\u00fcze ili\u015fmi\u015ftir ama ben yinede ifade etmi\u015f olay\u0131m ki, &#8220;SwaggerEndpoint&#8221; fonksiyonu i\u00e7erisinde birinci olan &#8220;url&#8221; parametresi de\u011fer olarak yukar\u0131da tan\u0131mlanm\u0131\u015f olan Swagger d\u00f6k\u00fcman\u0131n\u0131n ad\u0131n\u0131 dizininde kullanmak zorundad\u0131r.<\/p>\n<p>Art\u0131k bu i\u015flemlerden sonra uygulamay\u0131 \u00e7al\u0131\u015ft\u0131r\u0131p <strong style=\"color:OrangeRed;\"><span style=\"color:Tomato;\">https:\/\/localhost:****\/<\/span>swagger<\/strong> \u015feklinde bir istekte bulunursan\u0131z sizi Swagger ekran\u0131 kar\u015f\u0131layacakt\u0131r.<\/p>\n<p>\u0130lgili ekran \u00fczerinden a\u015fa\u011f\u0131daki ekran g\u00f6r\u00fcnt\u00fcs\u00fcnde oldu\u011fu gibi uygulamadaki t\u00fcm endpointleri g\u00f6rebilir, onlar\u0131 deneyebilir, deneme sonucundaki verileri .json olarak elde edebilir ve bu \u015fekilde yap\u0131lanmay\u0131 tam teferruatl\u0131 d\u00f6k\u00fcmante etmi\u015f oluyoruz.<br \/>\n<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2019\/05\/Asp.NET-Core-Swagger-Arac\u0131.gif\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2019\/05\/Asp.NET-Core-Swagger-Arac\u0131.gif\" alt=\"Asp.NET Core - Swagger Arac\u0131\" width=\"800\" height=\"464\" class=\"aligncenter size-full wp-image-10887\" \/><\/a><\/p>\n<p>\u0130lgilenenlerin faydalanmas\u0131 dile\u011fiyle&#8230;<br \/>\nSonraki yaz\u0131lar\u0131mda g\u00f6r\u00fc\u015fmek \u00fczere&#8230;<br \/>\n\u0130yi \u00e7al\u0131\u015fmalar.<\/p>\n<!-- AddThis Advanced Settings generic via filter on the_content --><!-- AddThis Share Buttons generic via filter on the_content -->","protected":false},"excerpt":{"rendered":"<p>Merhaba, Bu i\u00e7eri\u011fimizde Restful servisler i\u00e7in olmazsa olmaz bir d\u00f6k\u00fcman arac\u0131 olan Swagger&#8217;i inceliyor olaca\u011f\u0131z. Swagger; web API uygulamalar\u0131nda endpointleri test etmek yahut server side uygulamalar\u0131na entegre olacak clientlara yard\u0131mc\u0131 olmak i\u00e7in uygulamadaki t\u00fcm&#46;&#46;&#46;<!-- AddThis Advanced Settings generic via filter on get_the_excerpt --><!-- AddThis Share Buttons generic via filter on get_the_excerpt --><\/p>\n","protected":false},"author":1,"featured_media":10888,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2739,2832],"tags":[2841,2843,2844,2846,2842,2845,2847,2848,2849],"class_list":["post-10861","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-net-core","category-asp-net-core-2-2","tag-addswaggergen","tag-asp-net-core-swagger-araci","tag-asp-net-core-swagger-tool","tag-swagger","tag-swagger-araci","tag-swagger-tool","tag-swashbuckle","tag-useswagger","tag-useswaggerui"],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/10861","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/comments?post=10861"}],"version-history":[{"count":26,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/10861\/revisions"}],"predecessor-version":[{"id":10890,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/10861\/revisions\/10890"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media\/10888"}],"wp:attachment":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media?parent=10861"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/categories?post=10861"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/tags?post=10861"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}