{"id":41714,"date":"2026-05-12T09:00:48","date_gmt":"2026-05-12T06:00:48","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/storyblok-yonetim-apisini-php-ile-otomatiklestirme-pratik-bir-rehber\/"},"modified":"2026-05-12T09:00:48","modified_gmt":"2026-05-12T06:00:48","slug":"storyblok-yonetim-apisini-php-ile-otomatiklestirme-pratik-bir-rehber","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/storyblok-yonetim-apisini-php-ile-otomatiklestirme-pratik-bir-rehber\/","title":{"rendered":"Storyblok Y\u00f6netim API&#8217;sini PHP ile Otomatikle\u015ftirme: Pratik Bir Rehber"},"content":{"rendered":"<h2>Storyblok Y\u00f6netim API&#8217;sini PHP ile Otomatikle\u015ftirme: Pratik Bir Rehber<\/h2>\n<p>G\u00fcn\u00fcm\u00fcz\u00fcn h\u0131zla de\u011fi\u015fen dijital d\u00fcnyas\u0131nda, i\u00e7erik y\u00f6netimi s\u00fcre\u00e7leri i\u015fletmeler i\u00e7in kritik bir \u00f6neme sahiptir. Manuel olarak i\u00e7erik olu\u015fturma, g\u00fcncelleme ve silme i\u015flemleri, \u00f6zellikle b\u00fcy\u00fck \u00f6l\u00e7ekli projelerde zaman al\u0131c\u0131, hataya a\u00e7\u0131k ve verimsiz olabilir. Peki, bu s\u00fcreci nas\u0131l daha ak\u0131ll\u0131, daha h\u0131zl\u0131 ve daha g\u00fcvenilir hale getirebiliriz? \u0130\u015fte tam bu noktada, Storyblok&#8217;un g\u00fc\u00e7l\u00fc Y\u00f6netim API&#8217;si (Management API) devreye giriyor ve PHP ile birle\u015fti\u011finde, i\u00e7erik otomasyonu i\u00e7in s\u0131n\u0131rs\u0131z olanaklar sunuyor. Bu rehber, Storyblok&#8217;taki i\u00e7erik ak\u0131\u015flar\u0131n\u0131z\u0131 PHP kullanarak programatik olarak nas\u0131l y\u00f6netece\u011finizi ad\u0131m ad\u0131m a\u00e7\u0131klayacak, b\u00f6ylece geli\u015ftirme s\u00fcre\u00e7lerinizi optimize ederken i\u00e7erik stratejinizi g\u00fc\u00e7lendirebileceksiniz.<\/p>\n<h3>Storyblok ve Y\u00f6netim API&#8217;si Nedir? Neden \u0130\u015f Ak\u0131\u015flar\u0131n\u0131z \u0130\u00e7in Kritik \u00d6neme Sahiptir?<\/h3>\n<p>Storyblok, i\u00e7erik olu\u015fturuculara sezgisel bir g\u00f6rsel d\u00fczenleyici sunarken, geli\u015ftiricilere esnek ve API odakl\u0131 bir yap\u0131 sa\u011flayan modern bir ba\u015fs\u0131z i\u00e7erik y\u00f6netim sistemi (Headless CMS) olarak \u00f6ne \u00e7\u0131kmaktad\u0131r. Geleneksel CMS&#8217;lerin aksine, Storyblok i\u00e7eri\u011fi sunum katman\u0131ndan ay\u0131rarak, ayn\u0131 i\u00e7eri\u011fin web siteleri, mobil uygulamalar, IoT cihazlar\u0131 ve di\u011fer dijital platformlar aras\u0131nda kolayca da\u011f\u0131t\u0131lmas\u0131na olanak tan\u0131r. Bu mimari, geli\u015ftiricilere istedikleri teknolojiyi (\u00f6rne\u011fin, React, Vue, Angular, Next.js veya PHP tabanl\u0131 framework&#8217;ler) kullanarak i\u00e7eriklerini t\u00fcketme \u00f6zg\u00fcrl\u00fc\u011f\u00fc verir.<\/p>\n<p>Storyblok&#8217;un g\u00fcc\u00fcn\u00fcn \u00f6nemli bir k\u0131sm\u0131, i\u00e7eriklerinizi programatik olarak y\u00f6netmenizi sa\u011flayan iki ana API setinden gelir: \u0130\u00e7erik Teslim API&#8217;si (Content Delivery API) ve Y\u00f6netim API&#8217;si (Management API). \u0130\u00e7erik Teslim API&#8217;si, canl\u0131 i\u00e7erikleri okumak ve web sitenizde veya uygulaman\u0131zda g\u00f6stermek i\u00e7in kullan\u0131l\u0131rken, Y\u00f6netim API&#8217;si Storyblok&#8217;un i\u00e7erik y\u00f6netim paneline eri\u015fmenizi ve i\u00e7erikleri olu\u015fturma, g\u00fcncelleme, silme, varl\u0131klar\u0131 y\u00f6netme, kullan\u0131c\u0131lar\u0131 ve alanlar\u0131 yap\u0131land\u0131rma gibi t\u00fcm y\u00f6netimsel i\u015flemleri otomatikle\u015ftirmenizi sa\u011flar.<\/p>\n<p>Y\u00f6netim API&#8217;si, \u00f6zellikle a\u015fa\u011f\u0131daki senaryolarda i\u015f ak\u0131\u015flar\u0131n\u0131z i\u00e7in kritik \u00f6neme sahiptir:<\/p>\n<p>*   <strong>Veri G\u00f6\u00e7\u00fc (Data Migration):<\/strong> Eski bir CMS&#8217;ten veya ba\u015fka bir kaynaktan Storyblok&#8217;a binlerce i\u00e7erik veya varl\u0131k ta\u015f\u0131rken, manuel giri\u015f yapmak yerine Y\u00f6netim API&#8217;si ile bu s\u00fcreci tamamen otomatikle\u015ftirebilirsiniz. Bu, hem zaman hem de insan hatas\u0131 riskini minimize eder.<br \/>\n*   <strong>Toplu \u0130\u00e7erik G\u00fcncellemeleri:<\/strong> Belirli bir kategoriye ait t\u00fcm \u00fcr\u00fcnlerin fiyatlar\u0131n\u0131 g\u00fcncellemek, belirli bir etikete sahip t\u00fcm blog yaz\u0131lar\u0131na yeni bir yazar eklemek veya kampanyal\u0131 \u00fcr\u00fcnlerin a\u00e7\u0131klamas\u0131n\u0131 de\u011fi\u015ftirmek gibi toplu i\u015flemler, Y\u00f6netim API&#8217;si ile saniyeler i\u00e7inde ger\u00e7ekle\u015ftirilebilir.<br \/>\n*   <strong>CI\/CD Entegrasyonu:<\/strong> S\u00fcrekli Entegrasyon\/S\u00fcrekli Da\u011f\u0131t\u0131m (CI\/CD) s\u00fcre\u00e7lerinizin bir par\u00e7as\u0131 olarak, yeni bir kod da\u011f\u0131t\u0131m\u0131yla birlikte Storyblok&#8217;ta otomatik olarak test i\u00e7erikleri olu\u015fturabilir, mevcut i\u00e7erikleri g\u00fcncelleyebilir veya \u00f6nbelle\u011fi temizleyebilirsiniz. Bu, geli\u015ftirme ve yay\u0131nlama s\u00fcre\u00e7lerini h\u0131zland\u0131r\u0131r.<br \/>\n*   <strong>Uygulama Entegrasyonlar\u0131:<\/strong> E-ticaret sistemleri, CRM&#8217;ler veya di\u011fer \u00fc\u00e7\u00fcnc\u00fc taraf uygulamalar\u0131n\u0131zdan gelen verileri Storyblok&#8217;a otomatik olarak senkronize edebilirsiniz. \u00d6rne\u011fin, yeni bir \u00fcr\u00fcn e-ticaret sitenizde yay\u0131nland\u0131\u011f\u0131nda, Storyblok&#8217;ta otomatik olarak bir \u00fcr\u00fcn hikayesi (story) olu\u015fturulabilir.<br \/>\n*   <strong>\u00c7ok Dilli \u0130\u00e7erik Y\u00f6netimi:<\/strong> Farkl\u0131 dillerdeki i\u00e7eriklerin olu\u015fturulmas\u0131 ve senkronize edilmesi, \u00f6zellikle b\u00fcy\u00fck projelerde karma\u015f\u0131k olabilir. Y\u00f6netim API&#8217;si sayesinde, ana dildeki bir i\u00e7eri\u011fin di\u011fer dillere otomatik olarak kopyalanmas\u0131n\u0131 veya \u00e7eviri hizmetleriyle entegrasyonunu sa\u011flayabilirsiniz.<\/p>\n<p>\u00d6zetle, Y\u00f6netim API&#8217;si, Storyblok&#8217;u sadece bir i\u00e7erik deposu olmaktan \u00e7\u0131kar\u0131p, dinamik ve entegre bir i\u00e7erik platformuna d\u00f6n\u00fc\u015ft\u00fcren g\u00fc\u00e7l\u00fc bir ara\u00e7t\u0131r. PHP gibi yayg\u0131n ve g\u00fc\u00e7l\u00fc bir sunucu taraf\u0131 diliyle birle\u015fti\u011finde, geli\u015ftiricilere i\u00e7erik y\u00f6netim s\u00fcre\u00e7lerinde e\u015fsiz bir esneklik ve otomasyon yetene\u011fi sunar. Bu sayede, geli\u015ftiriciler daha az tekrar eden g\u00f6revlerle u\u011fra\u015f\u0131rken, i\u00e7erik y\u00f6neticileri daha h\u0131zl\u0131 ve tutarl\u0131 i\u00e7erik da\u011f\u0131t\u0131m\u0131n\u0131n keyfini \u00e7\u0131karabilirler.<\/p>\n<h3>PHP ile Storyblok Y\u00f6netim API&#8217;sine \u0130lk Ad\u0131m: Kimlik Do\u011frulama ve Kurulum S\u00fcreci Nas\u0131l \u0130\u015fler?<\/h3>\n<p>Storyblok Y\u00f6netim API&#8217;sini PHP ile kullanmaya ba\u015flamadan \u00f6nce, gerekli kurulumlar\u0131 yapmal\u0131 ve API&#8217;ye eri\u015fim i\u00e7in kimlik do\u011frulamay\u0131 (authentication) sa\u011flamal\u0131s\u0131n\u0131z. Bu b\u00f6l\u00fcm, projenizi nas\u0131l haz\u0131rlayaca\u011f\u0131n\u0131z\u0131 ve Storyblok ile g\u00fcvenli bir ba\u011flant\u0131 kurman\u0131n temel ad\u0131mlar\u0131n\u0131 a\u00e7\u0131klayacakt\u0131r.<\/p>\n<p>\u00d6ncelikle, bir PHP projesine ihtiyac\u0131n\u0131z olacak. E\u011fer halihaz\u0131rda bir projeniz yoksa, basit bir dizin olu\u015fturarak ba\u015flayabilirsiniz. PHP&#8217;nin kurulu oldu\u011fundan ve Composer (PHP ba\u011f\u0131ml\u0131l\u0131k y\u00f6neticisi) eri\u015fiminizin oldu\u011fundan emin olun. Composer, HTTP istekleri yapmak i\u00e7in kullanaca\u011f\u0131m\u0131z Guzzle gibi k\u00fct\u00fcphaneleri kolayca kurmam\u0131z\u0131 sa\u011flayacakt\u0131r.<\/p>\n<div class=\"code-container\">\n<pre><code>\n# Yeni bir proje dizini olu\u015fturun ve i\u00e7ine girin\nmkdir storyblok-otomasyon\ncd storyblok-otomasyon\n\n# Composer'\u0131 kullanarak Guzzle HTTP istemcisini kurun\ncomposer require guzzlehttp\/guzzle\n  <\/pre>\n<p><\/code>\n<\/div>\n<p>Guzzle, PHP uygulamalar\u0131n\u0131zda HTTP istekleri g\u00f6ndermek i\u00e7in pop\u00fcler ve kullan\u0131m\u0131 kolay bir k\u00fct\u00fcphanedir. Storyblok Y\u00f6netim API'si de HTTP tabanl\u0131 RESTful bir API oldu\u011fu i\u00e7in Guzzle bizim i\u00e7in ideal bir se\u00e7im olacakt\u0131r.<\/p>\n<p><strong>API Token'\u0131n\u0131z\u0131 Alma:<\/strong><br \/>\nStoryblok Y\u00f6netim API'sine eri\u015fmek i\u00e7in bir Y\u00f6netim API Token'\u0131na ihtiyac\u0131n\u0131z var. Bu token, API isteklerinizin kimli\u011fini do\u011frular ve hangi izinlere sahip oldu\u011funuzu belirler. Token'\u0131 almak i\u00e7in \u015fu ad\u0131mlar\u0131 izleyin:<\/p>\n<p>1.  Storyblok hesab\u0131n\u0131za giri\u015f yap\u0131n.<br \/>\n2.  \u0130lgili alan (Space) ayarlar\u0131 sayfas\u0131na gidin.<br \/>\n3.  Sol men\u00fcden \"Settings\" (Ayarlar) ve ard\u0131ndan \"API Keys\" (API Anahtarlar\u0131) se\u00e7ene\u011fine t\u0131klay\u0131n.<br \/>\n4.  Burada \"Management API Token\" b\u00f6l\u00fcm\u00fcn\u00fc bulacaks\u0131n\u0131z. Bu token'\u0131 kopyalay\u0131n.<br \/>\n    *   <strong>\u00d6nemli Not:<\/strong> Y\u00f6netim API Token'lar\u0131 olduk\u00e7a g\u00fc\u00e7l\u00fcd\u00fcr ve alan\u0131n\u0131zdaki t\u00fcm i\u00e7erik \u00fczerinde okuma, yazma, silme gibi i\u015flemleri yapabilir. Bu nedenle, bu token'\u0131 asla genel depolarda (\u00f6rne\u011fin GitHub) payla\u015fmamal\u0131 ve \u00fcretim ortam\u0131nda g\u00fcvenli bir \u015fekilde (\u00f6rne\u011fin ortam de\u011fi\u015fkenleri olarak) saklamal\u0131s\u0131n\u0131z.<\/p>\n<p><strong>Temel Bir PHP \u0130stemcisi Olu\u015fturma:<\/strong><br \/>\nToken'\u0131n\u0131z\u0131 ald\u0131ktan sonra, API istekleri g\u00f6ndermek i\u00e7in basit bir PHP beti\u011fi olu\u015fturabiliriz. <code>index.php<\/code> ad\u0131nda bir dosya olu\u015ftural\u0131m:<\/p>\n<div class=\"code-container\">\n<pre><code>\n<?php\n\nrequire 'vendor\/autoload.php'; \/\/ Composer'\u0131n otomatik y\u00fckleyicisini dahil et\n\nuse GuzzleHttp\\Client;\nuse GuzzleHttp\\Exception\\RequestException;\n\n\/\/ Y\u00f6netim API Token'\u0131n\u0131z\u0131 buraya veya daha g\u00fcvenli bir \u015fekilde ortam de\u011fi\u015fkeni olarak ekleyin\n$managementApiToken = getenv('STORYBLOK_MANAGEMENT_API_TOKEN') ?: 'YOUR_STORYBLOK_MANAGEMENT_API_TOKEN';\n$spaceId = getenv('STORYBLOK_SPACE_ID') ?: 'YOUR_STORYBLOK_SPACE_ID'; \/\/ Alan ID'nizi buraya ekleyin\n\nif (empty($managementApiToken) || $managementApiToken === 'YOUR_STORYBLOK_MANAGEMENT_API_TOKEN') {\n    die(\"Hata: Y\u00f6netim API Token'\u0131 tan\u0131mlanmad\u0131. L\u00fctfen .env dosyas\u0131n\u0131 veya ortam de\u011fi\u015fkenlerini kontrol edin.\");\n}\nif (empty($spaceId) || $spaceId === 'YOUR_STORYBLOK_SPACE_ID') {\n    die(\"Hata: Alan ID'si tan\u0131mlanmad\u0131. L\u00fctfen .env dosyas\u0131n\u0131 veya ortam de\u011fi\u015fkenlerini kontrol edin.\");\n}\n\n$client = new Client([\n    'base_uri' => 'https:\/\/api.storyblok.com\/v1\/',\n    'headers' => [\n        'Content-Type' => 'application\/json',\n        'Authorization' => $managementApiToken, \/\/ Token'\u0131 Authorization ba\u015fl\u0131\u011f\u0131na ekliyoruz\n    ],\n]);\n\ntry {\n    \/\/ \u00d6rnek bir istek: Alan\u0131n\u0131zdaki t\u00fcm hikayeleri listeleme\n    \/\/ Bu sadece bir \u00f6rnek, Management API'sinde stories endpoint'i space_id ile daha farkl\u0131 \u00e7al\u0131\u015f\u0131r.\n    \/\/ \u0130lk ad\u0131m olarak, space detaylar\u0131n\u0131 almay\u0131 deneyelim.\n    $response = $client->get(\"spaces\/{$spaceId}\");\n\n    $statusCode = $response->getStatusCode();\n    $body = json_decode($response->getBody()->getContents(), true);\n\n    echo \"Durum Kodu: \" . $statusCode . \"\\n\";\n    echo \"Alan Detaylar\u0131:\\n\";\n    print_r($body);\n\n} catch (RequestException $e) {\n    echo \"Hata Olu\u015ftu: \" . $e->getMessage() . \"\\n\";\n    if ($e->hasResponse()) {\n        echo \"Yan\u0131t: \" . $e->getResponse()->getBody()->getContents() . \"\\n\";\n    }\n}\n\n?>\n  <\/pre>\n<p><\/code>\n<\/div>\n<p>Yukar\u0131daki kod blo\u011funda, <code>getenv()<\/code> fonksiyonunu kullanarak API token'\u0131n\u0131z\u0131 ve alan ID'nizi ortam de\u011fi\u015fkenlerinden almaya \u00e7al\u0131\u015ft\u0131k. Bu, token'\u0131 do\u011frudan kod i\u00e7ine yazmaktan daha g\u00fcvenli bir y\u00f6ntemdir. Projenizin k\u00f6k dizininde bir <code>.env<\/code> dosyas\u0131 olu\u015fturarak bu de\u011fi\u015fkenleri tan\u0131mlayabilirsiniz (\u00f6rne\u011fin, <code>STORYBLOK_MANAGEMENT_API_TOKEN=sb_your_token_here<\/code> ve <code>STORYBLOK_SPACE_ID=123456<\/code>). Ard\u0131ndan, <code>phpdotenv<\/code> gibi bir k\u00fct\u00fcphane kullanarak bu de\u011fi\u015fkenleri PHP'ye y\u00fckleyebilirsiniz: <code>composer require vlucas\/phpdotenv<\/code>.<\/p>\n<p>Bu ilk ad\u0131mda, Guzzle istemcisini yap\u0131land\u0131rd\u0131k ve <code>Authorization<\/code> ba\u015fl\u0131\u011f\u0131na API token'\u0131m\u0131z\u0131 ekledik. Ard\u0131ndan, alan\u0131n\u0131z\u0131n (space) detaylar\u0131n\u0131 almak i\u00e7in basit bir GET iste\u011fi g\u00f6nderdik. Bu ba\u015far\u0131l\u0131 bir \u015fekilde \u00e7al\u0131\u015ft\u0131\u011f\u0131nda, Storyblok Y\u00f6netim API'si ile ileti\u015fim kurmaya haz\u0131rs\u0131n\u0131z demektir. Art\u0131k i\u00e7erik olu\u015fturma, g\u00fcncelleme ve silme gibi daha karma\u015f\u0131k i\u015flemlere ge\u00e7ebiliriz. Bu temel yap\u0131, ileride yapaca\u011f\u0131m\u0131z t\u00fcm API \u00e7a\u011fr\u0131lar\u0131 i\u00e7in ba\u015flang\u0131\u00e7 noktam\u0131z olacakt\u0131r.<\/p>\n<h3>Storyblok Kaynaklar\u0131n\u0131 Y\u00f6netme: Hikayeler (Stories) ve Bile\u015fenler (Components) Nas\u0131l Olu\u015fturulur ve G\u00fcncellenir?<\/h3>\n<p>Storyblok'un temel yap\u0131 ta\u015flar\u0131 hikayeler (stories) ve bile\u015fenlerdir (components). Hikayeler, web sitenizdeki sayfalar\u0131, blog yaz\u0131lar\u0131n\u0131 veya \u00fcr\u00fcn detaylar\u0131n\u0131 temsil ederken, bile\u015fenler bu hikayelerin i\u00e7eri\u011fini olu\u015fturan mod\u00fcler par\u00e7alard\u0131r (ba\u015fl\u0131klar, metin bloklar\u0131, resimler, kartlar vb.). Y\u00f6netim API'si sayesinde, bu yap\u0131lar\u0131 PHP ile programatik olarak olu\u015fturabilir, g\u00fcncelleyebilir ve silebilirsiniz.<\/p>\n<p><strong>Hikaye (Story) Olu\u015fturma:<\/strong><br \/>\nYeni bir hikaye olu\u015fturmak i\u00e7in, Storyblok Y\u00f6netim API'sinin <code>spaces\/{space_id}\/stories<\/code> endpoint'ine bir POST iste\u011fi g\u00f6ndermeniz gerekir. \u0130stek g\u00f6vdesinde (request body), hikayenin ad\u0131n\u0131, slug'\u0131n\u0131 (URL dostu ad\u0131), bile\u015fen yap\u0131s\u0131n\u0131 ve gerekirse \u00fcst hikaye (parent story) ID'sini belirtmelisiniz.<\/p>\n<p>\u00d6rne\u011fin, yeni bir blog yaz\u0131s\u0131 olu\u015fturmak istedi\u011fimizi varsayal\u0131m. Blog yaz\u0131m\u0131z bir \"page\" (sayfa) bile\u015fen t\u00fcr\u00fcnde olacak ve i\u00e7inde bir \"hero\" (kahraman b\u00f6l\u00fcm\u00fc) ve \"richtext\" (zengin metin) bile\u015fenleri bulunacak.<\/p>\n<div class=\"code-container\">\n<pre><code>\n<?php\n\nrequire 'vendor\/autoload.php';\n\nuse GuzzleHttp\\Client;\nuse GuzzleHttp\\Exception\\RequestException;\nuse Dotenv\\Dotenv;\n\n\/\/ Ortam de\u011fi\u015fkenlerini y\u00fckle\n$dotenv = Dotenv::createImmutable(__DIR__);\n$dotenv->load();\n\n$managementApiToken = getenv('STORYBLOK_MANAGEMENT_API_TOKEN');\n$spaceId = getenv('STORYBLOK_SPACE_ID');\n\nif (empty($managementApiToken) || empty($spaceId)) {\n    die(\"Hata: Y\u00f6netim API Token'\u0131 veya Alan ID'si tan\u0131mlanmad\u0131.\");\n}\n\n$client = new Client([\n    'base_uri' => 'https:\/\/api.storyblok.com\/v1\/',\n    'headers' => [\n        'Content-Type' => 'application\/json',\n        'Authorization' => $managementApiToken,\n    ],\n]);\n\ntry {\n    $storyData = [\n        'story' => [\n            'name' => 'PHP ile Yeni Blog Yaz\u0131s\u0131',\n            'slug' => 'php-ile-yeni-blog-yazisi-' . uniqid(), \/\/ Benzersiz bir slug olu\u015ftur\n            'parent_id' => null, \/\/ K\u00f6k dizinde olu\u015fturmak i\u00e7in null\n            'content' => [\n                'component' => 'page', \/\/ Ana bile\u015fen t\u00fcr\u00fc\n                '_uid' => uniqid(),\n                'title' => 'PHP ile Otomatik \u0130\u00e7erik Olu\u015fturma',\n                'body' => [\n                    [\n                        'component' => 'hero',\n                        '_uid' => uniqid(),\n                        'headline' => 'Storyblok ve PHP G\u00fcc\u00fc',\n                        'image' => 'https:\/\/a.storyblok.com\/f\/123456\/1200x800\/some_image.jpg', \/\/ \u00d6rnek resim URL'si\n                        'call_to_action_text' => 'Daha Fazla Oku',\n                        'call_to_action_link' => '\/blog\/detaylar'\n                    ],\n                    [\n                        'component' => 'richtext',\n                        '_uid' => uniqid(),\n                        'text' => [\n                            'type' => 'doc',\n                            'content' => [\n                                [\n                                    'type' => 'paragraph',\n                                    'content' => [\n                                        ['type' => 'text', 'text' => 'Bu blog yaz\u0131s\u0131, Storyblok Y\u00f6netim API\\'si ve PHP kullan\u0131larak otomatik olarak olu\u015fturulmu\u015ftur. Bu y\u00f6ntemle i\u00e7erik y\u00f6netim s\u00fcre\u00e7lerinizi b\u00fcy\u00fck \u00f6l\u00e7\u00fcde h\u0131zland\u0131rabilirsiniz.'],\n                                    ],\n                                ],\n                                [\n                                    'type' => 'paragraph',\n                                    'content' => [\n                                        ['type' => 'text', 'text' => 'Otomasyon sayesinde, manuel hatalar\u0131 azalt\u0131rken tutarl\u0131l\u0131\u011f\u0131 art\u0131rabilirsiniz.'],\n                                    ],\n                                ],\n                            ],\n                        ],\n                    ],\n                ],\n                'seo_title' => 'PHP Storyblok Otomasyonu',\n                'seo_description' => 'PHP ile Storyblok i\u00e7eriklerini otomatik olu\u015fturma rehberi.',\n            ],\n            'is_startpage' => false,\n            'published' => true, \/\/ Olu\u015ftururken yay\u0131nlamak i\u00e7in true yap\u0131n\n        ],\n    ];\n\n    $response = $client->post(\"spaces\/{$spaceId}\/stories\", [\n        'json' => $storyData,\n    ]);\n\n    $statusCode = $response->getStatusCode();\n    $body = json_decode($response->getBody()->getContents(), true);\n\n    echo \"Yeni Hikaye Olu\u015fturuldu! Durum Kodu: \" . $statusCode . \"\\n\";\n    echo \"Hikaye ID: \" . $body['story']['id'] . \"\\n\";\n    echo \"Hikaye URL: \" . $body['story']['full_slug'] . \"\\n\";\n\n} catch (RequestException $e) {\n    echo \"Hata Olu\u015ftu: \" . $e->getMessage() . \"\\n\";\n    if ($e->hasResponse()) {\n        echo \"Yan\u0131t: \" . $e->getResponse()->getBody()->getContents() . \"\\n\";\n    }\n}\n\n?>\n  <\/pre>\n<p><\/code>\n<\/div>\n<p>Yukar\u0131daki \u00f6rnekte, <code>storyData<\/code> dizisi, olu\u015fturulacak hikayenin t\u00fcm \u00f6zelliklerini ve i\u00e7indeki bile\u015fenlerin yap\u0131s\u0131n\u0131 tan\u0131mlar. <code>_uid<\/code> alanlar\u0131, Storyblok'un bile\u015fenleri benzersiz bir \u015fekilde tan\u0131mlamas\u0131 i\u00e7in gereklidir ve <code>uniqid()<\/code> fonksiyonuyla olu\u015fturulabilir. <code>parent_id<\/code> ile hikayeyi belirli bir klas\u00f6r alt\u0131na yerle\u015ftirebilirsiniz. <code>published<\/code> anahtar\u0131, hikayenin hemen yay\u0131nlan\u0131p yay\u0131nlanmayaca\u011f\u0131n\u0131 kontrol eder.<\/p>\n<p><strong>Hikaye (Story) G\u00fcncelleme:<\/strong><br \/>\nMevcut bir hikayeyi g\u00fcncellemek i\u00e7in, <code>spaces\/{space_id}\/stories\/{story_id}<\/code> endpoint'ine bir PUT iste\u011fi g\u00f6ndermeniz gerekir. \u0130stek g\u00f6vdesi, <code>story<\/code> nesnesini i\u00e7ermeli ve g\u00fcncellenecek alanlar\u0131 belirtmelidir. Sadece de\u011fi\u015ftirmek istedi\u011finiz alanlar\u0131 g\u00f6ndermeniz yeterlidir; geri kalan alanlar oldu\u011fu gibi kalacakt\u0131r.<\/p>\n<p>\u00d6rne\u011fin, yukar\u0131da olu\u015fturdu\u011fumuz blog yaz\u0131s\u0131n\u0131n ba\u015fl\u0131\u011f\u0131n\u0131 ve a\u00e7\u0131klamas\u0131n\u0131 g\u00fcncellemek isteyelim:<\/p>\n<div class=\"code-container\">\n<pre><code>\n<?php\n\n\/\/ ... (\u00d6nceki kurulum kodlar\u0131, use bildirimleri, .env y\u00fcklemesi ve client olu\u015fturma ayn\u0131 kal\u0131r) ...\n\n$storyIdToUpdate = 'YOUR_STORY_ID_HERE'; \/\/ G\u00fcncellenecek hikayenin ID'sini buraya ekleyin\n\ntry {\n    $updatedStoryData = [\n        'story' => [\n            'name' => 'PHP ile Otomatik Blog Yaz\u0131s\u0131 (G\u00fcncellendi)',\n            'content' => [\n                'component' => 'page', \/\/ Ana bile\u015fen t\u00fcr\u00fc ayn\u0131 kalmal\u0131\n                '_uid' => uniqid(), \/\/ Yeni bir uid gerekebilir veya mevcut uid korunabilir\n                'title' => 'PHP ile \u0130\u00e7erik Otomasyonu: Geli\u015fmi\u015f Rehber',\n                'body' => [\n                    \/\/ Mevcut bile\u015fenleri burada tekrar tan\u0131mlaman\u0131z veya\n                    \/\/ sadece belirli bir bile\u015feni g\u00fcncellemek i\u00e7in GET ile \u00e7ekip modify etmeniz gerekebilir.\n                    \/\/ Bu \u00f6rnekte sadece ba\u015fl\u0131\u011f\u0131 g\u00fcncelliyoruz.\n                    \/\/ E\u011fer t\u00fcm body'yi g\u00f6ndermezseniz mevcut body silinir, dikkat!\n                    \/\/ Genellikle \u00f6nce GET ile hikayeyi \u00e7ekip, sonra de\u011fi\u015fiklikleri yap\u0131p PUT ile g\u00f6nderilir.\n                    [\n                        'component' => 'hero',\n                        '_uid' => uniqid(), \/\/ Bu k\u0131sm\u0131 g\u00fcncellerken mevcut _uid kullanmal\u0131s\u0131n\u0131z\n                        'headline' => 'Storyblok ve PHP: Yeni Nesil \u0130\u00e7erik Y\u00f6netimi', \/\/ Ba\u015fl\u0131\u011f\u0131 g\u00fcncelledik\n                        'image' => 'https:\/\/a.storyblok.com\/f\/123456\/1200x800\/some_image_updated.jpg',\n                        'call_to_action_text' => 'Hemen Ke\u015ffet',\n                        'call_to_action_link' => '\/blog\/yeni-detaylar'\n                    ],\n                    [\n                        'component' => 'richtext',\n                        '_uid' => uniqid(), \/\/ Bu k\u0131sm\u0131 g\u00fcncellerken mevcut _uid kullanmal\u0131s\u0131n\u0131z\n                        'text' => [\n                            'type' => 'doc',\n                            'content' => [\n                                [\n                                    'type' => 'paragraph',\n                                    'content' => [\n                                        ['type' => 'text', 'text' => 'Bu yaz\u0131, PHP ve Storyblok Y\u00f6netim API\\'sinin g\u00fcncel yeteneklerini sergilemek \u00fczere g\u00fcncellenmi\u015ftir. \u0130\u00e7eriklerinizi dinamik olarak y\u00f6netin.'],\n                                    ],\n                                ],\n                            ],\n                        ],\n                    ],\n                ],\n                'seo_title' => 'PHP Storyblok Geli\u015fmi\u015f Otomasyon',\n                'seo_description' => 'PHP ile Storyblok i\u00e7eriklerini otomatik g\u00fcncelleme ve y\u00f6netme rehberi.',\n            ],\n            'published' => true, \/\/ G\u00fcncelleme sonras\u0131 yay\u0131nlamak i\u00e7in true yap\u0131n\n        ],\n    ];\n\n    $response = $client->put(\"spaces\/{$spaceId}\/stories\/{$storyIdToUpdate}\", [\n        'json' => $updatedStoryData,\n    ]);\n\n    $statusCode = $response->getStatusCode();\n    $body = json_decode($response->getBody()->getContents(), true);\n\n    echo \"Hikaye G\u00fcncellendi! Durum Kodu: \" . $statusCode . \"\\n\";\n    echo \"G\u00fcncellenen Hikaye Ad\u0131: \" . $body['story']['name'] . \"\\n\";\n\n} catch (RequestException $e) {\n    echo \"Hata Olu\u015ftu: \" . $e->getMessage() . \"\\n\";\n    if ($e->hasResponse()) {\n        echo \"Yan\u0131t: \" . $e->getResponse()->getBody()->getContents() . \"\\n\";\n    }\n}\n\n?>\n  <\/pre>\n<p><\/code>\n<\/div>\n<p>G\u00fcncelleme i\u015fleminde dikkat edilmesi gereken en \u00f6nemli nokta, <code>content<\/code> alan\u0131n\u0131 g\u00f6nderirken, hikayenin t\u00fcm mevcut i\u00e7eri\u011fini (bile\u015fenleri dahil) do\u011fru bir \u015fekilde yeniden yap\u0131land\u0131rman\u0131z gerekti\u011fidir. E\u011fer sadece bir bile\u015feni de\u011fi\u015ftirmek istiyorsan\u0131z, genellikle \u00f6nce hikayeyi GET iste\u011fi ile \u00e7ekip, <code>content<\/code> yap\u0131s\u0131n\u0131 PHP'de manip\u00fcle edip, ard\u0131ndan PUT iste\u011fiyle geri g\u00f6ndermek daha g\u00fcvenli bir yakla\u015f\u0131md\u0131r. Aksi takdirde, g\u00f6ndermedi\u011finiz bile\u015fenler silinebilir.<\/p>\n<p>Bu \u00f6rnekler, hikayeleri ve bile\u015fenleri PHP ile nas\u0131l olu\u015fturup g\u00fcncelleyece\u011finize dair temel bir anlay\u0131\u015f sunar. Bu yetenekler, otomatik i\u00e7erik da\u011f\u0131t\u0131m\u0131, \u015fablon tabanl\u0131 i\u00e7erik \u00fcretimi ve dinamik sayfa olu\u015fturma gibi pek \u00e7ok otomasyon senaryosunun temelini olu\u015fturur.<\/p>\n<h3>Dijital Varl\u0131k Y\u00f6netimi: Storyblok'a Resim ve Dosya Y\u00fckleme S\u00fcreci Nas\u0131l \u0130\u015fler?<\/h3>\n<p>Modern web siteleri ve uygulamalar\u0131, metin i\u00e7eri\u011finin yan\u0131 s\u0131ra resimler, videolar, PDF'ler gibi dijital varl\u0131klara (assets) b\u00fcy\u00fck \u00f6l\u00e7\u00fcde ba\u011f\u0131ml\u0131d\u0131r. Storyblok, bu varl\u0131klar\u0131 merkezi bir yerde y\u00f6netmenize olanak tan\u0131r ve Y\u00f6netim API'si arac\u0131l\u0131\u011f\u0131yla bu varl\u0131klar\u0131 programatik olarak y\u00fckleyebilir, g\u00fcncelleyebilir ve silebilirsiniz. PHP ile Storyblok'a dosya y\u00fcklemek, \u00f6zellikle e-ticaret siteleri i\u00e7in \u00fcr\u00fcn g\u00f6rsellerini veya haber siteleri i\u00e7in makale eklerini otomatik olarak senkronize etme gibi senaryolarda hayati \u00f6neme sahiptir.<\/p>\n<p>Storyblok'a dosya y\u00fckleme s\u00fcreci genellikle iki ana ad\u0131mdan olu\u015fur:<\/p>\n<p>1.  <strong>Y\u00fckleme URL'si Talep Etme:<\/strong> Do\u011frudan Storyblok API'sine dosya y\u00fcklemek yerine, Storyblok size ge\u00e7ici bir y\u00fckleme URL'si sa\u011flar. Bu, y\u00fckleme i\u015fleminin daha g\u00fcvenli ve verimli olmas\u0131n\u0131 sa\u011flar.<br \/>\n2.  <strong>Dosyay\u0131 Y\u00fckleme:<\/strong> Ald\u0131\u011f\u0131n\u0131z ge\u00e7ici URL'ye dosyay\u0131 (genellikle bir <code>multipart\/form-data<\/code> iste\u011fi ile) y\u00fcklersiniz.<\/p>\n<p>A\u015fa\u011f\u0131da, bir resim dosyas\u0131n\u0131 Storyblok'a PHP ile nas\u0131l y\u00fckleyece\u011finize dair ad\u0131m ad\u0131m bir \u00f6rnek bulunmaktad\u0131r:<\/p>\n<div class=\"code-container\">\n<pre><code><br \/>\n<?php\n\nrequire 'vendor\/autoload.php';\n\nuse GuzzleHttp\\Client;\nuse GuzzleHttp\\Exception\\RequestException;\nuse Dotenv\\Dotenv;\n\n\/\/ Ortam de\u011fi\u015fkenlerini y\u00fckle\n$dotenv = Dotenv::createImmutable(__DIR__);\n$dotenv->load();<\/p>\n<p>$managementApiToken = getenv('STORYBLOK_MANAGEMENT_API_TOKEN');<br \/>\n$spaceId = getenv('STORYBLOK_SPACE_ID');<\/p>\n<p>if (empty($managementApiToken) || empty($spaceId)) {<br \/>\n    die(\"Hata: Y\u00f6netim API Token'\u0131 veya Alan ID'si tan\u0131mlanmad\u0131.\");<br \/>\n}<\/p>\n<p>$client = new Client([<br \/>\n    'base_uri' => 'https:\/\/api.storyblok.com\/v1\/',<br \/>\n    'headers' => [<br \/>\n        'Authorization' => $managementApiToken,<br \/>\n    ],<br \/>\n]);<\/p>\n<p>\/\/ Y\u00fcklenecek dosyan\u0131n yolu (\u00f6rne\u011fin, projenizin k\u00f6k dizininde bir 'uploads' klas\u00f6r\u00fc olsun)<br \/>\n$filePath = __DIR__ . '\/uploads\/sample-image.jpg';<br \/>\n$fileName = basename($filePath);<br \/>\n$fileSize = filesize($filePath);<br \/>\n$mimeType = mime_content_type($filePath);<\/p>\n<p>if (!file_exists($filePath)) {<br \/>\n    die(\"Hata: Dosya bulunamad\u0131: \" . $filePath);<br \/>\n}<\/p>\n<p>try {<br \/>\n    \/\/ Ad\u0131m 1: Y\u00fckleme URL'si talep etme<br \/>\n    $uploadRequestPayload = [<br \/>\n        'filename' => $fileName,<br \/>\n        'size' => $fileSize,<br \/>\n        'mime_type' => $mimeType,<br \/>\n    ];<\/p>\n<p>    $response = $client->post(\"spaces\/{$spaceId}\/assets\", [<br \/>\n        'json' => $uploadRequestPayload,<br \/>\n        'headers' => [<br \/>\n            'Content-Type' => 'application\/json', \/\/ Bu istek i\u00e7in Content-Type \u00f6nemli<br \/>\n        ],<br \/>\n    ]);<\/p>\n<p>    $statusCode = $response->getStatusCode();<br \/>\n    $body = json_decode($response->getBody()->getContents(), true);<\/p>\n<p>    if ($statusCode !== 200 && $statusCode !== 201) {<br \/>\n        throw new \\Exception(\"Y\u00fckleme URL'si alma hatas\u0131: \" . print_r($body, true));<br \/>\n    }<\/p>\n<p>    $uploadUrl = $body['upload_url'];<br \/>\n    $assetId = $body['asset']['id']; \/\/ Olu\u015fturulan varl\u0131\u011f\u0131n ID<\/p>\n","protected":false},"excerpt":{"rendered":"Storyblok Y\u00f6netim API&#8217;sini PHP ile Otomatikle\u015ftirme: Pratik Bir Rehber G\u00fcn\u00fcm\u00fcz\u00fcn h\u0131zla de\u011fi\u015fen dijital d\u00fcnyas\u0131nda, i\u00e7erik y\u00f6netimi s\u00fcre\u00e7leri i\u015fletmeler i\u00e7in kritik bir \u00f6neme sahiptir.","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"csco_page_header_type":"","csco_page_load_nextpost":"","csco_page_subscribe_form":"","csco_page_contact_form":"","footnotes":""},"categories":[133],"tags":[],"class_list":{"0":"post-41714","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-php","7":"cs-entry","8":"cs-video-wrap"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.5 (Yoast SEO v25.3.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Storyblok Y\u00f6netim API&#039;sini PHP ile Otomatikle\u015ftirme: Pratik Bir Rehber - Kodlar\u0131n Gizemli D\u00fcnyas\u0131<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fatihsoysal.com\/blog\/storyblok-yonetim-apisini-php-ile-otomatiklestirme-pratik-bir-rehber\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Storyblok Y\u00f6netim API&#039;sini PHP ile Otomatikle\u015ftirme: Pratik Bir Rehber\" \/>\n<meta property=\"og:description\" content=\"Storyblok Y\u00f6netim API&#039;sini PHP ile Otomatikle\u015ftirme: Pratik Bir Rehber G\u00fcn\u00fcm\u00fcz\u00fcn h\u0131zla de\u011fi\u015fen dijital d\u00fcnyas\u0131nda, i\u00e7erik y\u00f6netimi s\u00fcre\u00e7leri i\u015fletmeler i\u00e7in kritik bir \u00f6neme sahiptir.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/storyblok-yonetim-apisini-php-ile-otomatiklestirme-pratik-bir-rehber\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2026-05-12T06:00:48+00:00\" \/>\n<meta name=\"author\" content=\"Fatih Soysal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Soysal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/storyblok-yonetim-apisini-php-ile-otomatiklestirme-pratik-bir-rehber\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/storyblok-yonetim-apisini-php-ile-otomatiklestirme-pratik-bir-rehber\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Storyblok Y\u00f6netim API&#8217;sini PHP ile Otomatikle\u015ftirme: Pratik Bir Rehber\",\"datePublished\":\"2026-05-12T06:00:48+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/storyblok-yonetim-apisini-php-ile-otomatiklestirme-pratik-bir-rehber\/\"},\"wordCount\":1945,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"articleSection\":[\"PHP\"],\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/storyblok-yonetim-apisini-php-ile-otomatiklestirme-pratik-bir-rehber\/#respond\"]}],\"copyrightYear\":\"2026\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/storyblok-yonetim-apisini-php-ile-otomatiklestirme-pratik-bir-rehber\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/storyblok-yonetim-apisini-php-ile-otomatiklestirme-pratik-bir-rehber\/\",\"name\":\"Storyblok Y\u00f6netim API'sini PHP ile Otomatikle\u015ftirme: Pratik Bir Rehber - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2026-05-12T06:00:48+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/storyblok-yonetim-apisini-php-ile-otomatiklestirme-pratik-bir-rehber\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/storyblok-yonetim-apisini-php-ile-otomatiklestirme-pratik-bir-rehber\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/storyblok-yonetim-apisini-php-ile-otomatiklestirme-pratik-bir-rehber\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Storyblok Y\u00f6netim API&#8217;sini PHP ile Otomatikle\u015ftirme: Pratik Bir Rehber\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/\",\"name\":\"Fatihsoysal.com\",\"description\":\"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim\",\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\",\"name\":\"Fatih Soysal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"contentUrl\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"width\":512,\"height\":512,\"caption\":\"Fatih Soysal\"},\"logo\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\"},\"description\":\"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Storyblok Y\u00f6netim API'sini PHP ile Otomatikle\u015ftirme: Pratik Bir Rehber - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fatihsoysal.com\/blog\/storyblok-yonetim-apisini-php-ile-otomatiklestirme-pratik-bir-rehber\/","og_locale":"tr_TR","og_type":"article","og_title":"Storyblok Y\u00f6netim API'sini PHP ile Otomatikle\u015ftirme: Pratik Bir Rehber","og_description":"Storyblok Y\u00f6netim API'sini PHP ile Otomatikle\u015ftirme: Pratik Bir Rehber G\u00fcn\u00fcm\u00fcz\u00fcn h\u0131zla de\u011fi\u015fen dijital d\u00fcnyas\u0131nda, i\u00e7erik y\u00f6netimi s\u00fcre\u00e7leri i\u015fletmeler i\u00e7in kritik bir \u00f6neme sahiptir.","og_url":"https:\/\/fatihsoysal.com\/blog\/storyblok-yonetim-apisini-php-ile-otomatiklestirme-pratik-bir-rehber\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2026-05-12T06:00:48+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"6 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/storyblok-yonetim-apisini-php-ile-otomatiklestirme-pratik-bir-rehber\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/storyblok-yonetim-apisini-php-ile-otomatiklestirme-pratik-bir-rehber\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Storyblok Y\u00f6netim API&#8217;sini PHP ile Otomatikle\u015ftirme: Pratik Bir Rehber","datePublished":"2026-05-12T06:00:48+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/storyblok-yonetim-apisini-php-ile-otomatiklestirme-pratik-bir-rehber\/"},"wordCount":1945,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"articleSection":["PHP"],"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/storyblok-yonetim-apisini-php-ile-otomatiklestirme-pratik-bir-rehber\/#respond"]}],"copyrightYear":"2026","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/storyblok-yonetim-apisini-php-ile-otomatiklestirme-pratik-bir-rehber\/","url":"https:\/\/fatihsoysal.com\/blog\/storyblok-yonetim-apisini-php-ile-otomatiklestirme-pratik-bir-rehber\/","name":"Storyblok Y\u00f6netim API'sini PHP ile Otomatikle\u015ftirme: Pratik Bir Rehber - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2026-05-12T06:00:48+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/storyblok-yonetim-apisini-php-ile-otomatiklestirme-pratik-bir-rehber\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/storyblok-yonetim-apisini-php-ile-otomatiklestirme-pratik-bir-rehber\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/storyblok-yonetim-apisini-php-ile-otomatiklestirme-pratik-bir-rehber\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Storyblok Y\u00f6netim API&#8217;sini PHP ile Otomatikle\u015ftirme: Pratik Bir Rehber"}]},{"@type":"WebSite","@id":"https:\/\/fatihsoysal.com\/blog\/#website","url":"https:\/\/fatihsoysal.com\/blog\/","name":"Fatihsoysal.com","description":"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim","publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1","name":"Fatih Soysal","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","contentUrl":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","width":512,"height":512,"caption":"Fatih Soysal"},"logo":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/"},"description":"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.","url":"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/"}]}},"yoast_meta":{"yoast_wpseo_title":"","yoast_wpseo_metadesc":"","yoast_wpseo_canonical":""},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/41714","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/comments?post=41714"}],"version-history":[{"count":0,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/41714\/revisions"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=41714"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=41714"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=41714"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}