Bun API'ye Başlarken

En heyecan verici araçlardan biri Bun. Hızlı, hepsi bir arada JavaScript aracı. Geliştirici verimliliği ve uygulama performansını artırır. Runtime, bundler, test çalıştırıcı ve daha fazlası tek bir yürütülebilir dosyada.

Efe Demir

Efe Demir

5 June 2025

Bun API'ye Başlarken

```html

En heyecan verici son geliştirme araçlarından biri, geliştirici verimliliğini ve uygulama performansını artırmak için tasarlanmış, inanılmaz derecede hızlı, hepsi bir arada bir JavaScript araç takımı olan Bun'dır. Bun sadece başka bir çalışma zamanı değil; bir çalışma zamanı, paketleyici, test çalıştırıcısı, paket yöneticisi ve daha fazlasını tek bir yerel yürütülebilir dosya içinde birleştiren uyumlu bir ekosistemdir. Bu kılavuz, temel kavramlarına ve güçlü API'lerine odaklanarak, Bun'ın temel özelliklerini size tanıtacaktır.

💡
Harika bir API Test aracı mı arıyorsunuz? güzel API Dokümantasyonu oluşturur?

Geliştirici Ekibinizin maksimum verimlilikle birlikte çalışması için entegre, Hepsi Bir Arada bir platform mu istiyorsunuz?

Apidog tüm taleplerinizi karşılıyor ve Postman'in yerini çok daha uygun bir fiyata alıyor!
button

Bun Nedir?

Temelinde, Bun yüksek performanslı bir JavaScript çalışma zamanı motoru üzerine kurulmuştur. Google'ın V8 motorunu kullanan Node.js'in aksine, Bun, Safari'ye güç veren Apple'ın JavaScriptCore (JSC) motorunu kullanır. Bu seçim, Bun'ın düşük seviyeli Zig programlama dilindeki uygulamasıyla birleştiğinde, dikkate değer hızına önemli ölçüde katkıda bulunur. Bun uygulamaları için başlangıç süreleri genellikle eşdeğer Node.js uygulamalarından önemli ölçüde daha hızlı, bazen dört veya daha fazla kat daha hızlı olarak ölçülür. Bu hız avantajı sadece başlangıçla sınırlı değildir; Bun'ın çeşitli API'lerinin dahili uygulamaları, maksimum verim ve minimum bellek kullanımı için optimize edilmiştir.

Ancak Bun'ın hedefi, sadece daha hızlı bir çalışma zamanı olmanın ötesine geçmektedir. Ortak geliştirici ihtiyaçlarını doğrudan ele alan kapsamlı bir araç takımı olmayı hedefliyor:

  1. Entegre Araçlar: bun komutunun kendisi, çok sayıda işlevsellik için giriş noktası olarak hareket eder. bun run, package.json içinde tanımlanan komut dosyalarını yürütür, bun install bağımlılıkları yönetir (genellikle npm veya yarn'dan çok daha hızlıdır), bun test Jest uyumlu bir API kullanarak testleri çalıştırır, bun build kodu üretim için paketler ve bunx paketleri açıkça yüklemeden yürütür. Bu entegrasyon, gerekli farklı geliştirme araçlarının sayısını azaltarak iş akışlarını basitleştirir.
  2. Yerel TypeScript ve JSX Desteği: Bun'ın öne çıkan özelliklerinden biri, TypeScript (.ts, .tsx) ve JSX (.jsx) dosyaları için kutudan çıktığı gibi destek sunmasıdır. Bun, bu dosya türlerini yürütme veya paketleme sırasında sorunsuz bir şekilde işleyen, yerleşik, yüksek oranda optimize edilmiş bir derleyici içerir. Bu, birçok yaygın geliştirme senaryosu için tsc veya Babel içeren ayrı derleme adımlarına olan ihtiyacı ortadan kaldırır ve kurulum sürecini kolaylaştırır.
  3. Modül Sistemi Uyumluluğu: Bun, ES Modülleri (ESM) için birinci sınıf destekle modern JavaScript'i benimser. Ancak, CommonJS (CJS) üzerine kurulu geniş mevcut ekosistemi tanır. Bun, her iki modül sistemi için de sağlam uyumluluk sağlar ve geliştiricilerin import ve require'ı büyük ölçüde birbirinin yerine kullanabilmelerini ve npm'de bulunan milyonlarca mevcut CJS paketinden yararlanabilmelerini sağlar.
  4. Web Standart API'lerine Uygunluk: Temel bir tasarım ilkesi, standart Web API'lerinin uygulanmasıdır. fetch, Request, Response, Headers, WebSocket ve Streams API (ReadableStream, WritableStream) gibi işlevler ve nesneler, Bun genel kapsamına yerleştirilmiştir. Bu, sunucu tarafı Bun ortamları, tarayıcı ön uçları ve kenar bilişim platformları arasında kod taşınabilirliğini teşvik ederek, geliştiricilerin farklı bağlamlarda tanıdık API'leri yeniden kullanmalarına olanak tanır.
  5. Node.js Uyumluluğu: Optimize edilmiş API'ler ve Web standartlarıyla kendi yolunu çizerken, Bun, Node.js API yüzeyiyle yüksek derecede uyumluluk hedeflemektedir. Birçok yerleşik Node.js modülü (node:fs, node:path, node:os, node:events, vb.) ve genel nesneler (process, Buffer, __filename, __dirname) kısmen veya tamamen uygulanmıştır. Amaç, birçok mevcut Node.js projesinin ve npm paketinin, Bun'da minimum veya hiç değişiklik yapmadan çalışmasına izin vererek, Bun'ı çok sayıda durumda potansiyel bir "yerine geçme" olarak konumlandırmaktır.

Bun, bu öğeleri birleştirerek, performans, basitlik ve modern bir geliştirme deneyimi arayan JavaScript ve TypeScript geliştiricileri için cazip bir alternatif sunmaktadır.

Bun Nasıl Yüklenir

Bun'a başlamak, çeşitli platformlarda hızlı ve kolay olacak şekilde tasarlanmıştır. macOS, Linux ve Windows Subsystem for Linux (WSL) için en yaygın yöntem, terminalinizde yürütülen basit bir curl komutu kullanır:

curl -fsSL https://bun.sh/install | bash

Bu komut, bir yükleme komut dosyasını indirir ve doğrudan bash'e yönlendirir. Komut dosyası, işletim sisteminizi ve mimarinizi algılamayı, uygun Bun yürütülebilir dosyasını indirmeyi ve genellikle ~/.bun/bin'e yüklemeyi yönetir. Ayrıca, ~/.bun/bin'i sisteminizin PATH'ine eklemek için kabuğunuzun yapılandırma dosyasını (.zshrc, .bashrc veya .bash_profile gibi) güncellemeye çalışır ve bun komutunu genel olarak kullanılabilir hale getirir. Değişikliklerin hemen etkili olması için terminal oturumunuzu yeniden başlatmanız veya kabuk yapılandırma dosyanızı (örneğin, source ~/.zshrc) manuel olarak kaynaklamanız gerekebilir.

İzin sorunlarıyla karşılaşırsanız veya doğrudan bash'e yönlendirmek istemiyorsanız, önce komut dosyasını indirebilir ve çalıştırmadan önce inceleyebilirsiniz:

curl -fsSL https://bun.sh/install -o install.sh
# İstenirse install.sh'i inceleyin
bash install.sh

Diğer Yükleme Yöntemleri:

npm install -g bun
docker run --rm --init --ulimit memlock=-1:-1 oven/bun:latest bun --version
brew tap oven-sh/bun
brew install bun

Doğrulama:

Yüklendikten sonra, yeni bir terminal penceresi açın ve sürümü kontrol ederek yüklemeyi doğrulayın:

bun --version

Bu, yüklü sürüm numarasını çıkarmalı ve Bun'ın kullanıma hazır olduğunu doğrulamalıdır. Ayrıca, mevcut komutların ve seçeneklerin bir listesini görmek için bun --help komutunu çalıştırabilirsiniz.

Bun'ınızı İlk Kez Çalıştırın

Bun ile basit bir program yazmaya ve çalıştırmaya dalalım. En yaygın görevlerden biri bir HTTP sunucusu oluşturmaktır. Bun, bu amaç için yerleşik, yüksek oranda optimize edilmiş bir API sağlar: Bun.serve.

server.js (veya Bun'ın her ikisini de işlediği gibi server.ts) adlı yeni bir dosya oluşturun:

// server.ts

// Bun.serve, HTTP sunucusunu başlatır
const server = Bun.serve({
  // Dinlenecek bağlantı noktasını belirtin.
  // Varsayılan olarak process.env.PORT || 3000
  port: 3000,

  // 'fetch' işlevi, temel istek işleyicisidir.
  // Standart bir Request nesnesi alır ve bir Response nesnesi (veya birine çözülen bir Promise) döndürmelidir.
  fetch(request: Request): Response {
    // Standart bir Web API Response nesnesi oluşturun
    return new Response("Bun'a Hoş Geldiniz!");
  },
});

// Sunucunun çalıştığını belirten bir mesajı günlüğe kaydedin
console.log(`http://localhost:${server.port} adresinde dinleniyor`);

Bu kod parçacığı aşağıdakileri yapar:

  1. Bun'da HTTP sunucuları oluşturmak için birincil işlev olan Bun.serve'ü çağırır.
  2. port'u (bu durumda 3000) belirten bir yapılandırma nesnesi geçirir.
  3. En önemli kısım fetch işlevidir. Bu işlev, gelen her HTTP isteği için çağrılır. Standart bir Request nesnesi kabul ederek Service Worker getirme olayı işleyici kalıbıyla uyumludur.
  4. fetch içinde, standart bir Response nesnesi oluşturur ve döndürürüz. Burada, sadece düz metin "Bun'a Hoş Geldiniz!" döndürüyoruz.
  5. Son olarak, sunucunun dinlediği gerçek bağlantı noktasını (server.port aracılığıyla erişilebilir) içeren bir onay mesajını konsola günlüğe kaydederiz.

Bu sunucuyu çalıştırmak için, dosyayı kaydettiğiniz dizinde terminalinizi açın ve şunu yürütün:

bun run server.ts

Veya, server.js olarak kaydettiyseniz:

bun run server.js

Bun, komut dosyasını yürütecektir. TypeScript (server.ts) kullandıysanız, Bun'ın dahili derleyicisi, yürütülmeden önce JavaScript'e dönüştürmeyi anında halledecektir. "http://localhost:3000 adresinde dinleniyor" mesajını göreceksiniz.

Şimdi, web tarayıcınızı açın ve http://localhost:3000 adresine gidin. "Bun'a Hoş Geldiniz!" metnini görmelisiniz.

Sunucuyu durdurmak için, terminalinize geri dönün ve Ctrl + C tuşlarına basın.

Bu basit örnek, temel bir sunucuyu kurmanın ve (TypeScript dahil) kodu doğrudan Bun ile çalıştırmanın, entegre doğasını ve Request ve Response gibi Web Standart API'lerine olan bağımlılığını sergileyerek kolaylığını göstermektedir.

Bun'daki Yerel TypeScript Desteği Nedir

Bun'ın en önemli avantajlarından biri, özellikle zaten TypeScript kullanan veya benimsemek isteyen geliştiriciler için, birinci sınıf, kutudan çıktığı gibi destek sunmasıdır. TypeScript'i çalıştırmanın genellikle TypeScript derleyicisi (tsc) kullanılarak önceden derlenmesini veya ts-node veya tsx gibi yükleyiciler/kayıt defterleri kullanmasını gerektiren Node.js'in aksine, Bun bunu yerel olarak ve şeffaf bir şekilde halleder.

Nasıl Çalışır:

Bun'dan bir .ts veya .tsx dosyasını (örneğin, bun run myscript.ts) çalıştırmasını istediğinizde, otomatik olarak dahili derleyicisini çağırır. Bu derleyici, yerel kodda (Zig) yazılmıştır ve son derece hızlıdır. Görevi şunlardır:

  1. Türleri Kaldır: Standart JavaScript yürütmesinin bir parçası olmadıkları için TypeScript tür açıklamalarını, arabirimleri, numaralandırmaları vb. kaldırın.
  2. Sözdizimini Dönüştür: TypeScript'e özgü sözdizimini (belirli enum kullanımları veya yapılandırılmışsa eski dekoratör sözdizimi gibi) eşdeğer JavaScript'e dönüştürün.
  3. JSX'i İşle: JSX sözdizimini (.tsx ve .jsx dosyalarında kullanılır) standart JavaScript işlev çağrılarına (tipik olarak React.createElement veya yapılandırılmış bir JSX çalışma zamanı eşdeğeri) dönüştürün.

En önemli avantajı, bunun yürütme (bun run) veya paketleme (bun build) işlemi sırasında anında gerçekleşmesidir. Geliştirme sırasında TypeScript kodunuzu çalıştırmak için ayrı, açık bir derleme adımına gerek yoktur.

Örnek:

Bu TypeScript dosyasını (greet.ts) düşünün:

// greet.ts
interface User {
  name: string;
  id: number;
}

function greetUser(user: User): void {
  console.log(`Merhaba, ${user.name} (ID: ${user.id})!`);
}

const myUser: User = { name: "Bun Geliştiricisi", id: 123 };

greetUser(myUser);

// Bun'ın desteklediği modern özellikleri bile kullanabilirsiniz
const message = `Bun sürümü: ${Bun.version}`;
console.log(message);

Bunu doğrudan çalıştırabilirsiniz:

bun run greet.ts

Bun, bunu dahili olarak derleyecek ve ortaya çıkan JavaScript'i yürütecek ve şuna benzer bir çıktı üretecektir:

Merhaba, Bun Geliştiricisi (ID: 123)!
Bun sürümü: 1.x.y

JSX Desteği:

Benzer şekilde, JSX içeren bir .tsx dosyanız varsa:

// component.tsx

// JSX yapılandırıldığını varsayarsak (Bun varsayılanları genellikle React ile çalışır)
function MyComponent({ name }: { name: string }) {
  return <div className="greeting">Merhaba, {name}!</div>;
}

// NOT: Bunu doğrudan çalıştırmak HTML oluşturmaz,
// sadece derlenmiş JS yapısını gösterir.
// Genellikle bunu daha büyük bir uygulama veya çerçeve içinde kullanırsınız.
console.log("Bileşen oluşturmayı simüle etme (derlenmiş çıktı yapısı):");
// Gerçek çıktı, JSX dönüşüm ayarlarına bağlıdır,
// ancak JavaScript nesneleri/işlev çağrıları olacaktır.

bun run component.tsx'i çalıştırmak, dosyayı yürütecek ve JSX'i JavaScript'e derleyecektir.

Yapılandırma (tsconfig.json):

Bun, derleme işlemini etkileyen yapılandırma seçenekleri için tsconfig.json dosyalarına saygı duyar. tsc gibi tam tür denetimi yapmazken (Bun, yürütme ve derleme hızına odaklanır), tsconfig.json'ı şunlar gibi ayarları anlamak için okur:

tsconfig.json bulunamazsa, Bun mantıklı varsayılan ayarları kullanır.

Bu sorunsuz entegrasyon, Bun ile TypeScript projelerine başlamayı inanılmaz derecede basit ve hızlı hale getirerek, giriş engelini düşürür ve geliştirme döngülerini hızlandırır.

Bun'a Özgü API'lerden Bahsedelim

Bun, Web Standart API'leri ve Node.js ile uyumluluğa büyük önem verirken, aynı zamanda genel Bun nesnesi altında kendi optimize edilmiş, yerleşik API'lerini de sunar. Bu API'ler genellikle, Bun'ın yerel kod yeteneklerinden yararlanan ortak görevler için yüksek performanslı alternatifler veya kullanışlı sarmalayıcılar sağlar.

Bazı temel Bun.* API'lerine bir bakış:

Bu API'ler, Bun'ın ortak geliştirme görevleri için optimize edilmiş, yerleşik çözümler sağlama, harici bağımlılıklara olan bağımlılığı azaltma ve yerel çekirdeğinin hızından yararlanma çabasını temsil eder.

Bun'daki Web API'leri

Bun'daki temel bir tasarım seçimi, standart Web API'lerini uygulama konusundaki güçlü taahhüdüdür. Belirli bir görev için (özellikle ağ oluşturma ve veri işleme için) standart bir API mevcutsa, Bun, tescilli bir API icat etmek veya yalnızca Node.js sözleşmelerine güvenmek yerine, o standardı uygulamayı tercih eder.

Bu yaklaşım, çeşitli önemli avantajlar sunar:

  1. Kod Taşınabilirliği: Standart Web API'leri kullanılarak yazılan kod, daha az değişiklikle farklı JavaScript ortamlarında (tarayıcı, Node.js (giderek Web standartlarını da benimsemektedir), Deno, Cloudflare Workers ve Bun) yeniden kullanılabilir.
  2. Tanıdıklık: Zaten tarayıcı API'lerine aşina olan geliştiriciler, Bun ile çalışırken bu bilgiden yararlanabilir ve öğrenme eğrisini azaltabilir.
  3. Geleceğe Hazırlık: WHATWG ve W3C gibi kuruluşlar tarafından oluşturulan standartlara uyum sağlamak, genellikle uzun vadede daha istikrarlı ve yaygın olarak desteklenen API'lere yol açar.
  4. Performans: Bun'ın bu Web API'lerinin yerel uygulamaları, çalışma zamanı için yüksek oranda optimize edilmiştir.

Bun'da uygulanan temel Web Standart API'leri şunlardır:

Fetch API:

URL API:

Streams API:

Kodlama API'si:

Blob API:

FormData API:

WebSocket API:

Zamanlayıcılar:

Konsol API'si:

Kripto API'si:

Performans API'si:

Bun, bu temel Web API'lerinin sağlam, performanslı uygulamalarını sağlayarak, web sunucuları, API'ler ve diğer ağ merkezli uygulamaları tanıdık, standartlaştırılmış arayüzler kullanarak oluşturmak için uygun, modern bir çalışma zamanı olarak konumlanmaktadır.

Bun HTTP Sunucusu, Açıklaması

Bun'da web sunucuları oluşturmanın birincil yolu, Bun.serve API'sidir. Olağanüstü performans ve kullanım kolaylığı için tasarlanmıştır ve Request, Response ve fetch gibi standart Web API'leriyle sorunsuz bir şekilde entegre olur.

Temel Kavramlar:

Bun.serve işlevi, bir yapılandırma nesnesi alır ve bir Server nesnesi döndürür. Yapılandırmanın en kritik kısmı fetch işlevidir.

import { type Server } from "bun";

const server: Server = Bun.serve({
  port: 8080, // Dinlenecek bağlantı noktası
  hostname: "0.0.0.0", // Bağlanılacak ağ arabirimi (tümü için 0.0.0.0)

  // fetch: Sunucunun kalbi - gelen istekleri işler
  async fetch(req: Request, server: Server): Promise<Response> {
    // req, standart bir Web API Request nesnesidir
    // server, Server örneğinin kendisine bir referanstır

    const url = new URL(req.url);

    // Temel Yönlendirme Örneği
    if (url.pathname === "/") {
      return new Response("Ana Sayfa");
    }
    if (url.pathname === "/about") {
      return new Response("Hakkımızda sayfası");
    }
    if (url.pathname === "/greet" && req.method === "GET") {
        const name = url.searchParams.get("name") || "Dünya";
        return new Response(`Merhaba, ${name}!`);
    }
     if (url.pathname === "/data" && req.method === "POST") {
        try {
            const data = await req.json(); // İstek gövdesini JSON olarak okuyun
            console.log("Alınan veri:", data);
            return new Response(JSON.stringify({ received: data }), {
               headers: { 'Content-Type': 'application/json' }
            });
        } catch (e) {
            return new Response("Geçersiz JSON gövdesi", { status: 400 });
        }
    }

    // Varsayılan 404 Bulunamadı
    return new Response("Sayfa Bulunamadı", { status: 404 });
  },

  // error: fetch işleyicisi *dışında* meydana gelen hatalar için isteğe bağlı işleyici
  error(error: Error): Response | Promise<Response> {
    console.error("[Sunucu Hatası]", error);
    return new Response("Bir şeyler ters gitti!", { status: 500 });
  },

  // development: Yardımcı geliştirme hata sayfaları için true olarak ayarlayın (varsayılan: !process.env.NODE_ENV=production)
   development: true,

   // Gelişmiş kullanım durumları için 'websocket', 'tls' gibi diğer seçenekler mevcuttur
});

console.log(`Bun sunucusu http://${server.hostname}:${server.port} adresinde dinliyor`);

// Sunucu nesnesiyle etkileşim kurabilirsiniz:
// server.stop() // Sunucuyu durdurur
// server.reload({...}) // Sunucu yapılandırmasını dinamik olarak günceller (örneğin, getirme işleyicisi)

Temel Özellikler:

Explore more

Fathom-R1-14B: Hindistan'dan Gelişmiş Yapay Zeka Muhakeme Modeli

Fathom-R1-14B: Hindistan'dan Gelişmiş Yapay Zeka Muhakeme Modeli

Yapay zeka hızla gelişiyor. FractalAIResearch/Fathom-R1-14B, 14.8 milyar parametreyle matematik ve genel akıl yürütmede başarılı.

5 June 2025

Mistral Code: İşletmeler için En Özelleştirilebilir Yapay Zeka Destekli Kodlama Asistanı

Mistral Code: İşletmeler için En Özelleştirilebilir Yapay Zeka Destekli Kodlama Asistanı

Mistral Code'u keşfedin: Kurumsal kullanıma özel, en özelleştirilebilir yapay zeka destekli kodlama asistanı.

5 June 2025

Claude Code'un 2025'te Yapay Zeka Kodlamasını Nasıl Dönüştürdüğü

Claude Code'un 2025'te Yapay Zeka Kodlamasını Nasıl Dönüştürdüğü

Claude Code, 2025'te yapay zeka destekli kodlamayı nasıl devrimleştiriyor? Özelliklerini, kullanımını ve Windsurf kısıtlamalarından sonra neden popüler olduğunu öğrenin. Geliştiriciler için okunması gereken!

5 June 2025

API Tasarım-Öncelikli Yaklaşımı Apidog'da Uygulayın

API'leri oluşturmanın ve kullanmanın daha kolay yolunu keşfedin