﻿
{"id":15812,"date":"2020-05-12T23:17:20","date_gmt":"2020-05-12T23:17:20","guid":{"rendered":"https:\/\/www.gencayyildiz.com\/blog\/?p=15812"},"modified":"2020-05-12T23:17:20","modified_gmt":"2020-05-12T23:17:20","slug":"asp-net-core-mvc-smidge-kutuphanesiyle-bundle-islemi","status":"publish","type":"post","link":"https:\/\/www.gencayyildiz.com\/blog\/asp-net-core-mvc-smidge-kutuphanesiyle-bundle-islemi\/","title":{"rendered":"Asp.NET Core MVC &#8211; Smidge K\u00fct\u00fcphanesiyle Bundle \u0130\u015flemi"},"content":{"rendered":"<div id=\"fb-root\"><\/div>\n<p>Merhaba,<\/p>\n<p>Bu i\u00e7eri\u011fimizde Asp.NET Core MVC uygulamalar\u0131nda b\u00fcy\u00fck boyutlu JavaScript ve CSS dosyalar\u0131n\u0131n boyutlar\u0131n\u0131 k\u00fc\u00e7\u00fcltmek i\u00e7in sarmak\/kundaklamak manas\u0131na gelen bundle i\u015flemini \u00e7al\u0131\u015fma zaman\u0131nda  yapmam\u0131z\u0131 sa\u011flayan Smidge k\u00fct\u00fcphanesi \u00fczerine konu\u015faca\u011f\u0131z.<\/p>\n<p>\u0130lk olarak Smidge k\u00fct\u00fcphanesinin temel olarak benimsedi\u011fi terimleri anlamland\u0131rarak ba\u015flayal\u0131m.<\/p>\n<p><strong>Bundling &#038; Minification Ne Demektir?<\/strong><br \/>\nWeb sitelerinde performans ve y\u00fcklenme h\u0131zlar\u0131n\u0131 artt\u0131rmak i\u00e7in yap\u0131lan eylemleri tarif etmek i\u00e7in kullan\u0131lan terimlerdir.<\/p>\n<p><em>Bundling<\/em>; anlamsal olarak &#8216;gruplama&#8217; demektir ve k\u00f6ken olarak(bund) &#8216;federasyon&#8217; yahut &#8216;dernek&#8217; k\u00f6keninden gelmektedir. Buradan da anla\u015f\u0131lan birden fazla JavaScript, CSS vs. gibi dosyalar\u0131 tekbir dosyada birle\u015ftirmektir. <\/p>\n<p>\u00d6rne\u011fin; <span style=\"color:blue;\">3 JS + 2 CSS<\/span> dosyas\u0131n\u0131 bundling ettikten sonra <span style=\"color:blue;\">1 JS + 1 CSS<\/span> dosyas\u0131 olarak \u00e7\u0131kt\u0131 verecektir.<\/p>\n<p><em>Minification<\/em>; JS yahut CSS dosyalar\u0131n\u0131n i\u00e7eriklerinde bulunan gereksiz karakterlerin veya yorum sat\u0131rlar\u0131n\u0131n temizlenmesi ve b\u00f6ylece boyutlar\u0131n\u0131n k\u00fc\u00e7\u00fclt\u00fclmesi i\u015flemidir.<\/p>\n<blockquote style=\"color:green;\"><p><strong>Smidge k\u00fct\u00fcphanesi uygulamadaki JS ve CSS dosyalar\u0131n\u0131 hem bundling hem de minification i\u015flemlerine tabii tutmaktad\u0131r.<\/strong><\/p><\/blockquote>\n<p><strong>Smidge K\u00fct\u00fcphanesinin Entegrasyonu<\/strong><br \/>\nUygulaman\u0131za Smidge k\u00fct\u00fcphanesini entegre edebilmeniz i\u00e7in <a href=\"https:\/\/www.nuget.org\/packages\/Smidge\/\" rel=\"noopener noreferrer\" target=\"_blank\">nuget<\/a> adresinden ilgili k\u00fct\u00fcphaneyi edinebilirsiniz. Ayr\u0131ca Smidge ile ilgili g\u00fcncel geli\u015fmeleri takip etmek i\u00e7in <a href=\"https:\/\/github.com\/Shazwazza\/Smidge\" rel=\"noopener noreferrer\" target=\"_blank\">github<\/a> adresinide takip edebilirsiniz.<\/p>\n<p><strong>Smidge K\u00fct\u00fcphanesiyle Harici Dosyalar\u0131n(JS, CSS) Boyutlar\u0131n\u0131 K\u00fc\u00e7\u00fcltme<\/strong><br \/>\n\u0130lk olarak Smidge ile ilgili konfig\u00fcrasyonlar\u0131n yap\u0131lmas\u0131 gerekmektedir. Bunun i\u00e7in &#8216;appsettings.json&#8217; dosyas\u0131 a\u015fa\u011f\u0131daki gibi kullan\u0131lmaktad\u0131r;<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n{\r\n  &quot;smidge&quot;: {\r\n    &quot;dataFolder&quot;: &quot;App_Data\/Smidge&quot;,\r\n    &quot;version&quot;: 1\r\n  }\r\n}\r\n<\/pre>\n<p>Konfig\u00fcrasyona g\u00f6z atarsan\u0131z e\u011fer &#8216;dataFolder&#8217; ile s\u0131k\u0131\u015ft\u0131r\u0131lm\u0131\u015f ve minimize edilmi\u015f dosyalar\u0131n nerede cachelenece\u011fini belirtiyoruz. Ayr\u0131ca &#8216;version&#8217; ile ilgili s\u0131k\u0131\u015ft\u0131r\u0131lm\u0131\u015f dosyalar\u0131 versiyonluyoruz.<\/p>\n<p>Ard\u0131ndan uygulamada Smidge&#8217;in kullan\u0131labilmesi i\u00e7in &#8216;Startup.cs&#8217; dosyas\u0131ndaki &#8216;ConfigureServices&#8217; metodu i\u00e7erisinde &#8216;AddSmidge&#8217; servisinin \u00e7a\u011fr\u0131lmas\u0131 gerekmektedir.<\/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.AddSmidge(Configuration.GetSection(&quot;smidge&quot;));\r\n            .\r\n            .\r\n            .\r\n        }\r\n<\/pre>\n<p>Ve hemen ard\u0131ndan &#8216;Configure&#8217; metodu i\u00e7erisinde &#8216;UseEndpoints&#8217; \u00fczerinde a\u015fa\u011f\u0131daki middleware&#8217;i \u00e7a\u011f\u0131r\u0131n\u0131z.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)\r\n        {\r\n            .\r\n            .\r\n            .\r\n            app.UseSmidge(bundle =&gt;\r\n            {\r\n                bundle.CreateJs(&quot;jsbundle&quot;, &quot;~\/js\/islem1.js&quot;, &quot;~\/js\/islem2.js&quot;);\r\n                bundle.CreateCss(&quot;cssbundle&quot;, &quot;~\/css\/style1.css&quot;, &quot;~\/css\/style2.css&quot;);\r\n            });\r\n            app.UseEndpoints(endpoints =&gt;\r\n            {\r\n                endpoints.MapControllerRoute(\r\n                    name: &quot;default&quot;,\r\n                    pattern: &quot;{controller=Home}\/{action=Index}\/{id?}&quot;);\r\n            });\r\n            .\r\n            .\r\n            .\r\n        }\r\n<\/pre>\n<p>Bu i\u015flemler neticesinde uygulama aya\u011fa kald\u0131r\u0131ld\u0131\u011f\u0131nda belirtilen JavaScript ve CSS dosyalar\u0131 bundle edilecektir.<\/p>\n<p><strong>Bundle Edilmi\u015f Harici Dosyalar\u0131 Kullanma<\/strong><br \/>\n\u0130lk olarak bundle edilmi\u015f dosyalara eri\u015febilmek i\u00e7in Smidge taghelper&#8217;\u0131n\u0131n eklenmesi gerekmektedir.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n@addTagHelper *, Smidge\r\n<\/pre>\n<p>Ard\u0131ndan harici dosyalar\u0131n bundle edilmi\u015f halleri referans g\u00f6sterilmelidir.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    &lt;link rel=&quot;stylesheet&quot; href=&quot;cssbundle&quot; \/&gt;\r\n<\/pre>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    &lt;script src=&quot;jsbundle&quot;&gt;&lt;\/script&gt;\r\n<\/pre>\n<p>Uygulamay\u0131 aya\u011fa kald\u0131rd\u0131\u011f\u0131n\u0131zda a\u015fa\u011f\u0131daki gibi ilgili dosyalar\u0131n bundle edildi\u011fini g\u00f6receksiniz.<br \/>\n<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2020\/05\/Asp.NET-Core-MVC-Smidge-K\u00fct\u00fcphanesiyle-Bundle-\u0130\u015flemi.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2020\/05\/Asp.NET-Core-MVC-Smidge-K\u00fct\u00fcphanesiyle-Bundle-\u0130\u015flemi.jpg\" alt=\"Asp.NET Core MVC - Smidge K\u00fct\u00fcphanesiyle Bundle \u0130\u015flemi\" width=\"843\" height=\"46\" class=\"aligncenter size-full wp-image-15835\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2020\/05\/Asp.NET-Core-MVC-Smidge-K\u00fct\u00fcphanesiyle-Bundle-\u0130\u015flemi.jpg 843w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2020\/05\/Asp.NET-Core-MVC-Smidge-K\u00fct\u00fcphanesiyle-Bundle-\u0130\u015flemi-300x16.jpg 300w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2020\/05\/Asp.NET-Core-MVC-Smidge-K\u00fct\u00fcphanesiyle-Bundle-\u0130\u015flemi-768x42.jpg 768w\" sizes=\"auto, (max-width: 843px) 100vw, 843px\" \/><\/a><\/p>\n<p>Solution Explorer penceresinede g\u00f6z atarsan\u0131z e\u011fer &#8216;App_Data&#8217; klas\u00f6r\u00fcn\u00fcn olu\u015fturuldu\u011funu ve i\u00e7erisinde bundle edilmi\u015f dosyalar\u0131n cachelendi\u011fini g\u00f6receksiniz.<br \/>\n<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2020\/05\/Asp.NET-Core-MVC-Smidge-K\u00fct\u00fcphanesiyle-Bundle-\u0130\u015flemi-1.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2020\/05\/Asp.NET-Core-MVC-Smidge-K\u00fct\u00fcphanesiyle-Bundle-\u0130\u015flemi-1.jpg\" alt=\"Asp.NET Core MVC - Smidge K\u00fct\u00fcphanesiyle Bundle \u0130\u015flemi\" width=\"221\" height=\"216\" class=\"aligncenter size-full wp-image-15838\" \/><\/a><\/p>\n<p><strong>Smidge K\u00fct\u00fcphanesinde Debug Modu<\/strong><br \/>\nBazen geli\u015fim s\u00fcrecinde JavaScript dosyalar\u0131n\u0131 debug edebilmek i\u00e7in bundle i\u015fleminin production ortam\u0131nda ger\u00e7ekle\u015ftirilmesini isteyebiliriz. Bunun i\u00e7in;<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    &lt;environment names=&quot;Development&quot;&gt;\r\n        &lt;link rel=&quot;stylesheet&quot; href=&quot;cssbundle&quot; debug=&quot;true&quot; \/&gt;\r\n        &lt;script src=&quot;jsbundle&quot; debug=&quot;true&quot;&gt;&lt;\/script&gt;\r\n    &lt;\/environment&gt;\r\n    &lt;environment names=&quot;Production&quot;&gt;\r\n        &lt;link rel=&quot;stylesheet&quot; href=&quot;cssbundle&quot; \/&gt;\r\n        &lt;script src=&quot;jsbundle&quot;&gt;&lt;\/script&gt;\r\n    &lt;\/environment&gt;\r\n<\/pre>\n<p>\u015feklinde \u00e7al\u0131\u015f\u0131lmas\u0131 yeterli olacakt\u0131r. Dikkat edilirse e\u011fer &#8216;Development&#8217; ortam\u0131nda ilgili referanslar &#8216;debug=&#8221;true&#8221;&#8216; attribute&#8217;u ile i\u015faretlenmektedir. B\u00f6ylece development ortam\u0131nda debug modda script&#8217;i y\u00fckleyecek dolay\u0131s\u0131yla bundle yapmayacakt\u0131r. Lakin &#8216;Production&#8217; ortam\u0131nda beklenen i\u015flemleri ger\u00e7ekle\u015ftirecek, dosyalar\u0131n boyutlar\u0131n\u0131 k\u00fc\u00e7\u00fcltecektir.<\/p>\n<table>\n<thead>\n<tr>\n<th>Development<\/th>\n<th>Production<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2020\/05\/Asp.NET-Core-MVC-Smidge-K\u00fct\u00fcphanesiyle-Bundle-\u0130\u015flemi-2.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2020\/05\/Asp.NET-Core-MVC-Smidge-K\u00fct\u00fcphanesiyle-Bundle-\u0130\u015flemi-2.jpg\" alt=\"Asp.NET Core MVC - Smidge K\u00fct\u00fcphanesiyle Bundle \u0130\u015flemi\" width=\"397\" height=\"94\" class=\"aligncenter size-full wp-image-15840\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2020\/05\/Asp.NET-Core-MVC-Smidge-K\u00fct\u00fcphanesiyle-Bundle-\u0130\u015flemi-2.jpg 397w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2020\/05\/Asp.NET-Core-MVC-Smidge-K\u00fct\u00fcphanesiyle-Bundle-\u0130\u015flemi-2-300x71.jpg 300w\" sizes=\"auto, (max-width: 397px) 100vw, 397px\" \/><\/a><\/td>\n<td><a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2020\/05\/Asp.NET-Core-MVC-Smidge-K\u00fct\u00fcphanesiyle-Bundle-\u0130\u015flemi-3.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2020\/05\/Asp.NET-Core-MVC-Smidge-K\u00fct\u00fcphanesiyle-Bundle-\u0130\u015flemi-3.jpg\" alt=\"Asp.NET Core MVC - Smidge K\u00fct\u00fcphanesiyle Bundle \u0130\u015flemi\" width=\"368\" height=\"47\" class=\"aligncenter size-full wp-image-15841\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2020\/05\/Asp.NET-Core-MVC-Smidge-K\u00fct\u00fcphanesiyle-Bundle-\u0130\u015flemi-3.jpg 368w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2020\/05\/Asp.NET-Core-MVC-Smidge-K\u00fct\u00fcphanesiyle-Bundle-\u0130\u015flemi-3-300x38.jpg 300w\" sizes=\"auto, (max-width: 368px) 100vw, 368px\" \/><\/a><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><strong>Ortama G\u00f6re Bundle Konfig\u00fcrasyonunun \u00d6zelle\u015ftirilmesi<\/strong><br \/>\nYap\u0131lacak bundle operasyonunu a\u015fa\u011f\u0131daki gibi \u00f6zelle\u015ftirebilirsiniz.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n                bundle.CreateJs(&quot;jsbundle&quot;, &quot;~\/js\/islem1.js&quot;, &quot;~\/js\/islem2.js&quot;)\r\n                .WithEnvironmentOptions(Smidge.Options.BundleEnvironmentOptions.Create()\r\n                .ForDebug(builder =&gt; builder\r\n                    .EnableCompositeProcessing()\r\n                    .EnableFileWatcher()\r\n                    .SetCacheBusterType&lt;Smidge.Cache.AppDomainLifetimeCacheBuster&gt;()\r\n                    .CacheControlOptions(enableEtag: false, cacheControlMaxAge: 0))\r\n                    .Build());\r\n<\/pre>\n<p>Yap\u0131lanmay\u0131 incelersek e\u011fer;<\/p>\n<ul>\n<li><em>ForDebug<\/em>;<br \/>\nBelirtilecek ayarlar\u0131n debug mod i\u00e7in ge\u00e7erli olaca\u011f\u0131 bildirilmektedir.\n<\/li>\n<li><em>EnableCompositeProcessing<\/em>;<br \/>\nHarici dosyalar\u0131n birle\u015ftirilmesi bildirilmektedir.\n<\/li>\n<li><em>EnableFileWatcher<\/em>;<br \/>\nCache&#8217;de ki bundle dosyalar\u0131n\u0131n kaynaklar\u0131n\u0131 takip etmesini ve bir de\u011fi\u015fiklik s\u00f6z konusu oldu\u011fu taktirde tekrar olu\u015fturmas\u0131 gerekti\u011fini bildirmektedir.\n<\/li>\n<li><em>SetCacheBusterType<\/em>;<br \/>\nCache&#8217;in ne zaman olu\u015fturulaca\u011f\u0131n\u0131 bildirir. &#8216;AppDomainLifetimeCacheBuster&#8217; nesnesi ile uygulaman\u0131n ya\u015fam d\u00f6ng\u00fcs\u00fcnde yani her aya\u011fa kald\u0131r\u0131ld\u0131\u011f\u0131nda cache&#8217;in tekrar olu\u015fturularak tazelenmesini ifade eder.\n<\/li>\n<li><em>CacheControlOptions<\/em>;<br \/>\nUygulaman\u0131n cache konfig\u00fcrasyonunu ifade eder.<\/p>\n<ul>\n<li><em>enableEtag<\/em><br \/>\nBrowser server \u00fczerinden herhangi bir dosya \u00e7ekti\u011fi zaman server response i\u00e7erisinde bir Etag g\u00f6nderir. Token vazifesi g\u00f6ren bu Etag de\u011feri ile browser sonraki yapaca\u011f\u0131 isteklerdeki davran\u0131\u015f\u0131n\u0131 belirler. Browser, yap\u0131lan isteklerde gelen Etag de\u011ferine g\u00f6re ilgili dosyan\u0131n de\u011fi\u015fip, de\u011fi\u015fmedi\u011fini anlayacak ve b\u00f6ylece cookie&#8217;den okuyup okumayaca\u011f\u0131na karar verecektir. E\u011fer ki istek neticesinde gelen Etag bir \u00f6ncekiyle ayn\u0131 de\u011ferdeyse bu durumda 304 Status Code&#8217;u ile beraber body de\u011feri bo\u015f d\u00f6necek, ilgili dosya cache&#8217;den okunacakt\u0131r. &#8216;false&#8217; de\u011feri verildi\u011fi taktirde Etag de\u011ferine bak\u0131lmaks\u0131z\u0131n ilgili dosyan\u0131n direkt olarak sunucudan \u00e7ekilmesi bildirilmi\u015f olacakt\u0131r.\n<\/li>\n<li><em>cacheControlMaxAge<\/em><br \/>\n\u0130lgili dosyan\u0131n browser cache&#8217;inde ne kadar tutulaca\u011f\u0131 saniye cinsinden bildirilmektedir.\n<\/li>\n<\/ul>\n<\/li>\n<li><em>Build<\/em>;<br \/>\nBu ayarlarla t\u00fcm yap\u0131lanma in\u015fa edilmektedir.\n<\/li>\n<\/ul>\n<p>G\u00f6r\u00fcld\u00fc\u011f\u00fc \u00fczere Smidge k\u00fct\u00fcphanesinin debug moddaki davran\u0131\u015f\u0131n\u0131 yukar\u0131daki \u00f6zelle\u015ftirmelerle de\u011fi\u015ftirmi\u015f bulunmaktay\u0131z.<\/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&#8230;<\/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 Asp.NET Core MVC uygulamalar\u0131nda b\u00fcy\u00fck boyutlu JavaScript ve CSS dosyalar\u0131n\u0131n boyutlar\u0131n\u0131 k\u00fc\u00e7\u00fcltmek i\u00e7in sarmak\/kundaklamak manas\u0131na gelen bundle i\u015flemini \u00e7al\u0131\u015fma zaman\u0131nda yapmam\u0131z\u0131 sa\u011flayan Smidge k\u00fct\u00fcphanesi \u00fczerine konu\u015faca\u011f\u0131z. \u0130lk olarak Smidge k\u00fct\u00fcphanesinin temel&#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":3014,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3102,3103],"tags":[2679,3509,3512,3513,3505,3507,3510,3511,3508,3506],"class_list":["post-15812","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-asp-net-core","category-asp-net-core-3-1","tag-asp-net-core","tag-asp-net-core-bundle","tag-asp-net-core-bundling","tag-asp-net-core-minification","tag-asp-net-core-smidge","tag-asp-net-core-smidge-kutuphanesi","tag-bundling","tag-minification","tag-smidge-bundle","tag-smidge-kutuphanesi"],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/15812","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=15812"}],"version-history":[{"count":32,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/15812\/revisions"}],"predecessor-version":[{"id":15848,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/15812\/revisions\/15848"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media\/3014"}],"wp:attachment":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media?parent=15812"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/categories?post=15812"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/tags?post=15812"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}