{"id":37352,"date":"2026-01-01T01:41:27","date_gmt":"2025-12-31T22:41:27","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/?p=37352"},"modified":"2026-01-01T01:41:27","modified_gmt":"2025-12-31T22:41:27","slug":"rxjste-tamponlama-operatorlerine-giris","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/rxjste-tamponlama-operatorlerine-giris\/","title":{"rendered":"RxJS&#8217;te Tamponlama Operat\u00f6rlerine Giri\u015f"},"content":{"rendered":"<p><body><\/p>\n<p>RxJS, reaktif programlama prensiplerini JavaScript uygulamalar\u0131na ta\u015f\u0131yan g\u00fc\u00e7l\u00fc bir k\u00fct\u00fcphanedir. Zamanla de\u011fi\u015fen veya olay tabanl\u0131 veri ak\u0131\u015flar\u0131n\u0131 (observables) y\u00f6netmek i\u00e7in zengin bir operat\u00f6r seti sunar. Bu operat\u00f6rler aras\u0131nda, veri ak\u0131\u015f\u0131n\u0131 belirli ko\u015fullara g\u00f6re grupland\u0131rarak veya biriktirerek i\u015fleyen <strong>tamponlama (buffering) operat\u00f6rleri<\/strong> \u00f6zel bir yere sahiptir. Bu rehberde, RxJS&#8217;in tamponlama operat\u00f6rlerinin ne oldu\u011funu, nas\u0131l \u00e7al\u0131\u015ft\u0131klar\u0131n\u0131 ve ger\u00e7ek d\u00fcnya senaryolar\u0131nda nas\u0131l kullan\u0131labileceklerini detayl\u0131ca inceleyece\u011fiz.<\/p>\n<h2>RxJS&#8217;te Tamponlama Operat\u00f6rlerine Giri\u015f<\/h2>\n<p>RxJS&#8217;te tamponlama, bir Observable&#8217;dan gelen de\u011ferleri belirli bir s\u00fcre veya belirli bir miktar boyunca biriktirme ve ard\u0131ndan bu birikmi\u015f de\u011ferleri tek bir dizi (array) olarak yayma i\u015flemidir. Bu i\u015flem, genellikle kaynak Observable&#8217;\u0131n \u00e7ok h\u0131zl\u0131 veri \u00fcretmesi veya belirli bir zamanda birden fazla olay\u0131 tek bir toplu i\u015flem olarak ele almak istedi\u011fimiz durumlarda olduk\u00e7a faydal\u0131d\u0131r.<\/p>\n<p><strong>Neden Tamponlama Kullanmal\u0131y\u0131z?<\/strong><\/p>\n<ul>\n<li><strong>Performans \u0130yile\u015ftirme:<\/strong> Her de\u011feri ayr\u0131 ayr\u0131 i\u015flemek yerine, birden fazla de\u011feri toplu olarak i\u015fleyerek uygulama performans\u0131n\u0131 art\u0131rabiliriz. \u00d6rne\u011fin, her tu\u015f vuru\u015funda bir sunucu iste\u011fi g\u00f6ndermek yerine, belirli bir s\u00fcre i\u00e7indeki t\u00fcm tu\u015f vuru\u015flar\u0131n\u0131 toplay\u0131p tek bir istekte g\u00f6nderebiliriz.<\/li>\n<li><strong>Veri Ak\u0131\u015f\u0131 Y\u00f6netimi:<\/strong> Kaynak Observable&#8217;\u0131n h\u0131z\u0131n\u0131 ve t\u00fcketici Observable&#8217;\u0131n i\u015fleme h\u0131z\u0131n\u0131 dengelemek i\u00e7in kullan\u0131labilir. Bu, &#8220;geri bas\u0131n\u00e7&#8221; (backpressure) durumlar\u0131n\u0131 y\u00f6netmeye yard\u0131mc\u0131 olabilir.<\/li>\n<li><strong>API K\u0131s\u0131tlamalar\u0131:<\/strong> Belirli bir zaman diliminde yaln\u0131zca belirli say\u0131da API \u00e7a\u011fr\u0131s\u0131 yapman\u0131za izin veren API&#8217;lerle \u00e7al\u0131\u015f\u0131rken, istekleri tamponlay\u0131p toplu olarak g\u00f6ndermek k\u0131s\u0131tlamalara uyman\u0131za yard\u0131mc\u0131 olabilir.<\/li>\n<li><strong>Kullan\u0131c\u0131 Etkile\u015fimleri:<\/strong> \u00c7ift t\u0131klama alg\u0131lama, s\u00fcr\u00fckle ve b\u0131rak hareketleri gibi birden fazla kullan\u0131c\u0131 etkile\u015fimini tek bir olay olarak ele almak i\u00e7in idealdir.<\/li>\n<\/ul>\n<p>RxJS, bu ihtiya\u00e7lar\u0131 kar\u015f\u0131lamak i\u00e7in \u00e7e\u015fitli tamponlama operat\u00f6rleri sunar: <code>buffer()<\/code>, <code>bufferCount()<\/code>, <code>bufferTime()<\/code>, <code>bufferToggle()<\/code> ve <code>bufferWhen()<\/code>. \u015eimdi bu operat\u00f6rleri tek tek inceleyelim.<\/p>\n<h2>Temel Tamponlama Operat\u00f6rleri<\/h2>\n<h3>buffer()<\/h3>\n<p><code>buffer()<\/code> operat\u00f6r\u00fc, bir &#8220;a\u00e7ma&#8221; (notifier) Observable&#8217;\u0131 taraf\u0131ndan kontrol edilir. Kaynak Observable&#8217;dan gelen de\u011ferleri, a\u00e7ma Observable&#8217;\u0131 bir de\u011fer yayana kadar biriktirir. A\u00e7ma Observable&#8217;\u0131 bir de\u011fer yayd\u0131\u011f\u0131nda, mevcut tamponu bir dizi olarak yayar ve yeni bir tampon olu\u015fturmaya ba\u015flar.<\/p>\n<p><strong>Nas\u0131l \u00c7al\u0131\u015f\u0131r?<\/strong><\/p>\n<p>Kaynak Observable de\u011ferler yaymaya ba\u015flad\u0131\u011f\u0131nda, <code>buffer()<\/code> bunlar\u0131 bir dahili diziye ekler. E\u011fer a\u00e7ma Observable&#8217;\u0131 bir de\u011fer yayarsa, <code>buffer()<\/code> bu dahili diziyi kaynak Observable&#8217;\u0131n abonesine g\u00f6nderir ve dahili diziyi s\u0131f\u0131rlayarak yeni de\u011ferleri toplamaya ba\u015flar.<\/p>\n<pre><code class=\"language-typescript\">import { interval, fromEvent } from 'rxjs';\nimport { buffer } from 'rxjs\/operators';\n\n\/\/ Her 500 ms'de bir say\u0131 yayan kaynak Observable\nconst source = interval(500);\n\n\/\/ Her t\u0131klamada tamponu kapatacak a\u00e7ma Observable'\u0131\nconst clickBufferNotifier = fromEvent(document, 'click');\n\nconst bufferedClicks = source.pipe(\n  buffer(clickBufferNotifier)\n);\n\nbufferedClicks.subscribe(val => {\n  console.log('Tampon kapat\u0131ld\u0131, de\u011ferler:', val);\n});\n\n\/\/ \u00c7\u0131kt\u0131 (\u00d6rnek):\n\/\/ (Kullan\u0131c\u0131 1.5 saniye sonra t\u0131klar)\n\/\/ Tampon kapat\u0131ld\u0131, de\u011ferler: [0, 1, 2]\n\/\/ (Kullan\u0131c\u0131 1 saniye sonra tekrar t\u0131klar)\n\/\/ Tampon kapat\u0131ld\u0131, de\u011ferler: [3, 4]\n<\/code><\/pre>\n<p><strong>Pratik Bilgiler:<\/strong> <code>buffer()<\/code>, kullan\u0131c\u0131 etkile\u015fimleriyle veya ba\u015fka harici olaylarla tetiklenen toplu i\u015flemleri y\u00f6netmek i\u00e7in m\u00fckemmeldir. \u00d6rne\u011fin, bir &#8220;Kaydet&#8221; d\u00fc\u011fmesine bas\u0131ld\u0131\u011f\u0131nda, o ana kadar yap\u0131lan t\u00fcm de\u011fi\u015fiklikleri tek bir pakette g\u00f6nderebilirsiniz.<\/p>\n<h3>bufferCount()<\/h3>\n<p><code>bufferCount()<\/code> operat\u00f6r\u00fc, belirli bir say\u0131da \u00f6\u011fe toplad\u0131ktan sonra tamponu yayar. \u0130ste\u011fe ba\u011fl\u0131 olarak, tamponlar\u0131n ne kadar s\u0131kl\u0131kla a\u00e7\u0131laca\u011f\u0131n\u0131 belirten bir <code>startBufferEvery<\/code> parametresi de alabilir. Bu parametre, kayan pencereler (sliding windows) olu\u015fturman\u0131za olanak tan\u0131r.<\/p>\n<p><strong>Nas\u0131l \u00c7al\u0131\u015f\u0131r?<\/strong><\/p>\n<ul>\n<li>Sadece <code>bufferSize<\/code> ile: Kaynak Observable&#8217;dan gelen ilk <code>bufferSize<\/code> kadar \u00f6\u011feyi toplar, tamponu yayar, sonra yeni bir tampon olu\u015fturur ve ba\u015ftan ba\u015flar.<\/li>\n<li><code>bufferSize<\/code> ve <code>startBufferEvery<\/code> ile: Her <code>startBufferEvery<\/code> kadar \u00f6\u011fe geldi\u011finde yeni bir tampon olu\u015fturur. Bu, \u00f6nceki tamponlar kapanmadan yeni tamponlar\u0131n a\u00e7\u0131lmas\u0131na neden olabilir.<\/li>\n<\/ul>\n<pre><code class=\"language-typescript\">import { interval } from 'rxjs';\nimport { bufferCount } from 'rxjs\/operators';\n\nconst source = interval(1000); \/\/ Her saniye bir say\u0131\n\n\/\/ Her 3 \u00f6\u011fede bir tampon\nsource.pipe(\n  bufferCount(3)\n).subscribe(val => console.log('Her 3 \u00f6\u011fede bir:', val));\n\n\/\/ \u00c7\u0131kt\u0131 (\u00d6rnek):\n\/\/ Her 3 \u00f6\u011fede bir: [0, 1, 2]\n\/\/ Her 3 \u00f6\u011fede bir: [3, 4, 5]\n\n\/\/ Kayan pencere: Her 3 \u00f6\u011fede bir tampon, ancak her 1 \u00f6\u011fede yeni bir tampon ba\u015flat\nsource.pipe(\n  bufferCount(3, 1) \/\/ 3 \u00f6\u011fe topla, her 1 \u00f6\u011fede yeni bir tampon ba\u015flat\n).subscribe(val => console.log('Kayan pencere (3, 1):', val));\n\n\/\/ \u00c7\u0131kt\u0131 (\u00d6rnek):\n\/\/ Kayan pencere (3, 1): [0, 1, 2]\n\/\/ Kayan pencere (3, 1): [1, 2, 3]\n\/\/ Kayan pencere (3, 1): [2, 3, 4]\n<\/code><\/pre>\n<p><strong>Pratik Bilgiler:<\/strong> <code>bufferCount()<\/code>, sayfa numaraland\u0131rma, belirli boyutlardaki veri paketlerini i\u015fleme veya bir dizi veriyi k\u00fc\u00e7\u00fck, y\u00f6netilebilir par\u00e7alara b\u00f6lme gibi senaryolarda kullan\u0131\u015fl\u0131d\u0131r. Kayan pencere \u00f6zelli\u011fi, zaman serisi analizi veya anl\u0131k ortalamalar hesaplamak i\u00e7in kullan\u0131labilir.<\/p>\n<h3>bufferTime()<\/h3>\n<p><code>bufferTime()<\/code> operat\u00f6r\u00fc, belirli bir s\u00fcre boyunca gelen \u00f6\u011feleri toplar ve ard\u0131ndan tamponu yayar. Bu, zaman tabanl\u0131 tamponlama i\u00e7in idealdir. \u0130ste\u011fe ba\u011fl\u0131 olarak, tamponlar\u0131n ne kadar s\u0131kl\u0131kla a\u00e7\u0131laca\u011f\u0131n\u0131 belirten bir <code>bufferCreationInterval<\/code> parametresi de alabilir, bu da kayan pencereler olu\u015fturman\u0131za olanak tan\u0131r.<\/p>\n<p><strong>Nas\u0131l \u00c7al\u0131\u015f\u0131r?<\/strong><\/p>\n<ul>\n<li>Sadece <code>bufferTimeSpan<\/code> ile: Her <code>bufferTimeSpan<\/code> s\u00fcresi doldu\u011funda, o s\u00fcre boyunca toplanan \u00f6\u011feleri yayar ve yeni bir tampon ba\u015flat\u0131r.<\/li>\n<li><code>bufferTimeSpan<\/code> ve <code>bufferCreationInterval<\/code> ile: Her <code>bufferCreationInterval<\/code> s\u00fcresi doldu\u011funda yeni bir tampon olu\u015fturur. Tamponlar <code>bufferTimeSpan<\/code> s\u00fcresi doldu\u011funda yay\u0131l\u0131r. Bu, ayn\u0131 anda birden fazla a\u00e7\u0131k tamponun olmas\u0131na neden olabilir.<\/li>\n<\/ul>\n<pre><code class=\"language-typescript\">import { interval } from 'rxjs';\nimport { bufferTime } from 'rxjs\/operators';\n\nconst source = interval(500); \/\/ Her 500 ms'de bir say\u0131\n\n\/\/ Her 2 saniyede bir tampon\nsource.pipe(\n  bufferTime(2000) \/\/ 2000 ms = 2 saniye\n).subscribe(val => console.log('Her 2 saniyede bir:', val));\n\n\/\/ \u00c7\u0131kt\u0131 (\u00d6rnek):\n\/\/ Her 2 saniyede bir: [0, 1, 2]\n\/\/ Her 2 saniyede bir: [3, 4, 5, 6]\n\n\/\/ Kayan pencere: 1 saniye s\u00fcren tamponlar, her 500 ms'de yeni bir tampon ba\u015flat\nsource.pipe(\n  bufferTime(1000, 500) \/\/ 1 saniye s\u00fcren tampon, her 0.5 saniyede yeni tampon\n).subscribe(val => console.log('Kayan pencere (1000, 500):', val));\n\n\/\/ \u00c7\u0131kt\u0131 (\u00d6rnek):\n\/\/ Kayan pencere (1000, 500): [0, 1]\n\/\/ Kayan pencere (1000, 500): [1, 2]\n\/\/ Kayan pencere (1000, 500): [2, 3]\n<\/code><\/pre>\n<p><strong>Pratik Bilgiler:<\/strong> <code>bufferTime()<\/code>, API isteklerini belirli aral\u0131klarla toplu g\u00f6ndermek, oyunlarda belirli bir s\u00fcre i\u00e7indeki t\u00fcm vuru\u015flar\u0131 saymak veya ger\u00e7ek zamanl\u0131 veri ak\u0131\u015flar\u0131nda periyodik raporlar olu\u015fturmak gibi senaryolarda kullan\u0131l\u0131r.<\/p>\n<h3>bufferToggle()<\/h3>\n<p><code>bufferToggle()<\/code> operat\u00f6r\u00fc, tamponun a\u00e7\u0131lma ve kapanma zamanlar\u0131n\u0131 iki ayr\u0131 Observable ile kontrol etmenizi sa\u011flar. Bir &#8220;a\u00e7ma&#8221; Observable&#8217;\u0131, tamponu a\u00e7ar. Her a\u00e7\u0131lma olay\u0131 i\u00e7in, bir &#8220;kapatma&#8221; Observable&#8217;\u0131 d\u00f6nd\u00fcren bir fonksiyon \u00e7a\u011fr\u0131l\u0131r. Bu kapatma Observable&#8217;\u0131 bir de\u011fer yayd\u0131\u011f\u0131nda, ilgili tampon kapat\u0131l\u0131r ve yay\u0131l\u0131r.<\/p>\n<p><strong>Nas\u0131l \u00c7al\u0131\u015f\u0131r?<\/strong><\/p>\n<p>Kaynak Observable de\u011ferler yayarken, <code>bufferToggle()<\/code> a\u00e7ma Observable&#8217;\u0131n\u0131 dinler. A\u00e7ma Observable&#8217;\u0131 bir de\u011fer yayd\u0131\u011f\u0131nda, yeni bir tampon ba\u015flat\u0131r ve ayn\u0131 zamanda kapatma Observable&#8217;\u0131 \u00fcreten fonksiyonu \u00e7a\u011f\u0131r\u0131r. Bu kapatma Observable&#8217;\u0131 bir de\u011fer yayd\u0131\u011f\u0131nda, o tamponu kapat\u0131r ve yeni bir tampon a\u00e7ar.<\/p>\n<pre><code class=\"language-typescript\">import { interval, timer } from 'rxjs';\nimport { bufferToggle } from 'rxjs\/operators';\n\nconst source = interval(500); \/\/ Her 500 ms'de bir say\u0131\n\n\/\/ A\u00e7ma Observable'\u0131: Her 3 saniyede bir tampon a\u00e7\nconst openings = interval(3000);\n\n\/\/ Kapatma Observable'\u0131 \u00fcreten fonksiyon: Her tampon 2 saniye sonra kapan\u0131r\nconst closingSelector = (val: number) => timer(2000);\n\nsource.pipe(\n  bufferToggle(openings, closingSelector)\n).subscribe(val => console.log('Tampon kapat\u0131ld\u0131 (toggle):', val));\n\n\/\/ \u00c7\u0131kt\u0131 (\u00d6rnek):\n\/\/ (3 saniye sonra a\u00e7\u0131l\u0131r, 2 saniye sonra kapan\u0131r)\n\/\/ Tampon kapat\u0131ld\u0131 (toggle): [0, 1, 2]\n\/\/ (3 saniye sonra a\u00e7\u0131l\u0131r, 2 saniye sonra kapan\u0131r)\n\/\/ Tampon kapat\u0131ld\u0131 (toggle): [6, 7, 8]\n<\/code><\/pre>\n<p><strong>Pratik Bilgiler:<\/strong> <code>bufferToggle()<\/code>, daha karma\u015f\u0131k, olay tabanl\u0131 tamponlama senaryolar\u0131 i\u00e7in uygundur. \u00d6rne\u011fin, bir kullan\u0131c\u0131n\u0131n fareyi bir alana s\u00fcr\u00fckledi\u011finde tamponu a\u00e7\u0131p, fareyi alandan \u00e7\u0131kard\u0131\u011f\u0131nda kapatmak gibi.<\/p>\n<h3>bufferWhen()<\/h3>\n<p><code>bufferWhen()<\/code> operat\u00f6r\u00fc, <code>bufferToggle()<\/code>&#8216;a benzer \u015fekilde dinamik tamponlama sa\u011flar, ancak daha basittir. Tamponu kapatmak ve yeni bir tamponu a\u00e7mak i\u00e7in bir Observable d\u00f6nd\u00fcren bir fonksiyon al\u0131r. Bu fonksiyon, her tampon kapand\u0131\u011f\u0131nda tekrar \u00e7a\u011fr\u0131l\u0131r ve yeni bir kapatma Observable&#8217;\u0131 \u00fcretir.<\/p>\n<p><strong>Nas\u0131l \u00c7al\u0131\u015f\u0131r?<\/strong><\/p>\n<p>Kaynak Observable de\u011ferler yayarken, <code>bufferWhen()<\/code> bir kapatma Observable&#8217;\u0131 \u00fcretmek i\u00e7in sa\u011flanan fonksiyonu \u00e7a\u011f\u0131r\u0131r. Bu kapatma Observable&#8217;\u0131 bir de\u011fer yayd\u0131\u011f\u0131nda, mevcut tamponu kapat\u0131r, yayar ve fonksiyonu tekrar \u00e7a\u011f\u0131rarak yeni bir kapatma Observable&#8217;\u0131 ile yeni bir tampon ba\u015flat\u0131r.<\/p>\n<pre><code class=\"language-typescript\">import { interval, timer } from 'rxjs';\nimport { bufferWhen } from 'rxjs\/operators';\n\nconst source = interval(500); \/\/ Her 500 ms'de bir say\u0131\n\n\/\/ Her tampon 3 saniye sonra kapan\u0131r ve yeni tampon ba\u015flar\nconst closingSelector = () => timer(3000);\n\nsource.pipe(\n  bufferWhen(closingSelector)\n).subscribe(val => console.log('Tampon kapat\u0131ld\u0131 (when):', val));\n\n\/\/ \u00c7\u0131kt\u0131 (\u00d6rnek):\n\/\/ (3 saniye sonra kapan\u0131r)\n\/\/ Tampon kapat\u0131ld\u0131 (when): [0, 1, 2, 3, 4]\n\/\/ (3 saniye sonra kapan\u0131r)\n\/\/ Tampon kapat\u0131ld\u0131 (when): [5, 6, 7, 8, 9]\n<\/code><\/pre>\n<p><strong>Pratik Bilgiler:<\/strong> <code>bufferWhen()<\/code>, tamponun kapanma ko\u015fulunun dinamik olarak belirlenmesi gereken durumlarda kullan\u0131l\u0131r. \u00d6rne\u011fin, bir a\u011f iste\u011finin tamamlanmas\u0131 veya belirli bir i\u015flem bitti\u011finde tamponu kapatmak.<\/p>\n<h2>Do\u011fru Tamponlama Operat\u00f6r\u00fcn\u00fc Se\u00e7mek<\/h2>\n<p>Hangi tamponlama operat\u00f6r\u00fcn\u00fc se\u00e7ece\u011finiz, veri ak\u0131\u015f\u0131n\u0131z\u0131 hangi kriterlere g\u00f6re grupland\u0131rmak istedi\u011finize ba\u011fl\u0131d\u0131r:<\/p>\n<ul>\n<li><strong>Sabit Boyutlu Gruplar \u0130\u00e7in:<\/strong> <code>bufferCount()<\/code>. Belirli bir say\u0131da \u00f6\u011feyi toplamak istedi\u011finizde (\u00f6rne\u011fin, her 10 veri noktas\u0131nda bir i\u015flem yap).<\/li>\n<li><strong>Sabit Zaman Aral\u0131kl\u0131 Gruplar \u0130\u00e7in:<\/strong> <code>bufferTime()<\/code>. Belirli bir s\u00fcre boyunca gelen \u00f6\u011feleri toplamak istedi\u011finizde (\u00f6rne\u011fin, her 5 saniyede bir t\u00fcm t\u0131klamalar\u0131 kaydet).<\/li>\n<li><strong>Harici Bir Olayla Tetiklenen Gruplar \u0130\u00e7in:<\/strong> <code>buffer()<\/code>. Ba\u015fka bir Observable&#8217;dan gelen bir de\u011ferin tamponu kapatmas\u0131n\u0131 istedi\u011finizde (\u00f6rne\u011fin, bir d\u00fc\u011fmeye bas\u0131ld\u0131\u011f\u0131nda).<\/li>\n<li><strong>Dinamik A\u00e7ma\/Kapama Ko\u015fullar\u0131 \u0130\u00e7in:<\/strong> <code>bufferToggle()<\/code> veya <code>bufferWhen()<\/code>. Tamponlar\u0131n a\u00e7\u0131l\u0131\u015f ve kapan\u0131\u015f zamanlar\u0131n\u0131 daha karma\u015f\u0131k, olay tabanl\u0131 veya dinamik ko\u015fullara g\u00f6re kontrol etmek istedi\u011finizde. <code>bufferToggle()<\/code> a\u00e7ma ve kapatmay\u0131 ayr\u0131 ayr\u0131 kontrol ederken, <code>bufferWhen()<\/code> her kapatmadan sonra yeni bir kapatma Observable&#8217;\u0131 \u00fcretir.<\/li>\n<\/ul>\n<h2>Geli\u015fmi\u015f Konular ve Pratik Hususlar<\/h2>\n<h3>Hata Y\u00f6netimi<\/h3>\n<p>Tamponlama operat\u00f6rleri, Observable ak\u0131\u015f\u0131ndaki hatalar\u0131 genellikle tamponun kapanmas\u0131na ve hata i\u00e7eren ak\u0131\u015f\u0131n sonlanmas\u0131na neden olur. Tampon i\u00e7indeki bir de\u011fer hata verirse, bu hata genellikle t\u00fcm ak\u0131\u015f\u0131 etkiler. Bu t\u00fcr durumlar\u0131 y\u00f6netmek i\u00e7in <code>catchError<\/code> operat\u00f6r\u00fcn\u00fc tamponlamadan \u00f6nce veya sonra kullanabilirsiniz. E\u011fer tamponun i\u00e7indeki bir hata t\u00fcm ak\u0131\u015f\u0131 sonland\u0131rmas\u0131n istiyorsan\u0131z, <code>catchError<\/code>&#8216;\u0131 tamponlamadan <em>\u00f6nce<\/em> uygulaman\u0131z gerekebilir, ancak bu durumda hatal\u0131 \u00f6\u011fenin tampona dahil edilmeyece\u011fini unutmay\u0131n.<\/p>\n<h3>Performans ve Bellek T\u00fcketimi<\/h3>\n<p>B\u00fcy\u00fck veya h\u0131zl\u0131 bir kaynak Observable ile \u00e7al\u0131\u015f\u0131rken tamponlama, bellekte ge\u00e7ici olarak b\u00fcy\u00fck miktarda veri tutulmas\u0131na neden olabilir. \u00d6zellikle <code>bufferTime()<\/code> veya <code>bufferCount()<\/code> kullan\u0131rken, tampon boyutlar\u0131n\u0131 (<code>bufferSize<\/code> veya <code>bufferTimeSpan<\/code>) dikkatli se\u00e7mek \u00f6nemlidir. A\u015f\u0131r\u0131 b\u00fcy\u00fck tamponlar bellek s\u0131z\u0131nt\u0131lar\u0131na veya uygulaman\u0131z\u0131n yava\u015flamas\u0131na yol a\u00e7abilir.<\/p>\n<h3>Di\u011fer RxJS Operat\u00f6rleriyle Kar\u015f\u0131la\u015ft\u0131rma<\/h3>\n<p>Tamponlama operat\u00f6rleri, bazen <code>debounceTime()<\/code> veya <code>throttleTime()<\/code> gibi operat\u00f6rlerle kar\u0131\u015ft\u0131r\u0131labilir. Aralar\u0131ndaki temel fark \u015fudur:<\/p>\n<ul>\n<li><strong><code>debounceTime()<\/code>:<\/strong> Bir Observable&#8217;dan gelen de\u011ferleri belirli bir s\u00fcre bekler ve bu s\u00fcre i\u00e7inde ba\u015fka bir de\u011fer gelmezse <em>sadece en son de\u011feri<\/em> yayar. Amac\u0131, h\u0131zl\u0131 art arda gelen olaylardan yaln\u0131zca sonuncuyu almakt\u0131r.<\/li>\n<li><strong><code>throttleTime()<\/code>:<\/strong> Bir Observable&#8217;dan gelen de\u011feri yayar ve ard\u0131ndan belirli bir s\u00fcre boyunca gelen di\u011fer de\u011ferleri yoksayar. Amac\u0131, olaylar\u0131n yay\u0131lma h\u0131z\u0131n\u0131 s\u0131n\u0131rlamakt\u0131r.<\/li>\n<li><strong>Tamponlama Operat\u00f6rleri:<\/strong> Belirli bir s\u00fcre veya say\u0131daki <em>t\u00fcm de\u011ferleri<\/em> toplar ve bunlar\u0131 bir dizi olarak yayar. Amac\u0131, birden fazla de\u011feri toplu olarak i\u015flemektir.<\/li>\n<\/ul>\n<p>Bu operat\u00f6rler farkl\u0131 ama\u00e7lara hizmet eder, ancak bazen bir arada kullan\u0131larak daha karma\u015f\u0131k veri ak\u0131\u015f\u0131 senaryolar\u0131 olu\u015fturulabilir.<\/p>\n<h2>Sonu\u00e7<\/h2>\n<p>RxJS tamponlama operat\u00f6rleri, reaktif programlamada veri ak\u0131\u015f\u0131n\u0131 y\u00f6netmek i\u00e7in son derece g\u00fc\u00e7l\u00fc ve esnek ara\u00e7lard\u0131r. \u0130ster belirli say\u0131da \u00f6\u011feyi, ister belirli bir zaman dilimi i\u00e7indeki \u00f6\u011feleri, isterse de harici olaylarla tetiklenen \u00f6\u011feleri grupland\u0131rmak isteyin, RxJS&#8217;in sundu\u011fu zengin tamponlama operat\u00f6rleri koleksiyonunda ihtiyac\u0131n\u0131za uygun bir \u00e7\u00f6z\u00fcm mutlaka bulacaks\u0131n\u0131z. Bu operat\u00f6rleri do\u011fru bir \u015fekilde anlamak ve uygulamalar\u0131n\u0131zda kullanmak, daha verimli, tepkisel ve y\u00f6netilebilir kod yazman\u0131za olanak tan\u0131r. Uygulamalar\u0131n\u0131zda bu operat\u00f6rleri denemekten ve farkl\u0131 senaryolarda nas\u0131l davrand\u0131klar\u0131n\u0131 ke\u015ffetmekten \u00e7ekinmeyin.<\/p>\n<h3>S\u0131k\u00e7a Sorulan Sorular (SSS)<\/h3>\n<h4><code>buffer()<\/code> ile <code>bufferCount()<\/code> aras\u0131ndaki temel fark nedir?<\/h4>\n<p><code>buffer()<\/code> operat\u00f6r\u00fc, tamponun ne zaman kapat\u0131laca\u011f\u0131n\u0131 ve yay\u0131laca\u011f\u0131n\u0131 harici bir &#8220;a\u00e7ma&#8221; Observable&#8217;\u0131 belirler. \u00d6rne\u011fin, bir d\u00fc\u011fmeye t\u0131klama gibi bir olayla tetiklenir. <code>bufferCount()<\/code> ise, kaynak Observable&#8217;dan belirli say\u0131da (<code>bufferSize<\/code>) \u00f6\u011fe geldi\u011finde tamponu kapat\u0131r ve yayar. Yani, <code>buffer()<\/code> olay tabanl\u0131, <code>bufferCount()<\/code> ise say\u0131 tabanl\u0131d\u0131r.<\/p>\n<h4>Tamponlar bellek sorunlar\u0131na neden olabilir mi?<\/h4>\n<p>Evet, \u00f6zellikle kaynak Observable \u00e7ok h\u0131zl\u0131 veri \u00fcretiyorsa ve tamponlama operat\u00f6r\u00fc \u00e7ok uzun bir s\u00fcre veya \u00e7ok fazla \u00f6\u011fe biriktirecek \u015fekilde yap\u0131land\u0131r\u0131lm\u0131\u015fsa, bellekte ge\u00e7ici olarak b\u00fcy\u00fck miktarda veri tutulmas\u0131na neden olabilir. Bu durum, bellek t\u00fcketiminin artmas\u0131na ve uygulaman\u0131z\u0131n performans\u0131n\u0131n d\u00fc\u015fmesine yol a\u00e7abilir. Bu nedenle, tampon boyutlar\u0131n\u0131 (<code>bufferTimeSpan<\/code>, <code>bufferSize<\/code>) dikkatli bir \u015fekilde belirlemek \u00f6nemlidir.<\/p>\n<h4>Tamponlar <code>debounceTime<\/code> veya <code>throttleTime<\/code> ile nas\u0131l kar\u015f\u0131la\u015ft\u0131r\u0131l\u0131r?<\/h4>\n<p><code>debounceTime<\/code> ve <code>throttleTime<\/code> operat\u00f6rleri, bir Observable&#8217;dan gelen tekil de\u011ferlerin yay\u0131lmas\u0131n\u0131 kontrol eder. <code>debounceTime<\/code>, bir dizi olay\u0131n sonuncusunu yayarken, <code>throttleTime<\/code> belirli bir s\u00fcre boyunca sadece ilk olay\u0131 yayar ve di\u011ferlerini yoksayar. Tamponlama operat\u00f6rleri ise, birden \u00e7ok de\u011feri tek bir dizi (array) halinde toplar ve yayar. Yani, <code>debounceTime<\/code>\/<code>throttleTime<\/code> filtreleme ve h\u0131z kontrol\u00fc yaparken, tamponlama toplama (batching) i\u015flemi yapar.<\/p>\n<h4>Tamponlamadan ne zaman ka\u00e7\u0131nmal\u0131y\u0131m?<\/h4>\n<p>Her \u00f6\u011fenin an\u0131nda ve ba\u011f\u0131ms\u0131z olarak i\u015flenmesi gereken durumlarda tamponlamadan ka\u00e7\u0131nmal\u0131s\u0131n\u0131z. Ayr\u0131ca, bellek k\u0131s\u0131tlamalar\u0131 \u00e7ok darsa ve tampon boyutu \u00fczerinde yeterli kontrol sa\u011flayam\u0131yorsan\u0131z, veya <code>debounceTime<\/code> veya <code>throttleTime<\/code> gibi daha basit bir filtreleme\/h\u0131z kontrol\u00fc yeterliyse tamponlama gereksiz karma\u015f\u0131kl\u0131k getirebilir.<\/p>\n<p><\/body><\/p>\n","protected":false},"excerpt":{"rendered":"RxJS, reaktif programlama prensiplerini JavaScript uygulamalar\u0131na ta\u015f\u0131yan g\u00fc\u00e7l\u00fc bir k\u00fct\u00fcphanedir. Zamanla de\u011fi\u015fen veya olay tabanl\u0131 veri","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":[1],"tags":[],"class_list":{"0":"post-37352","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-genel","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>RxJS&#039;te Tamponlama Operat\u00f6rlerine Giri\u015f - 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\/rxjste-tamponlama-operatorlerine-giris\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"RxJS&#039;te Tamponlama Operat\u00f6rlerine Giri\u015f\" \/>\n<meta property=\"og:description\" content=\"RxJS, reaktif programlama prensiplerini JavaScript uygulamalar\u0131na ta\u015f\u0131yan g\u00fc\u00e7l\u00fc bir k\u00fct\u00fcphanedir. Zamanla de\u011fi\u015fen veya olay tabanl\u0131 veri\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/rxjste-tamponlama-operatorlerine-giris\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-12-31T22:41:27+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=\"12 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/rxjste-tamponlama-operatorlerine-giris\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/rxjste-tamponlama-operatorlerine-giris\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"RxJS&#8217;te Tamponlama Operat\u00f6rlerine Giri\u015f\",\"datePublished\":\"2025-12-31T22:41:27+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/rxjste-tamponlama-operatorlerine-giris\/\"},\"wordCount\":1932,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/rxjste-tamponlama-operatorlerine-giris\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/rxjste-tamponlama-operatorlerine-giris\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/rxjste-tamponlama-operatorlerine-giris\/\",\"name\":\"RxJS'te Tamponlama Operat\u00f6rlerine Giri\u015f - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-12-31T22:41:27+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/rxjste-tamponlama-operatorlerine-giris\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/rxjste-tamponlama-operatorlerine-giris\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/rxjste-tamponlama-operatorlerine-giris\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"RxJS&#8217;te Tamponlama Operat\u00f6rlerine Giri\u015f\"}]},{\"@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":"RxJS'te Tamponlama Operat\u00f6rlerine Giri\u015f - 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\/rxjste-tamponlama-operatorlerine-giris\/","og_locale":"tr_TR","og_type":"article","og_title":"RxJS'te Tamponlama Operat\u00f6rlerine Giri\u015f","og_description":"RxJS, reaktif programlama prensiplerini JavaScript uygulamalar\u0131na ta\u015f\u0131yan g\u00fc\u00e7l\u00fc bir k\u00fct\u00fcphanedir. Zamanla de\u011fi\u015fen veya olay tabanl\u0131 veri","og_url":"https:\/\/fatihsoysal.com\/blog\/rxjste-tamponlama-operatorlerine-giris\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-12-31T22:41:27+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"12 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/rxjste-tamponlama-operatorlerine-giris\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/rxjste-tamponlama-operatorlerine-giris\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"RxJS&#8217;te Tamponlama Operat\u00f6rlerine Giri\u015f","datePublished":"2025-12-31T22:41:27+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/rxjste-tamponlama-operatorlerine-giris\/"},"wordCount":1932,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/rxjste-tamponlama-operatorlerine-giris\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/rxjste-tamponlama-operatorlerine-giris\/","url":"https:\/\/fatihsoysal.com\/blog\/rxjste-tamponlama-operatorlerine-giris\/","name":"RxJS'te Tamponlama Operat\u00f6rlerine Giri\u015f - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-12-31T22:41:27+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/rxjste-tamponlama-operatorlerine-giris\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/rxjste-tamponlama-operatorlerine-giris\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/rxjste-tamponlama-operatorlerine-giris\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"RxJS&#8217;te Tamponlama Operat\u00f6rlerine Giri\u015f"}]},{"@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\/37352","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=37352"}],"version-history":[{"count":1,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/37352\/revisions"}],"predecessor-version":[{"id":37353,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/37352\/revisions\/37353"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=37352"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=37352"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=37352"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}