﻿
{"id":915,"date":"2012-11-15T23:50:02","date_gmt":"2012-11-15T23:50:02","guid":{"rendered":"http:\/\/www.gencayyildiz.com\/blog\/?p=915"},"modified":"2013-03-13T16:27:27","modified_gmt":"2013-03-13T16:27:27","slug":"web-service-soapheader-ile-guvenlik","status":"publish","type":"post","link":"https:\/\/www.gencayyildiz.com\/blog\/web-service-soapheader-ile-guvenlik\/","title":{"rendered":"Web Service SoapHeader \u0130le Guvenlik"},"content":{"rendered":"<div id=\"fb-root\"><\/div>\n<p>Merhaba,<br \/>\nWeb Service uygulamalar\u0131nda g\u00fcvenli\u011fin ne kadar \u00f6nemli oldu\u011funu ve iki t\u00fcrl\u00fc g\u00fcvenlik oldu\u011funu, <a href=\"http:\/\/www.gencayyildiz.com\/blog\/web-service-session-bazli-guvenlik\/\" target=\"_blank\">Web Service Session Bazl\u0131 G\u00fcvenlik<\/a> yaz\u0131mda bahsetmi\u015ftim.Ba\u015fl\u0131ktanda anla\u015f\u0131laca\u011f\u0131 gibi Session bazl\u0131 g\u00fcvenli\u011fi o yaz\u0131mda anlatm\u0131\u015f bulunmaktay\u0131m.<br \/>\n\u015eimdi ise Web Service&#8217;lerde SoapHeader ile g\u00fcvenli\u011fin nas\u0131l al\u0131nd\u0131\u011f\u0131n\u0131 inceleyece\u011fiz.<br \/>\nBir \u00f6nceki yaz\u0131m\u0131nda oldu\u011fu gibi malzeme ismi ve adet say\u0131s\u0131n\u0131 olu\u015fturdu\u011fumuz Web Service alacak ve bunu belirtilen herhangi bir veri kayna\u011f\u0131na i\u015fleyecektir.Bu durumun SoapHeader ile g\u00fcvenli\u011fini alal\u0131m.\u00d6ncelikle bir Web Service olu\u015ftural\u0131m ve gerekli metodumuzu haz\u0131rlayal\u0131m.<\/p>\n<p>Tabi \u00f6ncelikle bu yaz\u0131m\u0131 okumadan \u00f6nce <a href=\"http:\/\/www.gencayyildiz.com\/blog\/web-service-kullanimi\/\" target=\"_blank\">Web Service Kullan\u0131m\u0131<\/a> ve <a href=\"http:\/\/www.gencayyildiz.com\/blog\/web-service-olusturma\/\" target=\"_blank\">Web Service Olu\u015fturma<\/a> ba\u015fl\u0131kl\u0131 yaz\u0131lar\u0131m\u0131 okuman\u0131z\u0131 tavsiye ederim.<\/p>\n<p>Ben NeKacAdet.asmx ad\u0131nda bir Web Service olu\u015fturuyorum.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    &#x5B;WebService(Namespace = &quot;http:\/\/tempuri.org\/&quot;)]\r\n    &#x5B;WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]\r\n    &#x5B;System.ComponentModel.ToolboxItem(false)]\r\n    public class NeKacAdet : System.Web.Services.WebService\r\n    {\r\n        &#x5B;WebMethod]\r\n        public void SiparisVer(int Adet, string UrunAdi)\r\n        {\r\n            StreamWriter SiparisKayit = new StreamWriter(&quot;C:\/Dosya\/SiparisKayit.txt&quot;, true);\r\n            \/\/C:\/Dosya\/SiparisKayit.txt dosyas\u0131n\u0131n mevcut oldu\u011funu varsay\u0131yorum.\r\n            SiparisKayit.WriteLine(&quot;\u00dcr\u00fcn Ad\u0131=&quot; + UrunAdi);\r\n            SiparisKayit.WriteLine(&quot;Urun Adedi=&quot; + Adet);\r\n            SiparisKayit.Close();\r\n        }\r\n    }\r\n<\/pre>\n<p>Yukar\u0131daki kodlar\u0131 incelerseniz e\u011fer, NeKacAdet.asmx ad\u0131ndaki Web Service&#8217;imizin i\u00e7ine &#8220;SiparisVer&#8221; ad\u0131nda int ve string tipinde iki parametre alan bir metod yazd\u0131k.G\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi temel senaryomuzu ger\u00e7ekle\u015ftiren ama g\u00fcvenli\u011fi olmayan bir metod.\u015eu durumda Web Service&#8217;i kullanan birisi binlerce kez gereksiz sipari\u015f yapabilir.Bizim i\u00e7in sistemimizde bulunan ya da bizim belirledi\u011fimiz kullan\u0131c\u0131lar\u0131n bu Web Service&#8217;den sipari\u015f vermelerini sa\u011flamakt\u0131r.<\/p>\n<p>Web Service&#8217;imizi projemize y\u00fckler ve SiparisVer() ismindeki metodumuzu gerekli parametrelerde \u00e7al\u0131\u015ft\u0131r\u0131rsak g\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi(sizinde denedi\u011finizi varsay\u0131yorum) gayet g\u00fczel bir \u015fekilde SiparisKayit.txt dosyas\u0131na verilemizi eklemi\u015ftir.<\/p>\n<p>Ben kendi projeme &#8220;NeKacAdet&#8221; isminde bu Web Service&#8217;i ekliyorum.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    public partial class Form1 : Form\r\n    {\r\n        public Form1()\r\n        {\r\n            InitializeComponent();\r\n        }\r\n        NeKacAdet.NeKacAdetSoapClient NeKac = new NeKacAdet.NeKacAdetSoapClient();\r\n        private void Form1_Load(object sender, EventArgs e)\r\n        {\r\n            NeKac.SiparisVer(5, &quot;Kalem&quot;);\r\n        }\r\n    }\r\n<\/pre>\n<p>Formumuz y\u00fcklendi\u011fi anda Web Service&#8217;imizdeki &#8220;SiparisVer&#8221; ad\u0131ndaki metodumuzu gerekli parametrelerini doldurup \u00e7a\u011f\u0131r\u0131yoruz.E\u011fer &#8220;C:\/Dosya\/SiparisKayit.txt&#8221; dizinini a\u00e7arsak, dosyam\u0131zda gerekli verilerin kaydedildi\u011fini g\u00f6r\u00fcyoruz.<br \/>\n\u015eimdi SoapHeader ile bu Web Service&#8217;imize g\u00fcvenlik uygulamas\u0131 yapal\u0131m.<br \/>\n\u00d6ncelikle SoapHeader g\u00fcvenli\u011fini almak istiyorsak, Web Service&#8217;imizin bulundu\u011fu projede bir class olu\u015fturmal\u0131 ve bu class\u0131n System.Web.Services.Protocols Namespace&#8217;inde bulunan SoapHeader s\u0131n\u0131f\u0131ndan kal\u0131t\u0131m ald\u0131rmal\u0131y\u0131z.G\u00fcvenlik \u015fartlar\u0131m\u0131z\u0131 bu s\u0131n\u0131fta \u015femaland\u0131rmal\u0131y\u0131z.<\/p>\n<p>\u00d6rne\u011fimize devam edersek e\u011fer; Web Service&#8217;imizin bulundu\u011fu projeye SoapHeaderGuvenlik.cs ad\u0131nda bir s\u0131n\u0131f a\u00e7\u0131yorum ve bu s\u0131n\u0131fa SoapHeader s\u0131n\u0131f\u0131ndan kal\u0131t\u0131m ald\u0131r\u0131yorum.Senaryo olarak sadece kullan\u0131c\u0131 ad\u0131 ve parola alaca\u011f\u0131m i\u00e7in bu iki de\u011feri ta\u015f\u0131yacak propertyleri olu\u015fturuyorum<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    public class SoapHeaderGuvenlik:SoapHeader\r\n    {\r\n        public string KullaniciAdi { get; set; }\r\n        public string Sifre { get; set; }\r\n    }\r\n<\/pre>\n<p>Yukar\u0131da g\u00f6r\u00fc\u011f\u00fcn\u00fcz gibi alaca\u011f\u0131m\u0131z g\u00fcvenli\u011fin \u015fartlar\u0131na uygun iki adet propertyi yazm\u0131\u015f bulunmaktay\u0131z.\u015eimdi NeKacAdet.asmx ad\u0131ndaki Web Service&#8217;imize gelip, olu\u015fturdu\u011fumuz bu class ile nas\u0131l g\u00fcvenlik al\u0131n\u0131yormu\u015f onu inceleyelim.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    &#x5B;WebService(Namespace = &quot;http:\/\/tempuri.org\/&quot;)]\r\n    &#x5B;WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]\r\n    &#x5B;System.ComponentModel.ToolboxItem(false)]\r\n    public class NeKacAdet : System.Web.Services.WebService\r\n    {\r\n        public SoapHeaderGuvenlik KullaniciKontrol;\r\n        \/\/Web Service'imizin bulundu\u011fu projemizde olu\u015fturdu\u011fumuz SoapHeaderGuvenlik.cs s\u0131n\u0131f\u0131ndan bir referans olu\u015fturuyoruz.\r\n        \/\/Dikkat ederseniz nesnesini alm\u0131yoruz.\r\n        &#x5B;WebMethod]\r\n        public bool SiparisVer(int Adet, string UrunAdi)\r\n        {\r\n            if (KullaniciKontrol.KullaniciAdi == &quot;Gencay&quot; &amp;&amp; KullaniciKontrol.Sifre == &quot;123321&quot;)\r\n            {\r\n                StreamWriter SiparisKayit = new StreamWriter(&quot;C:\/Dosya\/SiparisKayit.txt&quot;, true);\r\n                SiparisKayit.WriteLine(&quot;\u00dcr\u00fcn Ad\u0131=&quot; + UrunAdi);\r\n                SiparisKayit.WriteLine(&quot;Urun Adedi=&quot; + Adet);\r\n                SiparisKayit.Close();\r\n                return true;\r\n            }\r\n            return false;\r\n        }\r\n    }\r\n<\/pre>\n<p>G\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi NeKacAdet.asmx Web Service&#8217;imizdeki &#8220;SiparisVer&#8221; ad\u0131ndaki metodumuzu de\u011fi\u015ftiriyoruz.Burada dikkat etmeniz gereken olu\u015fturdu\u011fumuz SoapHeaderGuvenlik.cs ad\u0131ndaki s\u0131n\u0131f\u0131m\u0131zdan bir referans noktas\u0131 al\u0131yoruz.Ancak nesnesini alm\u0131yoruz ve bu referans noktas\u0131n\u0131 kullanarak kullan\u0131c\u0131 ad\u0131 ve \u015fifre kontrol\u00fc yap\u0131yoruz.Burada ben manuel olarak kullan\u0131c\u0131 ad\u0131n\u0131 &#8220;Gencay&#8221; \u015fifreyi ise &#8220;123321&#8221; olarak yazd\u0131m.Sizler bunlar\u0131 parametre olarak alabilirsiniz.<br \/>\nAyriyetten SiparisVer metodu geriye bool tipinde de\u011fer g\u00f6ndermesini istedim.E\u011fer true g\u00f6nderirse, demek ki verilerin kay\u0131d\u0131 yap\u0131lm\u0131\u015f, false ise yap\u0131lmam\u0131\u015f oldu\u011funu anlayaca\u011f\u0131z ve ona g\u00f6re mesaj verdirece\u011fiz.<\/p>\n<p>\u015eimdi bu Web Service&#8217;imizi kulland\u0131\u011f\u0131m\u0131z projemize gelip &#8220;NeKacAdet&#8221; ad\u0131ndaki Web Service&#8217;imize sa\u011f t\u0131klay\u0131p &#8220;Update Service Referance&#8221; diyerek, Web Service&#8217;imizin son versiyonunu g\u00fcncelliyoruz.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n        NeKacAdet.NeKacAdetSoapClient NeKac = new NeKacAdet.NeKacAdetSoapClient();\r\n\r\n        private void Form1_Load(object sender, EventArgs e)\r\n        {\r\n            if (NeKac.SiparisVer(50, &quot;Silgi&quot;))\r\n                MessageBox.Show(&quot;Kay\u0131t Yap\u0131lm\u0131\u015ft\u0131r.&quot;);\r\n            else\r\n            {\r\n                MessageBox.Show(&quot;Kullan\u0131c\u0131 ad\u0131 ve \u015fifrenizi kontrol ediniz.&quot;);\r\n            }\r\n        }\r\n<\/pre>\n<p>E\u011fer bu \u015fekilde kodlar\u0131 \u00e7al\u0131\u015ft\u0131r\u0131rsan\u0131z, &#8220;NullReferanceException&#8221; ad\u0131ndaki hatayla kar\u015f\u0131la\u015facaks\u0131n\u0131z.Bu hata bize<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\nObject reference not set to an instance of an object.\r\n<\/pre>\n<p>mesaj\u0131n\u0131 verecektir.<br \/>\nBu hatay\u0131 vurgulamaya \u00e7al\u0131\u015ft\u0131\u011f\u0131m yeri g\u00f6sterebilmek i\u00e7in nerede verdi\u011finide sizlere g\u00f6stermem laz\u0131m.Bu y\u00fczden a\u015fa\u011f\u0131daki ekran g\u00f6r\u00fcnt\u00fcs\u00fcn\u00fc inceleyiniz.<br \/>\n<a href=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2012\/11\/hata.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-916\" title=\"Hata\" alt=\"Hata\" src=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2012\/11\/hata.jpg\" width=\"683\" height=\"145\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2012\/11\/hata.jpg 683w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2012\/11\/hata-300x63.jpg 300w\" sizes=\"auto, (max-width: 683px) 100vw, 683px\" \/><\/a><br \/>\nG\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi &#8220;SoapHeaderGuvenlik&#8221; tipinden &#8220;KullaniciKontrol&#8221; ad\u0131ndaki, referans\u0131m\u0131zda vermektedir.<br \/>\nBu ne demektir?<br \/>\nBiz &#8220;SoapHeaderGuvenlik.cs&#8221; s\u0131n\u0131f\u0131n\u0131n bir referans\u0131n\u0131 kulland\u0131k ama nesnesini \u00fcretmedik.Bu referans\u0131n i\u00e7indeki g\u00fcvenlik \u015fartlar\u0131 olan kullan\u0131c\u0131 ad\u0131 ve \u015fifresini kontrol edip metodun i\u015flevini ona g\u00f6re de\u011ferlendirdik.Ama nesnesi olu\u015fmam\u0131\u015f bir referans verileri nerde, nas\u0131l, hangi mant\u0131kla tutabilir.Eee o halde bizim bu nesneyi olu\u015fturmam\u0131z gerekiyor.<br \/>\nBu nesneyi &#8220;SiparisVer&#8221; isimli metodumuzu web metod olarak g\u00f6steren [WebMethod] attribute&#8217;un yan\u0131na [SoapHeader(&#8220;ReferansAdi&#8221;)] attribute&#8217;unu yazarak olu\u015fturabiliriz.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n        public SoapHeaderGuvenlik KullaniciKontrol;\r\n        &#x5B;WebMethod]&#x5B;SoapHeader(&quot;KullaniciKontrol&quot;)]\r\n        public bool SiparisVer(int Adet, string UrunAdi)\r\n        {\r\n            if (KullaniciKontrol.KullaniciAdi == &quot;Gencay&quot; &amp;&amp; KullaniciKontrol.Sifre == &quot;123321&quot;)\r\n            {\r\n                StreamWriter SiparisKayit = new StreamWriter(&quot;C:\/Dosya\/SiparisKayit.txt&quot;, true);\r\n                SiparisKayit.WriteLine(&quot;\u00dcr\u00fcn Ad\u0131=&quot; + UrunAdi);\r\n                SiparisKayit.WriteLine(&quot;Urun Adedi=&quot; + Adet);\r\n                SiparisKayit.Close();\r\n                return true;\r\n            }\r\n            return false;\r\n        }\r\n<\/pre>\n<p>Yukar\u0131da g\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi [SoapHeader(&#8220;KullaniciKontrol&#8221;)] attribute&#8217;u sayesinde SoapHeaderGuvenlik tipinden olan KullaniciKontrol referans\u0131na bir nesne ba\u011fl\u0131yoruz.<\/p>\n<p>\u015eimdi tekrardan Web Service&#8217;imizi update ederek projemizde &#8220;SiparisVer&#8221; metodunu inceliyoruz.<br \/>\n<a href=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2012\/11\/siparismetod.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-917\" title=\"siparismetod\" alt=\"\" src=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2012\/11\/siparismetod.jpg\" width=\"703\" height=\"60\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2012\/11\/siparismetod.jpg 703w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2012\/11\/siparismetod-300x25.jpg 300w\" sizes=\"auto, (max-width: 703px) 100vw, 703px\" \/><\/a><br \/>\nG\u00f6r\u00fcnt\u00fcde g\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi, [SoapHeader(&#8220;KullaniciKontrol&#8221;)] attribute&#8217;u sayesinde SoapHeaderGuvenlik tipinden KullaniciKontrol referans\u0131na nesneyi ba\u011flam\u0131\u015ft\u0131k.S\u00f6z konusu attribute &#8220;SiparisVer&#8221; metodunun attribute&#8217;u oldu\u011fu i\u00e7inde, metodu kullan\u0131rken ilk parametre olarak SoapHeaderGuvenlik tipinden otomatik olarak bizden nesne istemektedir.<\/p>\n<p>Buradaki mant\u0131\u011f\u0131 anlaman\u0131z\u0131 istiyorum.[SoapHeader(&#8220;KullaniciKontrol&#8221;)] attribute&#8217;u ile &#8220;SiparisVer&#8221; metodunda SoapHeader g\u00fcvenli\u011fini yapaca\u011f\u0131m\u0131z, SoapHeader s\u0131n\u0131f\u0131ndan kal\u0131t\u0131m alm\u0131\u015f, SoapHeaderGuvenlik ad\u0131ndaki s\u0131n\u0131f\u0131n referans\u0131na nesne ba\u011flatt\u0131r\u0131yoruz.Bu nesneyide bu metodu kullan\u0131rken, proje taraf\u0131ndan kullan\u0131c\u0131dan istemektedir.<\/p>\n<p>\u015eimdi kafalar\u0131n\u0131zdaki soruyu tahmin edebiliyorum.<br \/>\nPeki bu nesneyi Web Service kullan\u0131c\u0131s\u0131 nas\u0131l, nerden bulacakta bu parametreye verecek.<\/p>\n<p>NeKacAdet namespace&#8217;i \u00fczerinden SoapHeaderGuvenlik s\u0131n\u0131f\u0131 \u00fczerinden eri\u015febilece\u011fiz.<br \/>\nA\u015fa\u011f\u0131daki kodlar\u0131 incelersek e\u011fer,<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n        NeKacAdet.NeKacAdetSoapClient NeKac = new NeKacAdet.NeKacAdetSoapClient();\r\n        NeKacAdet.SoapHeaderGuvenlik GuvenlikNesnesi = new NeKacAdet.SoapHeaderGuvenlik();\r\n        \/\/G\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi NeKacAdet namespace'i \u00fczerinden SoapHeaderGuvenlik s\u0131n\u0131f\u0131n\u0131n instance'\u0131n\u0131 ald\u0131k.\r\n        private void Form1_Load(object sender, EventArgs e)\r\n        {\r\n            GuvenlikNesnesi.KullaniciAdi = &quot;Gencay&quot;;\r\n            GuvenlikNesnesi.Sifre = &quot;123321&quot;;\r\n            \/\/Bu instance'\u0131n &quot;KullaniciAdi&quot; ve &quot;Sifre&quot; propertylerine gerekli de\u011ferlerini girdik.\r\n            if (NeKac.SiparisVer(GuvenlikNesnesi,50,&quot;Silgi&quot;))\r\n                MessageBox.Show(&quot;Kay\u0131t Yap\u0131lm\u0131\u015ft\u0131r.&quot;);\r\n            else\r\n            {\r\n                MessageBox.Show(&quot;Kullan\u0131c\u0131 ad\u0131 ve \u015fifrenizi kontrol ediniz.&quot;);\r\n            }\r\n        }\r\n<\/pre>\n<p>Sonu\u00e7 olarak kullan\u0131c\u0131 ad\u0131 ve \u015fifreyi do\u011fru girerseniz &#8220;Kay\u0131t Yap\u0131lm\u0131\u015ft\u0131r.&#8221; mesaj\u0131 alacaks\u0131n\u0131z.Aksi taktirde di\u011fer kay\u0131t i\u015flemi yap\u0131lmayacakt\u0131r.<\/p>\n<p>Evet art\u0131k yaz\u0131m\u0131z\u0131n sonuna gelmi\u015f bulunmaktay\u0131z.Umar\u0131m SoapHeader ile g\u00fcvenlikte a\u015final\u0131\u011f\u0131n\u0131z olmu\u015ftur.<br \/>\nFaydalanman\u0131z dile\u011fiyle..<br \/>\n\u0130yi \u00c7al\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, Web Service uygulamalar\u0131nda g\u00fcvenli\u011fin ne kadar \u00f6nemli oldu\u011funu ve iki t\u00fcrl\u00fc g\u00fcvenlik oldu\u011funu, Web Service Session Bazl\u0131 G\u00fcvenlik yaz\u0131mda bahsetmi\u015ftim.Ba\u015fl\u0131ktanda anla\u015f\u0131laca\u011f\u0131 gibi Session bazl\u0131 g\u00fcvenli\u011fi o yaz\u0131mda anlatm\u0131\u015f bulunmaktay\u0131m. \u015eimdi ise Web Service&#8217;lerde&#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":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[10,12],"tags":[185,279,244],"class_list":["post-915","post","type-post","status-publish","format-standard","hentry","category-asp-net","category-c-sharp-c","tag-guvenlik","tag-soapheader","tag-web-service"],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/915","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=915"}],"version-history":[{"count":0,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/915\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media?parent=915"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/categories?post=915"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/tags?post=915"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}