<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Koray Barkin</title>
    <description>The latest articles on DEV Community by Koray Barkin (@koraybarkin).</description>
    <link>https://dev.to/koraybarkin</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F479865%2Ff2052393-d1f5-42fb-8769-d4ee242bac77.jpg</url>
      <title>DEV Community: Koray Barkin</title>
      <link>https://dev.to/koraybarkin</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/koraybarkin"/>
    <language>en</language>
    <item>
      <title>Liman'da Eklenti Geliştirme</title>
      <dc:creator>Koray Barkin</dc:creator>
      <pubDate>Tue, 27 Oct 2020 11:24:01 +0000</pubDate>
      <link>https://dev.to/koraybarkin/liman-da-eklenti-gelistirme-gpe</link>
      <guid>https://dev.to/koraybarkin/liman-da-eklenti-gelistirme-gpe</guid>
      <description>&lt;p&gt;Bize tanımlanmış IP üzerinden Liman’a giriş yaptıktan sonra &lt;strong&gt;Sistem Ayarları&lt;/strong&gt; sekmesine gelerek &lt;strong&gt;Eklentiler&lt;/strong&gt;’i seçiniz. Eğer burada &lt;strong&gt;Yeni&lt;/strong&gt; sekmesini görmüyorsanız Mert Çelen’in paylaştığı &lt;a href="https://dev.to/liman/eklenti-gelistirme-ortami-kurulumu-3ofm"&gt;rehber&lt;/a&gt;den &lt;strong&gt;Eklenti Geliştirme Ortamı Kurulumu&lt;/strong&gt;nu yapmanız gerekmektedir.&lt;/p&gt;

&lt;p&gt;Yeni butonuna basarak eklentinizin ismini girerek oluşturmaya başlayalım.&lt;/p&gt;

&lt;p&gt;Eklentimizi geliştirmek için eklentiyi bir sunucuya atamamız gerekmektedir. Bu atamayı sol taraftan Sunucular sekmesine giderek yapabiliriz. Açılan ekranda &lt;strong&gt;+&lt;/strong&gt; işaretine basıp eklemek istediğiniz sunucuyu seçiniz. (Eğer görünürde bir sunucunuz yoksa, ilk önce sunucu oluşturmanız gerekmektedir.)&lt;/p&gt;

&lt;p&gt;Liman’da yapacağımız işlemler şimdilik bu kadar. Geliştirme ortamınız da hazırsa Visual Studio Code yardımı ile eklentimizi geliştirebiliriz.&lt;/p&gt;

&lt;p&gt;Visual Studio Code’u açalım ve Remote SSH ile Liman sunucumuza bağlanalım. Bağlandıktan sonra sol üstten &lt;strong&gt;Open Folder&lt;/strong&gt; diyerek &lt;strong&gt;/liman/extensions/&lt;/strong&gt; klasörüne gelip oluşturduğunuz eklentiyi seçiniz. &lt;/p&gt;

&lt;p&gt;Açılan eklentide &lt;strong&gt;view&lt;/strong&gt; klasörü altında bir &lt;strong&gt;functions.php&lt;/strong&gt; ve bir tane de &lt;strong&gt;index.blade.php&lt;/strong&gt; adında iki tane dosyamızın olduğunu göreceğiz. Şimdi, Liman sunucumuzdaki bilgileri ya da sizin bilgisayarınızın bileşenlerinin bilgilerini çektiğimiz bir eklenti yapabiliriz. Aşağıdaki kodu functions.php dosyasına yapıştıralım.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;?php&lt;/span&gt;
&lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;index&lt;/span&gt;&lt;span class="p"&gt;(){&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;view&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"index"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;getHOSTinfo&lt;/span&gt;&lt;span class="p"&gt;(){&lt;/span&gt;
    &lt;span class="nv"&gt;$hostInfo&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;runCommand&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"hostname"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;respond&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$hostInfo&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;getIPinfo&lt;/span&gt;&lt;span class="p"&gt;(){&lt;/span&gt;
    &lt;span class="nv"&gt;$ipInfo&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;runCommand&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"ip a"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;respond&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$ipInfo&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="cp"&gt;?&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Şimdi burada tam olarak neler oluyor? &lt;strong&gt;getHOSTinfo&lt;/strong&gt; fonksiyonunda, içerisinde bulunan runCommand’e &lt;strong&gt;hostname&lt;/strong&gt; değerini gönderdik. Bu komut içerisine gönderdiğimiz değeri sunucumuzda terminal’e yazdığımızda çıkan sonucu döndürmektedir. Terminal’i açıp hostname yazdığımızda sunucumuzun adının yazdığını görürüz. Biz de bu eklentide sunucumuzun adını çağırmak istiyoruz ve çıkan sonucu eklentimize eklemek istiyoruz. Altındaki &lt;strong&gt;getIPinfo&lt;/strong&gt; fonksiyonu da aynı işlemi yapmaktadır, IP bilgilerini öğrenmek için &lt;strong&gt;ip a&lt;/strong&gt; komutunu runCommand’e gönderiyoruz. Ve son olarak da return respond ile eğer gönderdiğimiz HTTP talebinden 200 kodu dönüyorsa bu komutları tanımladığımız değeri gönder diyoruz.&lt;/p&gt;

&lt;p&gt;Şimdi de index.blade.php dosyamıza geçelim. Aşağıda paylaştığım kodu index.blade.php dosyasına yapıştırın.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;ul&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"nav nav-tabs"&lt;/span&gt; &lt;span class="na"&gt;role=&lt;/span&gt;&lt;span class="s"&gt;"tablist"&lt;/span&gt; &lt;span class="na"&gt;style=&lt;/span&gt;&lt;span class="s"&gt;"margin-bottom: 15px;"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;li&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"nav-item"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"nav-link active"&lt;/span&gt; &lt;span class="na"&gt;onclick=&lt;/span&gt;&lt;span class="s"&gt;"getIP()"&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"#ipTab"&lt;/span&gt; &lt;span class="na"&gt;data-toggle=&lt;/span&gt;&lt;span class="s"&gt;"tab"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;IP Bilgileri&lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/li&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;li&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"nav-item"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"nav-link"&lt;/span&gt; &lt;span class="na"&gt;onclick=&lt;/span&gt;&lt;span class="s"&gt;"getHost()"&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"#hostTab"&lt;/span&gt; &lt;span class="na"&gt;data-toggle=&lt;/span&gt;&lt;span class="s"&gt;"tab"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Host Bilgileri&lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/li&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/ul&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"tab-content"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"ipTab"&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"tab-pane active"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;pre&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"ipPre"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/pre&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;

    &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"hostTab"&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"tab-pane"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;pre&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"hostPre"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/pre&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;script&amp;gt;&lt;/span&gt;
&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;getIP&lt;/span&gt;&lt;span class="p"&gt;(){&lt;/span&gt;
  &lt;span class="nx"&gt;request&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;API&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;getIPinfo&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;FormData&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
    &lt;span class="nx"&gt;msg&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;parse&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;message&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nx"&gt;$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;#ipPre&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;html&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;msg&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;HATA!&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;getHost&lt;/span&gt;&lt;span class="p"&gt;(){&lt;/span&gt;
  &lt;span class="nx"&gt;request&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;API&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;getHOSTinfo&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;FormData&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
    &lt;span class="nx"&gt;msg&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;parse&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;message&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nx"&gt;$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;#hostPre&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;html&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;msg&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;HATA!&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;location&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;hash&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;""&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
    &lt;span class="nx"&gt;getIP&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/script&amp;gt;&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Verimizi direkt yazdırmamız mümkün, fakat daha şık bir görüntü olsun diye Tab’lı yapıda veriyi kullanmak istedim. Şimdi ise &lt;strong&gt;getIP&lt;/strong&gt; ve &lt;strong&gt;getHost&lt;/strong&gt; fonksiyonlarında neler döndüğünü inceleyelim. İki fonksiyonda da sunucumuza request (talep) gönderiyoruz. Endpoint URL’mizin sonuna function.php’de yazdığımız fonksiyonların adını yazdığımızda orada dönen verinin JSON biçimin de döndüğünü görebiliriz. Biz de bir FormData oluşturarak, eğer requestimizden bir response dönüyorsa veriyi parse et ve sadece message başlığını döndür diyoruz ve bu mesajı yukarıda belirttiğimiz id’ye gönderiyoruz. Eğer response dönmüyorsa, ikinci satıra gir ve konsola Hata! yaz dedik. Bunu da debug yaparken response’un durumunu takip etmek için kullanabiliriz. &lt;/p&gt;

&lt;p&gt;Son olarak da if(location.hash === “”) diyerek sayfa yüklendiğinde index’te ise yüklemesini istediğimiz fonksiyonu yazıyoruz. Yani eklentiyi ilk açtığımızda karşımız IP bilgileri gözükecek.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Python ile Liman API Kullanımı</title>
      <dc:creator>Koray Barkin</dc:creator>
      <pubDate>Tue, 20 Oct 2020 08:47:20 +0000</pubDate>
      <link>https://dev.to/koraybarkin/python-ile-liman-api-kullanimi-1g8h</link>
      <guid>https://dev.to/koraybarkin/python-ile-liman-api-kullanimi-1g8h</guid>
      <description>&lt;p&gt;Liman sunucunuzda oluşturduğunuz sunucu, anahtar, modül, talep ve bildirimler gibi verilere ulaşabildiğiniz Liman API dokümantasyonuna buradan ulaşabilirsiniz:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://api.liman.dev"&gt;https://api.liman.dev&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Yukarıda paylaştığım dokümantasyonda, Liman API’ı yardımı ile gönderdiğiniz parametreye bağlı olarak birden fazla veriye erişmek mümkün. &lt;/p&gt;

&lt;p&gt;Örnek olarak, Liman’a giriş yapıp bir Erişim Anahtarı oluşturalım. Sol taraftaki menüden &lt;strong&gt;"Erişim Anahtarı"&lt;/strong&gt; seçeneğini seçip, gelen ekranda &lt;strong&gt;“Oluştur”&lt;/strong&gt; butonuna basarak bir anahtar oluşturalım.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--iLt0j5dK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.hizliresim.com/akolvE.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--iLt0j5dK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.hizliresim.com/akolvE.png" alt="lisans-gorsel" width="880" height="333"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Anahtarınıza isim tanımladıktan sonra, otomatik bir şekilde size Token başlığı altında size özel bir anahtar oluşturulacak. &lt;/p&gt;

&lt;p&gt;Şimdi ise bir Python dosyası yaratalım ve içerisine aşağıdaki kodu yapıştıralım.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;requests&lt;/span&gt;
&lt;span class="n"&gt;myToken&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;'KEY'&lt;/span&gt;
&lt;span class="n"&gt;myUrl&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;'https://IP/profil/anahtarlarim'&lt;/span&gt;
&lt;span class="n"&gt;head&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s"&gt;'liman-token'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;myToken&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"Accept"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s"&gt;"application/json"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;myUrl&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;head&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;verify&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;False&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Request modülü eğer bilgisayarınızda yüklü değilse pip paket yöneticisi ile request modülünü bilgisayarınıza kurabilirsiniz.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install &lt;/span&gt;request
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Kodumuzda request.get metodu, ilk parametre olarak hedef URL’yi almaktadır. Bu noktada sizin Liman’a giriş yaptığınız IP’yi yazmanız gerekmektedir. (Örneğin; &lt;a href="https://192.168.0.0/profil/anahtarlarim"&gt;https://192.168.0.0/profil/anahtarlarim&lt;/a&gt;) İkinci parametre olarak headers'ı gönderiyoruz. Headers'ın içindeki liman-token parametresine, Liman sunucumuzda bize tanımlanan anahtarı tanımlıyoruz. Bu parametreyi API'ı kullanma amacımıza göre &lt;a href="https://api.liman.dev"&gt;https://api.liman.dev&lt;/a&gt; linkinde yer alan parametreleri kullanarak değiştirebiliriz. Biz bu örnekte anahtar bilgilerine ulaşmak istiyoruz bu yüzden &lt;strong&gt;liman-token&lt;/strong&gt; parametresini gönderiyoruz. Son olarak, bize dönen verinin JSON metni biçiminde dönmesini istediğimiz için &lt;strong&gt;"Accept":"application/json"&lt;/strong&gt; değerini eklememiz gerekmektedir. Eğer bunu tanımlamazsak varsayılan olarak hedef verinin bulunduğu URL'nin HTML kodu dönecektir. &lt;/p&gt;

&lt;p&gt;En sondaki &lt;strong&gt;verify=False&lt;/strong&gt; yazmamızın sebebi ise, sertifika ile alakalı bir hata alırsanız sertifika yüklemek yerine sertifika kontrolünü kapatarak alınan hatanın önüne geçmektir. &lt;/p&gt;

&lt;p&gt;Son olarak request.get’e eşitlediğimiz response’u printleyerek dönen HTTP kodunu görebiliriz &lt;strong&gt;print(response)&lt;/strong&gt;. Eğer &lt;strong&gt;200&lt;/strong&gt; kodu dönüyorsa API’ımız başarıyla çalışıyor demektir.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Linux tabanlı işletim sistemleri ile Flutter'a Giriş</title>
      <dc:creator>Koray Barkin</dc:creator>
      <pubDate>Fri, 16 Oct 2020 09:36:16 +0000</pubDate>
      <link>https://dev.to/koraybarkin/linux-tabanli-isletim-sistemleri-ile-flutter-a-giris-3o24</link>
      <guid>https://dev.to/koraybarkin/linux-tabanli-isletim-sistemleri-ile-flutter-a-giris-3o24</guid>
      <description>&lt;p&gt;Bir önceki seride Flutter’ın ne olduğunu ve ne amaçla kullanıldığını sizinle paylaşmıştım. Eğer o dokümanı okumadıysanız yukarıdaki serinin ilk başlığına tıklayarak Flutter hakkında bilgi edinebilirsiniz. Bu dokümanda ise Linux işletim sistemi kullanıcılarının Flutter’ı nasıl kurabileceklerini ve nasıl kullanabileceklerini anlatacağım ilk önce kurulum ile başlayalım.&lt;/p&gt;

&lt;h2&gt;
  
  
  Başlıklar
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Linux işletim sistemine Fluter kurulumu&lt;/li&gt;
&lt;li&gt;Flutter SDK (Software Development Kit) Kurulumu&lt;/li&gt;
&lt;li&gt;Flutter Geliştirme Ortamı Kurulumu&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Linux işletim sistemine Fluter kurulumu&lt;/strong&gt; &lt;a&gt;&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Öncelikle Flutter’ı kurmak için aşağıda belirttiğim gereksinimleri karşılayabiliyor olmanız gerekmektedir:&lt;/p&gt;

&lt;p&gt;• İşletim Sistemi: Linux (64-bit)&lt;br&gt;
• Disk Alanı: 600MB (IDE ve geliştirme araçları dahil değildir)&lt;br&gt;
• Araçlar: Flutter geliştirmeniz için aşağıdaki komut satırı araçlarını kullanabiliyor olmanız gerekmektedir. Bunların birçoğu Linux içerisinde yüklüdür. Fakat daha önce kullanmadıysanız Git kurmanız gerekmektedir.&lt;/p&gt;

&lt;p&gt;• bash&lt;br&gt;
• curl&lt;br&gt;
• file&lt;br&gt;
• git 2.x&lt;br&gt;
• mkdir&lt;br&gt;
• rm&lt;br&gt;
• unzip&lt;br&gt;
• which&lt;br&gt;
• xz-utils&lt;br&gt;
• zip&lt;/p&gt;
&lt;h3&gt;
  
  
  &lt;strong&gt;Flutter SDK (Software Development Kit) Kurulumu&lt;/strong&gt; &lt;a&gt;&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Flutter’ı Linux’ta iki farklı şekilde kurabilirsiniz. &lt;br&gt;
&lt;strong&gt;1) Snapd kullanarak kurulum&lt;/strong&gt;&lt;br&gt;
En kolay kurulum yolu olan snapd ile yüklemek için önce snapd paket yöneticisine sahip olmanız gerekmektedir. Eğer bilgisayarınızda snapd yüklü değilse buradan yükleyebilirsiniz.&lt;br&gt;
Eğer yüklüyse Terminal’i açıp aşağıdaki komutu yazmanız Flutter SDK’ini indirmeniz için yeterli olacaktır.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;snap &lt;span class="nb"&gt;install &lt;/span&gt;flutter &lt;span class="nt"&gt;--classic&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;2) Manuel olarak kurulum&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;1)&lt;/strong&gt; Eğer snapd yoksa veya manuel olarak yüklemek istiyorsanız, aşağıdaki linkten güncel versiyonunu indirebilirsiniz. (Install Flutter manually başlığı altında flutter_linux_1.22.1-stable.tar.xz adlı dosyayı indirmeniz gerekmektedir.)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Manuel kurulum linki:&lt;/strong&gt; &lt;a href="https://flutter.dev/docs/get-started/install/linux" rel="noopener noreferrer"&gt;https://flutter.dev/docs/get-started/install/linux&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2)&lt;/strong&gt; İndirdiğiniz dosyaları istediğiniz konuma çıkartın.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; ~/development
&lt;span class="nb"&gt;tar &lt;/span&gt;xf ~/Downloads/flutter_linux_1.22.1-stable.tar.xz
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;3)&lt;/strong&gt; Flutter araçlarını path’inize ekleyin.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;PATH&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$PATH&lt;/span&gt;&lt;span class="s2"&gt;:&lt;/span&gt;&lt;span class="sb"&gt;`&lt;/span&gt;&lt;span class="nb"&gt;pwd&lt;/span&gt;&lt;span class="sb"&gt;`&lt;/span&gt;&lt;span class="s2"&gt;/flutter/bin"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;4)&lt;/strong&gt; Eğer bu adıma kadar herhangi bir sorun yaşamadıysanız aşağıdaki komutu çalıştırdığınızda bilgisayarınızda Flutter’ın ve gerekli araçların yüklü olup olmadığını denetleyebilirsiniz.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;flutter doctor
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Bu adıma kadar Flutter’ı başarıyla kurduk, şimdi sırada geliştirme ortamını kurmakta.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fflutter%2Fwebsite%2Fmaster%2Fsrc%2F_assets%2Fimage%2Ftools%2Fandroid-studio%2Fhot-reload.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fflutter%2Fwebsite%2Fmaster%2Fsrc%2F_assets%2Fimage%2Ftools%2Fandroid-studio%2Fhot-reload.gif" alt="lisans-gorsel"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Flutter Geliştirme Ortamı Kurulumu&lt;/strong&gt; &lt;a&gt;&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Flutter’da geliştirdiğimiz uygulamaları test ve debug edebilmek için bir sanal makineye ihtiyacımız var. Bunun için Android Studio yükleyip, hem kodumuzu orada yazabilir hem de Android Studio’nun AVM (Android Virtual Machine) eklentisini kullanabiliriz. Fakat Android Studio biraz yavaş çalışan bir derleyici olduğu için ve bilgisayarımızda fazla yer kapladığı için çok tercih etmiyorum. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Visual Studio Code&lt;/strong&gt;&lt;br&gt;
VS Code uygulamasının Dart ve Flutter uzantısını yükleyip geliştirmemizi buradan yapabiliriz. Yazdığımız kodu çalıştırmak için Android Studio’nun AVM’sini ya da ayrıca kurduğunuz bir sanal makineyi kullanabiliriz. Eğer Android Studio kullanmak istemiyorsanız Linux için önerilen &lt;strong&gt;Genymotion&lt;/strong&gt; ve &lt;strong&gt;Andro VM&lt;/strong&gt; sanal uygulamarını kullanabilirsiniz. &lt;/p&gt;

&lt;p&gt;Açtığınız sanal makine VS Code uygulamasında sağ alt kısımda yazmaktadır. Eğer herhangi bir sanal makine göremiyorsanız şuan VS Code uygulamasının gördüğü bir sanal aygıt olmadığı için çalıştırırken hata alırsınız. VS Code uygulaması bir derleyici değil, düzenleyici olmasına ragmen bir cihaz bağladığımız takidrde uygulamamızı debug edebilir, çalıştırabiliriz. Hem hızlı bir kullanım imkanı hem de bilgisayarınızda disk alanı açısından avantaj sağlar.&lt;/p&gt;

&lt;p&gt;Flutter uygulamanızı çalıştırmak için herhangi bir derleyiciye ihtiyacınız yoktur. Terminal’den projenizin olduğu dosyaya gidip aşağıdaki komutu çalıştırdığınızda bilgisayarınızda açık bulunan sanal aygıtta geliştirdiğiniz projeyi çalıştırabilirsiniz.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;flutter run
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
    </item>
    <item>
      <title>Flutter Nedir? Nasıl kullanılır?</title>
      <dc:creator>Koray Barkin</dc:creator>
      <pubDate>Thu, 15 Oct 2020 08:26:12 +0000</pubDate>
      <link>https://dev.to/koraybarkin/flutter-nedir-nasil-kullanilir-h2k</link>
      <guid>https://dev.to/koraybarkin/flutter-nedir-nasil-kullanilir-h2k</guid>
      <description>&lt;h2&gt;
  
  
  Başlıklar
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Flutter Nedir?&lt;/li&gt;
&lt;li&gt;Flutter'ı Nasıl Öğrenebilirim?&lt;/li&gt;
&lt;li&gt;Flutter’ı hangi Compiler (derleyici) ile yazabilirim?&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Flutter Nedir?&lt;/strong&gt; &lt;a&gt;&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Son günlerde bir hayli duyduğumuz Flutter’ı bu kadar önemli kılan nedir bugün hep beraber öğreneceğiz. Mobil uygulama geliştirirken bildiğiniz üzere iOS ve Android işletim sistemli cihazlar için ayrı kod yazmamız gerekmektedir. iOS için Objective-C ve Swift kullanılırken, Android için Java ya da Kotlin popüler olarak kullanılmaktadır. Peki bu durumun bize açtığı sorunlar neler?&lt;/p&gt;

&lt;p&gt;• Bir güncelleme yaparken her bir platform için iki farklı koda da güncellemeyi eklemek.&lt;br&gt;
• Kullanıcı ara yüzleri farklı olduğu için ayrıca görselleştirme gerekmektedir.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmiro.medium.com%2Fmax%2F700%2F1%2AxPbvSk1vPNoUWP6FI_O2Hg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmiro.medium.com%2Fmax%2F700%2F1%2AxPbvSk1vPNoUWP6FI_O2Hg.png" alt="lisans-gorsel"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Fakat Google’ın çıkardığı Dart dilinin kütüphanesi olan Flutter sayesinde geliştiriciler hem iOS hem de Android işletim sistemli cihazlarda bir kod üzerinden geliştirme yapabilmektedirler. Böylece geliştiriciler hem maliyetten hem de zamandan tasarruf edebilirler. Dart bilmiyorsanız bu problem değil, Dart’ın syntax’i Java’ya ve Kotlin’e oldukça benzemektedir. Eğer daha önce bu diller ile az da olsa bir tecrübeniz varsa kolaylıkla öğrenebilirsiniz. &lt;/p&gt;

&lt;p&gt;1980’lerde Python geleceğin en önemli programlama dili olacak denildiğinde bunu söyleyenlerin çok da yanılmadığını söyleyebiliriz. Şu anda en popüler dil olan Python birçok alanda sıklıkla kullanılmaktadır. Şu anda ise, Google geliştiricileri bundan 5 yıl sonrasında Flutter’ın oldukça popüler olacağını söylüyorlar. Şu anda Google Play ve AppStore’da bulunan uygulamaların çoğu alışagelmiş sistem programlama üzerine kurulmuş olsa da siz yeni bir uygulama geliştiriyorsanız Flutter üzerinden geliştirmenizde fayda var.&lt;/p&gt;

&lt;p&gt;• Flutter’ın Hot Reload, Live Reload gibi kullanıcılara geliştirme aşamasında hızlı bir test imkânı sunması.&lt;br&gt;
• Kolay ve anlaşılır bir şekilde geliştirme ortamına sahip olması.&lt;br&gt;
• Yeni, modern kullanıcı ara yüzü tasarımlarına sahip olması.&lt;br&gt;
• Cupertino Widgetları, zengin API’ları ve cross-platform özelliği.&lt;br&gt;
• Linux, Windows ve Mac üzerinden rahatlıkla geliştirilebilir.&lt;/p&gt;

&lt;p&gt;Ve benzeri özellikle şüphesiz Flutter’ı öğrenmemiz için yeterli nedenler.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.freecodecamp.org%2Fnews%2Fcontent%2Fimages%2F2020%2F07%2Fflutter-app-example.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.freecodecamp.org%2Fnews%2Fcontent%2Fimages%2F2020%2F07%2Fflutter-app-example.gif" alt="lisans-gorsel"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Flutter’ı nasıl öğrenebilirim?&lt;/strong&gt; &lt;a&gt;&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Şu anda güncel olarak Udemy’den aldığım kursu yarılamış bulunmaktayım ve oldukça memnun olduğu söyleyebilirim. Sizinle aldığım dersleri, kullandığım kaynakları ve takip ettiğim YouTube kanallarını aşağıda paylaşacağım. &lt;br&gt;
&lt;strong&gt;Udemy kursu:&lt;/strong&gt; &lt;a href="https://www.udemy.com/course/learn-flutter-dart-to-build-ios-android-apps/" rel="noopener noreferrer"&gt;https://www.udemy.com/course/learn-flutter-dart-to-build-ios-android-apps/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Bu kursu kesinlikle tavsiye ederim. Giriş seviyesinden başlayıp en ince detayına kadar son seviyeye kadar 41 saatlik bir eğitim imkânı sunuyor. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Yararlı kaynaklar:&lt;/strong&gt;&lt;br&gt;
• &lt;a href="https://fluttergems.dev" rel="noopener noreferrer"&gt;https://fluttergems.dev&lt;/a&gt;&lt;br&gt;
• &lt;a href="https://flutter.dev" rel="noopener noreferrer"&gt;https://flutter.dev&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Bu sitelerden Flutter ile ilgili yeni bilgiler öğrenebilir, özelliklerini, widgetlarını keşfedebilirsiniz.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;YouTube kanalı:&lt;/strong&gt; The Flutter Way&lt;br&gt;
&lt;a href="https://www.youtube.com/channel/UCJm7i4g4z7ZGcJA_HKHLCVw" rel="noopener noreferrer"&gt;https://www.youtube.com/channel/UCJm7i4g4z7ZGcJA_HKHLCVw&lt;/a&gt;&lt;br&gt;
Bu kanalda tasarımını çok beğendiğim modern ve yaratıcı kullanıcı ara yüzleri tasarımlarını göstermektedir. Siz de izleyip, kendinize göre dilediğiniz değişiklikleri yapabilirsiniz gayet verimli bir kanal.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Flutter’ı hangi Compiler (derleyici) ile yazabilirim?&lt;/strong&gt; &lt;a&gt;&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Flutter’ı kullanan geliştiriciler ya Android Studio ya da Visual Studio Code’u yaygın olarak kullanmaktadır. Fakat daha önceden kullanmış olanlarınız biliyordur, Android Studio’nun derlemesi biraz vakit alır ve yavaş çalışan bir uygulama geliştirme ortamıdır. Benim tavsiyem, VS Code indirip, Dart ve Flutter eklentilerini yüklemeniz. Fakat mobil uygulama geliştiriyorsanız uygulamanızın çalıştığını görmeniz için Android Studio AVM (Android Virtual Machine)’e ihtiyacınız vardır bu yüzden eğer Windows’ta uygulama geliştiriyorsanız Android Studio’yu her hâlükârda yüklemeniz gerekmektedir. Fakat Mac’te geliştiriyorsanız VS Code’da yazıp, XCode’un sanal telefonunu test etmek için kullanabilirsiniz, Android Studio yüklemeniz gerekmemektedir. Linux kullanıcıları için ise, Android Studio ya da herhangi bir Android Emulatörü indirip test etmek için kullanabilirsiniz. Linux için önerilen en popüler sanal makineler &lt;strong&gt;Genymotion&lt;/strong&gt; ve &lt;strong&gt;Andro VM&lt;/strong&gt; tercih edilmektedir.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Golang nedir? Golang ile REST API Geliştirme</title>
      <dc:creator>Koray Barkin</dc:creator>
      <pubDate>Mon, 12 Oct 2020 09:44:59 +0000</pubDate>
      <link>https://dev.to/koraybarkin/golang-nedir-golang-ile-rest-api-gelistirme-13ji</link>
      <guid>https://dev.to/koraybarkin/golang-nedir-golang-ile-rest-api-gelistirme-13ji</guid>
      <description>&lt;h2&gt;
  
  
  Başlıklar
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Golang Nedir?&lt;/li&gt;
&lt;li&gt;Golang Kurulum&lt;/li&gt;
&lt;li&gt;Golang ile REST API Geliştirme&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Golang Nedir?&lt;/strong&gt; &lt;a&gt;&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Go programlama dili, Google tarafından geliştirilmiş “büyük projelerdeki yazılım tecrübeleri” ile belirlenmiş bir dildir. Her programlama dilinin kendine ait bir çalışma alanında avantajları vardır. Go dilinin geliştirilmesi, Google’ın az dil özelliği kuralıyla esnek, hızlı, performanslı ve güçlü bir dil oluşturmaktır. Kısacası asıl amaç hızlı bir şekilde işlem yapmak, bu işlemleri yaparken de performanstan feragat etmemektir.&lt;/p&gt;

&lt;p&gt;Go tamamen açık kaynak kodlarına sahip bir programlama dilidir. Bu yüzden Go dilini kullanan diğer şirketlerin geliştiricileri tavsiyesinde de Go diline eklemeler ve çıkarmalar yapılmaktadır. Fakat asıl amaç hızlı ve efektif bir şekilde geliştirme yapmak olduğu için, çoğu dilde olan Generics gibi bazı özelliklerin olmadığını gözlemleyebiliriz. Go dilinde neden Generics olmadığı sorulduğunda bu dili geliştiren Google geliştiricilerinin, “Generics performanslı ve hızlı değil, henüz bunun için bir çözüm bulamadık. Bulursak ekleriz.” Dediği öğrenildi. Bu da dilde performans ve hıza ne kadar önem verdiklerinin kısa bir özeti diyebiliriz.&lt;/p&gt;

&lt;p&gt;Network ve Web Aplikasyonları geliştirmede büyük önem taşımaktadır. Oldukça verimli ve compile etmesi çok hızlı bir dil olduğu için geliştiriciler Go dilini sistem yönetiminde sıklıkla kullanmaktadır.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Golang Kurulum&lt;/strong&gt; &lt;a&gt;&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Go dilini nasıl kuracağınızı bilmiyorsanız, aşağıdaki linkten işletim sisteminize göre uygun yükleme seçeneklerine ulaşabilirsiniz:&lt;br&gt;
Golang kurulum: &lt;a href="https://golang.org/doc/install"&gt;https://golang.org/doc/install&lt;/a&gt; &lt;/p&gt;
&lt;h3&gt;
  
  
  &lt;strong&gt;Go ile REST API Geliştirme&lt;/strong&gt; &lt;a&gt;&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Şimdi localhost’umuzda HTTP requestleri ile çalışan basit bir API geliştirelim. İlk olarak main.go isimli dosyamızı oluşturalım. Bu dosya içerisine aşağıdaki kodu yapıştıralım. Bu kodumuzda görmüş olduğunuz gibi 3 farklı fonksiyon bulunmaktadır. Bunlardan &lt;strong&gt;homePage&lt;/strong&gt; fonksiyonu root’taki URL requestlerinden sorumludur, &lt;strong&gt;handleRequests&lt;/strong&gt; fonksiyonu ise URL ile tanımlanan fonksiyonu eşleştirir.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight go"&gt;&lt;code&gt;&lt;span class="k"&gt;package&lt;/span&gt; &lt;span class="n"&gt;main&lt;/span&gt;

&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="s"&gt;"fmt"&lt;/span&gt;
    &lt;span class="s"&gt;"log"&lt;/span&gt;
    &lt;span class="s"&gt;"net/http"&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;func&lt;/span&gt; &lt;span class="n"&gt;homePage&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;w&lt;/span&gt; &lt;span class="n"&gt;http&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ResponseWriter&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;r&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;http&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Request&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
    &lt;span class="n"&gt;fmt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Fprintf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;w&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"Welcome to the HomePage!"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;fmt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Endpoint Hit: homePage"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;func&lt;/span&gt; &lt;span class="n"&gt;handleRequests&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;http&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;HandleFunc&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"/"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;homePage&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;log&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Fatal&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;http&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ListenAndServe&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;":10000"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="no"&gt;nil&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;func&lt;/span&gt; &lt;span class="n"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;handleRequests&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Yeni bir eklenti geliştirmek istedik bundan sonra ne yapacağız? Yukarıda anlattığım gibi, bir veriyi göndermek istiyorsanız yapacağınız işlemleri bir fonksiyon içerisinde tamamlayıp, handleRequest fonksiyonunda &lt;strong&gt;http.HandleFunc("/", xxx)&lt;/strong&gt; şeklinde URL uzantısını ekleyip veriyi gönderebiliriz. &lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Dinamik Veri Aktarımı&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Golang ile Web API geliştirmeyi öğrendiğimize göre şimdi de dinamik bir şekilde veri nasıl aktarılır onu inceleyebiliriz. Dinamik veri aktarımı ile ilgili iki farklı yaklaşım bulunmaktadır. Birincisi çoğu yerde bulabileceğiniz fonksiyon içerisinde bir structure açıp, veriyi içerisinde saklamanız. İkinci yöntem ise structure gerektirmeyen verileri kolayca işlememize yarayan Gabs. Gabs, dinamik ya da bilinmeyen JSON yapıları ile uğraşırken büyük yarar sağlamaktadır. &lt;/p&gt;

&lt;p&gt;Gabs'in yüklenmesi&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;go get github.com/Jeffail/gabs
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Yükledikten sonra import edip, kullanmaya başlayabiliriz.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight go"&gt;&lt;code&gt;&lt;span class="k"&gt;package&lt;/span&gt; &lt;span class="n"&gt;main&lt;/span&gt;

&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="s"&gt;"fmt"&lt;/span&gt;

    &lt;span class="s"&gt;"github.com/Jeffail/gabs"&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;func&lt;/span&gt; &lt;span class="n"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;data&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;&lt;span class="kt"&gt;byte&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;`{
        "employees":{
           "protected":false,
           "address":{
              "street":"22 Saint-Lazare",
              "postalCode":"75003",
              "city":"Paris",
              "countryCode":"FRA",
              "country":"France"
           },
           "employee":[
              {
                 "id":1,
                 "first_name":"Jeanette",
                 "last_name":"Penddreth"
              },
              {
                 "id":2,
                 "firstName":"Giavani",
                 "lastName":"Frediani"
              }
           ]
        }
     }`&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="n"&gt;jsonParsed&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;err&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="n"&gt;gabs&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ParseJSON&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;err&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="no"&gt;nil&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nb"&gt;panic&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;err&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="c"&gt;//JSON Aramasi &lt;/span&gt;
    &lt;span class="n"&gt;fmt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Get value of Protected:&lt;/span&gt;&lt;span class="se"&gt;\t&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;jsonParsed&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Path&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"employees.protected"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Data&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
    &lt;span class="n"&gt;fmt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Get value of Country:&lt;/span&gt;&lt;span class="se"&gt;\t&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;jsonParsed&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Search&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"employees"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"address"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"country"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Data&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
    &lt;span class="n"&gt;fmt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"ID of first employee:&lt;/span&gt;&lt;span class="se"&gt;\t&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;jsonParsed&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Path&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"employees.employee.0.id"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
    &lt;span class="n"&gt;fmt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Check Country Exists:&lt;/span&gt;&lt;span class="se"&gt;\t&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;jsonParsed&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Exists&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"employees"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"address"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"countryCode"&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;

    &lt;span class="c"&gt;// adres objelerinin yinelenmesi&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;child&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="k"&gt;range&lt;/span&gt; &lt;span class="n"&gt;jsonParsed&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Search&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"employees"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"address"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ChildrenMap&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;fmt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Printf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Key=&amp;gt;%v, Value=&amp;gt;%v&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;child&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Data&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="c"&gt;// employee arrayinin yinelenmesi &lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;_&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;child&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="k"&gt;range&lt;/span&gt; &lt;span class="n"&gt;jsonParsed&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Search&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"employees"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"employee"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Children&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;fmt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;child&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Data&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="c"&gt;// aramada indexin kullanilmasi &lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;_&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;child&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="k"&gt;range&lt;/span&gt; &lt;span class="n"&gt;jsonParsed&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Search&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"employees"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"employee"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"0"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Children&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;fmt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;child&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Data&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Yukarıdaki kodumuzda görmüş olduğunuz gibi data adında bir array açtık ve verimizi bu array içerisinde tutuyoruz. Fakat bu verimiz JSON encoding biçiminde tutulduğu için arraydeki değerlerimizi parselamamız gerekmektedir.&lt;/p&gt;

&lt;p&gt;Verimizi bir database'den çekmiyoruz, statik olarak fonksiyon içerisinde tanımladık fakat dinamik bir şekilde verimizi çağırıyoruz. Eğer bir database ya da kullanıcı input'u ile veri çağırmamız gerekseydi de işlemlerimiz hemen hemen aynı olacaktı. &lt;/p&gt;

&lt;p&gt;Yukardaki işlemleri gerçekleştirdikten sonra çalıştırdığımızda bu şekilde bir output'a ulaşabiliriz:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Get value of Protected:  false
Get value of Country:    France
ID of first employee:    1
Check Country Exists:    true
Key=&amp;gt;street, Value=&amp;gt;22 Saint-Lazare
Key=&amp;gt;postalCode, Value=&amp;gt;75003
Key=&amp;gt;city, Value=&amp;gt;Paris
Key=&amp;gt;countryCode, Value=&amp;gt;FRA
Key=&amp;gt;country, Value=&amp;gt;France
map[id:1 first_name:Jeanette last_name:Penddreth]
map[id:2 firstName:Giavani lastName:Frediani]
Jeanette
Penddreth
1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Böylece data arrayinde tanımladığımız verileri işleyip (JSON Parsing), key:value kombinasyonu ile kolaylıkla ulaşabildik. &lt;/p&gt;

</description>
    </item>
    <item>
      <title>Dinamik Web API geliştirme (Python &amp; Flask)</title>
      <dc:creator>Koray Barkin</dc:creator>
      <pubDate>Fri, 09 Oct 2020 09:21:59 +0000</pubDate>
      <link>https://dev.to/koraybarkin/dinamik-web-api-gelistirme-python-flask-1dhm</link>
      <guid>https://dev.to/koraybarkin/dinamik-web-api-gelistirme-python-flask-1dhm</guid>
      <description>&lt;h2&gt;
  
  
  Başlıklar
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;API Nedir?&lt;/li&gt;
&lt;li&gt;Web API Nedir?&lt;/li&gt;
&lt;li&gt;Kurulum&lt;/li&gt;
&lt;li&gt;Dinamik Web API Geliştirme&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;API Nedir?&lt;/strong&gt; &lt;a&gt;&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;API yani Application Programming Interface’in Türkçe karşılığı Uygulama Geliştirme Ara yüzü anlamına gelmektedir. Kişinin elindeki verileri dış dünyaya açarak diğer uygulama ve platformların kullanımına belli kurallar ve tanımlamalar çerçevesinde sunduğu ara yüzdür.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Web API Nedir?&lt;/strong&gt; &lt;a&gt;&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Birden fazla end user’ın bilgisayarlar, web tarayıcıları, akıllı telefonlar, tabletler vs. aracılığı HTTP protokolleri üzerinden haberleşelebilen bir servis oluşturmak için kullanılan bir framework olarak çalışmaktadır.&lt;br&gt;
HTTP’nin tüm özelliklerini (URI, Request/Response headers, caching yani önbelleğe alma, versiyonlama, çeşitli içerik formatları gibi özellikler)  kullanabilen, HTTP üzerinde kaynak odaklı servisler oluşturmak istediğinizde Web API kullanmanız daha sağlıklıdır.&lt;/p&gt;
&lt;h3&gt;
  
  
  &lt;strong&gt;Kurulum&lt;/strong&gt; &lt;a&gt;&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Öncelikle Python’da oldukça popüler olan pip3 paket yöneticisini kuralım. Eğer pip3 yüklüyse bu adımı geçebilirsiniz.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt-get &lt;span class="nb"&gt;install &lt;/span&gt;python3-pip
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Şimdi ise pip ile Flask kurmaya hazırız.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install &lt;/span&gt;flask
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Kurulumumuzu tamamladık, şimdi bu dökümanda ne yapacağımızdan kısaca bir bahsedelim.&lt;/p&gt;

&lt;p&gt;Daha önce flask ile Web API yapıp, statik bir şekilde veri aktarmayı işlemiştik. Eğer o dokümanı görmediyseniz &lt;a href="https://dev.to/koraybarkin/python-ve-flask-kullanarak-web-api-gelistirme-5ed7"&gt;buradan&lt;/a&gt; ulaşabilirsiniz.&lt;/p&gt;

&lt;p&gt;Şimdi ise dinamik bir şekilde hem URL hem de veriyi alan bir Web API yapalım. Bu API’da Google Maps’in API’ını da kullanacağız. &lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Dinamik Web API Geliştirme&lt;/strong&gt; &lt;a&gt;&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Şimdi ise gönderilen konuma göre Google Maps’in API’ından harita ve konum görüntüsünü yansıtan bir API yapalım. Dünyadaki tüm şehirlerin harita görüntüsünü elimizde tutmamız neredeyse imkansız. Bu nedenle bu tarz bir geliştirmeyi statik olarak yapmamız olanaksız. Neyse ki bizim için bütün şehirlerin hem harita hem de konum görüntülerini tutan Google Maps API’ı bulunmakta. Biz de bu API aracılığı ile veriyi Google Maps’ten çekip, bizim gönderdiğimiz şehrin görüntüsünü elde edeceğiz.&lt;/p&gt;

&lt;p&gt;Bir python dosyası açalım ve içerisine aşağıdaki kodu yapıştıralım.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;flask&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Flask&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;string&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Template&lt;/span&gt;
&lt;span class="n"&gt;app&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Flask&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;__name__&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;HTML_TEMPLATE&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Template&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"""
&amp;lt;h1&amp;gt;Hello ${place_name}!&amp;lt;/h1&amp;gt;

&amp;lt;img src="https://maps.googleapis.com/maps/api/staticmap?size=700x300&amp;amp;markers=${place_name}" alt="map of ${place_name}"&amp;gt;

&amp;lt;img src="https://maps.googleapis.com/maps/api/streetview?size=700x300&amp;amp;location=${place_name}" alt="street view of ${place_name}"&amp;gt;
"""&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;route&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;'/'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;homepage&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="s"&gt;"""&amp;lt;h1&amp;gt;Hello world!&amp;lt;/h1&amp;gt;"""&lt;/span&gt;

&lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;route&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;'/&amp;lt;some_place&amp;gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;some_place_page&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;some_place&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;HTML_TEMPLATE&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;substitute&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;place_name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;some_place&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;

&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;__name__&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="s"&gt;'__main__'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;run&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;debug&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;False&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;use_reloader&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Daha sonra yaptığımız değişiklikleri kaydedip çalıştıralım. Her şey düzgün gittiyse aşağıdaki gibi bir sonuç almalısınız.&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;&lt;code&gt;* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://127.0.0.1:5000/"&gt;http://127.0.0.1:5000/&lt;/a&gt; adresindeki konuma gidip, index sayfasını görebiliriz.&lt;/p&gt;

&lt;p&gt;Şimdi burada tam olarak ne oluyor? HTML_TEMPLATE, içerisinde gördüğünüz gibi bir URL tutmaktadır. Bu URL Google Maps’e bir request atıyor ve biz de istenilen request’i serverdan respond olarak alıyoruz. Peki neyin request’ini gönderiyoruz? Kısacası place_name yerine ne yazarsak o konumun görüntüsünü elde edeceğiz. Bizim API’ımızı da dinamik yapan asıl durum tam olarak da budur. Hiçbir şehrin görüntüsünü tek tek indirip girmedik, hepsi hazırda duruyor ve bizim talebimize göre o veriyi elde ediyoruz. &lt;/p&gt;

&lt;p&gt;Bu geliştirdiğimiz API’da bir tek dinamik olan durum görüntüler değil, URL’yi de dinamik bir şekilde alabiliriz. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;@app.route(‘/’)&lt;/strong&gt; bildiğiniz gibi ana sayfayı yani index sayfasını temsil etmekteydi. Eğer biz oraya &lt;strong&gt;@app.route(‘/Ankara’)&lt;/strong&gt; yazsaydık ve tek tek her şehir için böyle bir tanımda bulunsaydık bu dinamik değil statik olurdu. O yüzden &lt;strong&gt;&lt;/strong&gt; adında bir değer tanımlıyoruz. Bu değere gönderdiğimiz isim Google Maps API’na &lt;strong&gt;place_name&lt;/strong&gt; olarak gitmektedir ve oradan da konum bilgilerini çekmektedir. &lt;/p&gt;

&lt;p&gt;Böylece hem URL hem de veriyi dinamik bir şekilde elde etmiş olduk!&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Python ve Flask kullanarak Web API geliştirme</title>
      <dc:creator>Koray Barkin</dc:creator>
      <pubDate>Fri, 09 Oct 2020 07:07:13 +0000</pubDate>
      <link>https://dev.to/koraybarkin/python-ve-flask-kullanarak-web-api-gelistirme-5ed7</link>
      <guid>https://dev.to/koraybarkin/python-ve-flask-kullanarak-web-api-gelistirme-5ed7</guid>
      <description>&lt;h2&gt;
  
  
  Başlıklar
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;API Nedir?&lt;/li&gt;
&lt;li&gt;Web API Nedir?&lt;/li&gt;
&lt;li&gt;Kurulum&lt;/li&gt;
&lt;li&gt;Web API Geliştirme&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;API Nedir?&lt;/strong&gt; &lt;a&gt;&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;API yani Application Programming Interface’in Türkçe karşılığı Uygulama Geliştirme Ara yüzü anlamına gelmektedir. Kişinin elindeki verileri dış dünyaya açarak diğer uygulama ve platformların kullanımına belli kurallar ve tanımlamalar çerçevesinde sunduğu ara yüzdür.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Web API Nedir?&lt;/strong&gt; &lt;a&gt;&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Birden fazla end user’ın bilgisayarlar, web tarayıcıları, akıllı telefonlar, tabletler vs. aracılığı HTTP protokolleri üzerinden haberleşelebilen bir servis oluşturmak için kullanılan bir framework olarak çalışmaktadır.&lt;br&gt;
HTTP’nin tüm özelliklerini (URI, Request/Response headers, caching yani önbelleğe alma, versiyonlama, çeşitli içerik formatları gibi özellikler)  kullanabilen, HTTP üzerinde kaynak odaklı servisler oluşturmak istediğinizde Web API kullanmanız daha sağlıklıdır.&lt;/p&gt;
&lt;h3&gt;
  
  
  &lt;strong&gt;Kurulum&lt;/strong&gt; &lt;a&gt;&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Öncelikle Python’da oldukça popüler olan pip3 paket yöneticisini kuralım. Eğer pip3 yüklüyse bu adımı geçebilirsiniz.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt-get &lt;span class="nb"&gt;install &lt;/span&gt;python3-pip
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Şimdi ise pip ile Flask kurmaya hazırız.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install &lt;/span&gt;flask
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Kurulumumuzu tamamladık, şimdi bu dökümanda ne yapacağımızdan kısaca bir bahsedelim.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Web API Geliştirme&lt;/strong&gt; &lt;a&gt;&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Her siteye girdiğinizde base URL dediğimiz ana sayfa bulunmaktadır. Sizin yaptığınız tercihler ile farklı konumlara request atılır ve bu base URL’in sonuna bir path eklenir. &lt;/p&gt;

&lt;p&gt;Base URL:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;dev.to
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Örneğin, dev.to sitesine girdiğinizde ana sayfaya yönlendirilirsiniz. Fakat benim profilime girmek için adıma tıkladığınızda URL’nin sonuna aşağıdaki path’in eklendiğini görebilirsiniz.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/koraybarkin
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Bu path kendi başına hiçbir işe yaramamaktadır, fakat base URL’imiz ile birleştiğinde dev.to sitesinde koraybarkin kullanıcısının profiline yönlendirmektedir.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;https://dev.to/koraybarkin
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Şimdi başka bir örnekten daha detaylı inceleyelim.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;http://chroniclingamerica.loc.gov/search/pages/results/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Yukarıdaki URL’nin sonuna bir path eklenmiş ve bir sorgunun cevabı yansıtılmış. Şimdi ise parametre göndermenin ne işe yaradığını öğrenelim. Bu sitedeki aramamızın sonucunu parametre göndererek manipüle edebiliriz.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;http://chroniclingamerica.loc.gov/search/pages/results/?format=json&amp;amp;proxtext=fire
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Yukarıda görmüş olduğunuz gibi “?” işareti her bir query parametresinin başında yer yer almaktadır. Her bir query, &amp;amp; işareti ile birbirinden ayrılmaktadır. Yukarıdaki format=json query’si sayfadaki veriyi bize JSON halinde göstermesi için bir sorgudur. İkinci olarak da proxtext=fire sorgusu o sayfada yaptığımız aramayı spefisikleştirmektedir. &lt;/p&gt;

&lt;p&gt;Şimdi bu terminolojileri anladığımıza göre Flask ile basit bir API yapalım.&lt;br&gt;
İlk önce bir klasör açalım ve adına projeler diyelim. Daha sonra bu projeler klasörünün içerisine api adında bir klasör daha açalım ve bu api klasörünün içerisine de bir Python dosyası açalım (.py uzantılı) ve içerisine aşağıdaki kodu yapıştıralım.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;flask&lt;/span&gt;

&lt;span class="n"&gt;app&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;flask&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Flask&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;__name__&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;config&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s"&gt;"DEBUG"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="bp"&gt;False&lt;/span&gt;


&lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;route&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;'/'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;methods&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s"&gt;'GET'&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;home&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="s"&gt;"&amp;lt;h1&amp;gt;dev.to/koraybarkin Flask ile Web API geliştirme&amp;lt;/h1&amp;gt;&amp;lt;p&amp;gt;Tebrikler ilk Web API'ınızı başarıyla geliştirdiniz!&amp;lt;/p&amp;gt;"&lt;/span&gt;

&lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;run&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Daha sonra yaptığımız değişiklikleri kaydedip çalıştıralım. Her şey düzgün gittiyse aşağıdaki gibi bir sonuç almalısınız.&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;&lt;code&gt;* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;Şimdi çıktımızda yazan &lt;a href="http://127.0.0.1:5000/"&gt;http://127.0.0.1:5000/&lt;/a&gt; adresine gittiğimizde aşağıdaki gibi bir ekrana ulaşıyor olmalısınız.&lt;/p&gt;

&lt;p&gt;Şimdi ise bu yarattığımız basit Web API’ına veri gönderelim. Aşağıdaki kodu python dosyamıza yapıştıralım ve değişiklikleri kaydedelim. Daha sonra tekrar çalıştırdığımızda ana sayfamızdaki yazının hala aynı şekilde kaldığını görebiliriz. Peki bu eklediğimiz books array’indeki data nereye gitti? Kodu dikkatlice incelerseniz giriş ekranına bir &lt;strong&gt;/api/v1/resources/books/all&lt;/strong&gt; path’ine jsonify(books) fonksiyonunu gönderdiğimizi görebilirsiniz.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;flask&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;flask&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;jsonify&lt;/span&gt;

&lt;span class="n"&gt;app&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;flask&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Flask&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;__name__&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;config&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s"&gt;"DEBUG"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="bp"&gt;False&lt;/span&gt;

&lt;span class="c1"&gt;# Create some test data for our catalog in the form of a list of dictionaries.
&lt;/span&gt;&lt;span class="n"&gt;books&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s"&gt;'id'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
     &lt;span class="s"&gt;'title'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;'A Fire Upon the Deep'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
     &lt;span class="s"&gt;'author'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;'Vernor Vinge'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
     &lt;span class="s"&gt;'first_sentence'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;'The coldsleep itself was dreamless.'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
     &lt;span class="s"&gt;'year_published'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;'1992'&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s"&gt;'id'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
     &lt;span class="s"&gt;'title'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;'The Ones Who Walk Away From Omelas'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
     &lt;span class="s"&gt;'author'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;'Ursula K. Le Guin'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
     &lt;span class="s"&gt;'first_sentence'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;'With a clamor of bells that set the swallows soaring, the Festival of Summer came to the city Omelas, bright-towered by the sea.'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
     &lt;span class="s"&gt;'published'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;'1973'&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s"&gt;'id'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
     &lt;span class="s"&gt;'title'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;'Dhalgren'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
     &lt;span class="s"&gt;'author'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;'Samuel R. Delany'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
     &lt;span class="s"&gt;'first_sentence'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;'to wound the autumnal city.'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
     &lt;span class="s"&gt;'published'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;'1975'&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;]&lt;/span&gt;


&lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;route&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;'/'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;methods&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s"&gt;'GET'&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;home&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="s"&gt;'''&amp;lt;h1&amp;gt;dev.to/koraybarkin Flask ile Web API geliştirme&amp;lt;/h1&amp;gt;&amp;lt;p&amp;gt;Tebrikler ilk Web API'ınızı başarıyla geliştirdiniz!&amp;lt;/p&amp;gt;'''&lt;/span&gt;


&lt;span class="c1"&gt;# A route to return all of the available entries in our catalog.
&lt;/span&gt;&lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;route&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;'/api/v1/resources/books/all'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;methods&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s"&gt;'GET'&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;api_all&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;jsonify&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;books&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;run&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Şimdi ise aşağıdaki path’i yazıp sonuca bakalım.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;http://127.0.0.1:5000/api/v1/resources/books/all
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Books array’indeki tüm veriyi alıp, jsonify() fonksiyonu ile json haline getirdik ve ekranımıza yansıttık. İşte statik bir şekilde veriyi gönderme, API oluşturma bu kadar basit!&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Yazılım Lisans Tipleri ve Repository’e Lisans Ekleme</title>
      <dc:creator>Koray Barkin</dc:creator>
      <pubDate>Mon, 05 Oct 2020 10:12:06 +0000</pubDate>
      <link>https://dev.to/koraybarkin/yazilim-lisans-tipleri-ve-repository-e-lisans-ekleme-453m</link>
      <guid>https://dev.to/koraybarkin/yazilim-lisans-tipleri-ve-repository-e-lisans-ekleme-453m</guid>
      <description>&lt;h2&gt;
  
  
  Başlıklar
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Yazılım Lisans Tipleri&lt;/li&gt;
&lt;li&gt;Repository’e Lisans Ekleme&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Yazılım Lisans Tipleri&lt;/strong&gt; &lt;a&gt;&lt;/a&gt;
&lt;/h3&gt;

&lt;h4&gt;
  
  
  1) MIT Lisansı
&lt;/h4&gt;

&lt;p&gt;MIT lisansı sizi birçok konuda özgür kılar. Yazılımınıza ait kaynak kodunu dilediğiniz gibi kullanabilir, paylaşabilir ve değiştirebilirsiniz. Ticari olarak kullanımında bile bir sorun olmamaktadır. Fakat yazılım kadar yazılımı geliştireni de özgür kılar. Yazılım ile ilgili herhangi bir sorun çıkması durumunda yazılımı geliştiren kişi için herhangi bir yükümlülük söz konusu değildir. Bu nedenle MIT lisanslı bir yazılımı gönül rahatlığı ile kullanabilirsiniz, fakat yazılımı kullandığınızda o yazılıma referans vermeniz gerekmektedir.&lt;/p&gt;

&lt;h4&gt;
  
  
  2) Apache Lisansı
&lt;/h4&gt;

&lt;p&gt;Apache lisansının, MIT lisansından çok bir farkı olduğu söylenemez. Apache lisansı da hem yazılımı geliştireni hem de kullananları özgür kılmaktadır. Sadece yazılımınızı dağıtırken kullandığınız Apache lisanslı ürünlerin lisanslarını da dağıtımınıza eklemeniz gerekmektedir. &lt;/p&gt;

&lt;h4&gt;
  
  
  3) GNU Lisansı
&lt;/h4&gt;

&lt;p&gt;GNU lisansı da MIT gibi kullanıcı ya ve geliştiren kişiye yazılımın kodlarına erişim konusunda bir kısıtlama getirmez. Fakat MIT lisansına kıyasla kullanım açısından bazı kısıtlamalara sahiptir. Bu kısıtlamaların en önemlisi, eğer yazılımınızda GNU lisansına sahip bir ürün kullandıysanız ve ürünü dağıtmaya başlarsanız, sizin yazılımınız da GNU lisansına sahip olmalıdır. Yani projemizde kendi geliştirdiğimiz kısımların da kaynak kodlarını paylaşmak zorundasınız. Bu nedenle ticari yazılımlarda GNU lisansı çok tercih edilmemektedir. MIT lisansında kaynak kodlarınızı paylaşmanız gerekmemektedir, geliştirdiğiniz kodları kimseyle paylaşmak zorunda değilsiniz.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Repository’e Lisans Ekleme&lt;/strong&gt; &lt;a&gt;&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Yukarıda bahsettiğim lisanslar gibi olan tespit edilebilir lisans (detectable licence) eklediğiniz takdirde, repositorynizi ziyaret eden kullanıcılar repository sayfasının sağ üst kısmında lisans adını görebilirler. Lisans dosyasının tamamını okumak için, lisans adına tıklayabilirsiniz.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdocs.github.com%2Fassets%2Fimages%2Fhelp%2Frepository%2Frepo-license-indicator.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdocs.github.com%2Fassets%2Fimages%2Fhelp%2Frepository%2Frepo-license-indicator.png" alt="lisans-gorsel"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  1) GitHub’da repositorynizin bulunduğu ana sayfaya gelin.
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.hizliresim.com%2FEFSZdE.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.hizliresim.com%2FEFSZdE.png" alt="lisans-gorsel"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  2) “Add File” diyerek “Create New File” seçeneğini seçiyoruz.
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.hizliresim.com%2FWI7HSh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.hizliresim.com%2FWI7HSh.png" alt="lisans-gorsel"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  3) “Name your file…” kısmına LICENCE ya da LICENCE.md yazınız (bütün harfler büyük olmalıdır).Daha sonra sağ tarafta bulunan “Choose a licence template” butonuna basınız.
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.hizliresim.com%2FaFyCgo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.hizliresim.com%2FaFyCgo.png" alt="lisans-gorsel"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  4) Açılan ekranda uygun lisans tipleri bulunmaktadır. Eklemek istediğiniz lisans tipini seçiniz.
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.hizliresim.com%2FZqshns.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.hizliresim.com%2FZqshns.png" alt="lisans-gorsel"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  5) Seçtikten sonra seçtiğiniz lisans tipinin izinleri, kısıtlamaları ve gereksinimlerini görebilirsiniz. Eğer kullanım koşullarını okuduktan sonra onaylıyorsanız “Review and Submit” butonuna basarak lisansı ekleyebilirsiniz.
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.hizliresim.com%2FcHfjjG.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.hizliresim.com%2FcHfjjG.png" alt="lisans-gorsel"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  6) Sayfanın alt kısmında bulunan “Commit changes” kısmında dosyada yaptığınız değişiklikleri içeren bir commit mesajı yazabilirsiniz.
&lt;/h4&gt;

&lt;h4&gt;
  
  
  7) Commit mesajı kısmının altında bulunan alandan yaptığınız commit’i bulunduğunuz branch’e mi ya da yeni bir branch’e mi eklemek istediğinizi seçiniz. Eğer bulunduğunuz branch varsayılan branch ise alttaki “Create a new branch for this commit and start a pull request” seçeneğini seçiniz. Branchlerin ne olduğunu tam olarak bilmiyorsanız bu &lt;a href="https://dev.to/koraybarkin/git-de-branch-nedir-nasil-olusturulur-em6"&gt;linkten&lt;/a&gt; branch anlatımıma ulaşabilirsiniz.
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.hizliresim.com%2FhzaEJQ.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.hizliresim.com%2FhzaEJQ.png" alt="lisans-gorsel"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Git'de Branch Nedir? Nasıl oluşturulur?</title>
      <dc:creator>Koray Barkin</dc:creator>
      <pubDate>Fri, 02 Oct 2020 07:41:41 +0000</pubDate>
      <link>https://dev.to/koraybarkin/git-de-branch-nedir-nasil-olusturulur-em6</link>
      <guid>https://dev.to/koraybarkin/git-de-branch-nedir-nasil-olusturulur-em6</guid>
      <description>&lt;h2&gt;
  
  
  Başlıklar
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Branch Oluşturmak&lt;/li&gt;
&lt;li&gt;Yeni Bir Branch Oluşturmak&lt;/li&gt;
&lt;li&gt;Branchleri Listelemek ve Branchler Arasında Gezinmek&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Branch Oluşturmak&lt;/strong&gt; &lt;a&gt;&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Branch oluşturmak kullanıcıya çalıştığı projenin farklı versiyonlarına erişmesini sağlar. Kullanıcı, projesine bir yenilik eklemek istediğinde, yaptığı değişiklik projenin çalışmasını olumsuz etkileyebilir. Bu gibi durumlarda projemizin o anki halini bozmamak için branch kullanabiliriz. Branch yardımı ile projemizin çalışır halini kaydedip, yeni eklenti üzerinde rahatlıkla çalışabiliriz. Projemizde herhangi bir sorun çıktığı takdirde geri dönüp önceki versiyona kolaylıkla erişebiliriz. Branch, sadece projenizi değiştirirken ya da güncellerken eski halini korumak ile kalmıyor. Projenize bir versiyon çıkarttığınız zaman her yeni versiyon için repository oluşturmak yerine her bir versiyon için farklı branchler açabilirsiniz. Böylece versiyonları bir arada kolayca takip edebilir ve erişebilirsiniz.&lt;/p&gt;

&lt;p&gt;Git’de proje oluşturduğunuzda varsayılan olarak &lt;strong&gt;master&lt;/strong&gt; adında bir branch oluşturulur. Eğer hiçbir değişiklik yapmadan çalışmaya devam edersek, bütün işlemlerimizi master branch’i üzerinden yapmış oluruz. Yeni bir eklenti yapacağımız zaman master branch’i üzerinde yeni bir branch açabiliriz. Böylece hem dosya kalabalığının hem de dosya boyutunun katlanmasının önüne geçmiş oluruz. Bunun yanı sıra istediğimiz zaman da bu iki farklı branch’i birleştirebiliriz.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Kısacası, bir proje geliştirirken final.py finalv2.py finalsonhali.py gibi hangi dosyanın ne içerdiğini bilmediğimiz karmaşık bir yapıdan bizleri kurtarıyor.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.hizliresim.com%2FRg8CvP.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.hizliresim.com%2FRg8CvP.png" alt="Branch-gorsel"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Şimdi yeni bir klasör oluşturup aşağıdaki komutu verelim.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;

git init


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Örneğin, basit bir toplama işlemi yapan bir PHP (islemler.php) dosyamız olsun. Biz bu kodumuza eklenti olarak çarpma işlemi de hesaplamasını istiyoruz. Fakat, bu eklentiyi yaparken toplama işlemi fonksiyonunun işleyişini bozabiliriz. Bu yüzden eklentimizi güvenli ortamda geliştirmek için önce toplama işlemi dosyamızı Git’e ekleyip commit yapalım.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;

git add islemler.php


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;

 git commit &lt;span class="nt"&gt;-m&lt;/span&gt; “toplama_islemi eklendi”


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Yukarıdaki işlemleri gerçekleştirdikten sonra toplama işlemi yapan kodumuzu güvenli bir şekilde kaydettik. Şimdi ise rahatlıkla çarpma işlemi eklentisi üzerinde çalışabiliriz.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Yeni Bir Branch Oluşturmak&lt;/strong&gt; &lt;a&gt;&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Git’de iki farklı şekilde branch oluşturabiliriz. Bu yollardan bir tanesi git branch komutunu kullanmak, diğeri ise git checkout -b parametresi vermek. Git branch komutu sadece yeni bir branch oluştururken, git checkout -b “…” komutu yazdığınız isimde branch yoksa onu oluşturur ve bulunduğunuz branch değiştirilir.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;

git checkout &lt;span class="nt"&gt;-b&lt;/span&gt; “carpma_islemi”


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Bu komuttan sonra aşağıdaki yazıyı görüyorsanız doğru yoldasınız demektir.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;

Switched to new branch “carpma_islemi”


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Şimdi yeni bir branch oluşturduğumuza ve çalışma branchimizi değiştirdiğimize göre önceden yarattığımız toplama.php dosyasını açıp çarpma işlemi eklentimizi ekleyebiliriz. Bundan sonra yapacağımız değişiklik carpma_islemi adındaki branchimize kaydedilecektir. İstediğimiz zaman master adındaki branchimize dönebilir ya da carpma_islemi ile birleştirebiliriz (merge). Değişiklikleri yaptıktan sonra dosyamızın yeni halini ekleyip commit edebiliriz.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;

git add islemler.php


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;

git commit &lt;span class="nt"&gt;-m&lt;/span&gt; “carpma islemi eklendi”


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h3&gt;
  
  
  &lt;strong&gt;Branchleri Listelemek ve Branchler Arasında Gezinmek&lt;/strong&gt; &lt;a&gt;&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Git’de branch değiştirmek için git checkout komutunu kullanabiliriz. git checkout komutunu yazdıktan sonra gitmek istediğiniz branch’in adını yazmanız yeterlidir. Eğer gitmek istediğiniz branch’in adını hatırlamıyorsanız git branch komutu ile bütün branchleri listeleyebilirsiniz.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;(Branchleri listeler)&lt;/em&gt;&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;

git branch


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;em&gt;(carpma_islemi branchine geçiş yapar)&lt;/em&gt;&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;

git checkout carpma_islemi


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;git branch komutunu yazdıktan sonra bulunduğunuz branch’in yanında * işareti bulunur. Eğer carpma_islemi branchindeysek islemler.php dosyasının içeriğinde, eklediğimiz çarpma işlemi fonksiyonunu da görebiliriz fakat master branch’ine dönersek sadece toplama işleminin olduğunu göreceğiz.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;(master branchine geçiş yapar)&lt;/em&gt;&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;

git checkout master


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Böylece iki farklı versiyonda islemler.php dosyamız mevcut. Sadece toplama işlemine sahip olan master branch’i ve hem toplama hem de çarpma işlemine sahip carpma_islemi branch’i. Eğer bölme işlemi gibi bir eklenti eklemek istiyorsak, git branch bölme_islemi diye bir branch açabilir ya da git checkout -b bölme_islemi diye branch açıp çalışma branchimizi de değiştirerek eklentimizi yapabiliriz. Bunun ardından aynı şekilde git add ve commit komutlarını yazarak projemizin üstüne koyarak ilerleyebiliriz.&lt;/p&gt;

</description>
      <category>git</category>
      <category>branch</category>
    </item>
  </channel>
</rss>
