Heroku API Kullanımı: Kapsamlı Entegrasyon Rehberi (2026)

Ashley Innocent

Ashley Innocent

25 March 2026

Heroku API Kullanımı: Kapsamlı Entegrasyon Rehberi (2026)

TL;DR

Heroku API, geliştiricilerin dağıtımı otomatikleştirmesini, uygulamaları yönetmesini, eklentileri yapılandırmasını ve altyapıyı programlı olarak ölçeklendirmesini sağlar. OAuth 2.0 ve jeton tabanlı kimlik doğrulama, uygulamalar, dyno'lar, derlemeler ve işlem hatları için RESTful uç noktaları kullanır ve hesap başına saatte 10.000 istek limitine sahiptir. Bu kılavuz, kimlik doğrulama kurulumunu, temel uç noktaları, CI/CD entegrasyonunu ve üretim dağıtım stratejilerini kapsar.

Giriş

Heroku, 170'ten fazla ülkede 4 milyondan fazla uygulamaya güç vermektedir. Dağıtım otomasyonu, CI/CD işlem hatları veya çoklu uygulama yönetimi araçları geliştiren geliştiriciler için Heroku API entegrasyonu isteğe bağlı değil, zorunludur.

Gerçek şu ki: 10'dan fazla Heroku uygulamasını yöneten ekipler, manuel dağıtımlar ve yapılandırma değişiklikleri nedeniyle haftada 8-12 saat kaybediyor. Sağlam bir Heroku API entegrasyonu, dağıtımları otomatikleştirir, trafiğe göre dyno'ları ölçeklendirir ve ortamlar arasındaki yapılandırmayı senkronize eder.

Bu kılavuz, Heroku API entegrasyon sürecinin tamamını ele almaktadır. Jeton kimlik doğrulama, uygulama ve dyno yönetimi, derleme işlem hatları, eklenti sağlama ve hata giderme konularını öğreneceksiniz. Sonunda, üretime hazır bir Heroku entegrasyonuna sahip olacaksınız.

💡
Apidog, API entegrasyon testlerini basitleştirir. Heroku uç noktalarınızı test edin, kimlik doğrulama akışlarını doğrulayın, API yanıtlarını inceleyin ve yapılandırma sorunlarını tek bir çalışma alanında giderin. API belirtimlerini içe aktarın, yanıtları taklit edin ve test senaryolarını ekibinizle paylaşın.

Heroku API Nedir?

Heroku, Heroku platformundaki uygulamaları ve altyapıyı yönetmek için RESTful bir Platform API'si sağlar. API şunları yönetir:

Temel Özellikler

Özellik Açıklama
RESTful Tasarım JSON yanıtlarıyla standart HTTP yöntemleri
Jeton Kimlik Doğrulaması OAuth 2.0 destekli Taşıyıcı jeton
Aralık İstekleri Büyük sonuç kümeleri için sayfalama
Oran Sınırlandırması Hesap başına saatte 10.000 istek
Tekrarlanabilir Oluşturmalar Yazma işlemleri için güvenli yeniden deneme davranışı
Gzip Sıkıştırma Bant genişliği tasarrufu için yanıt sıkıştırma

API Mimarisinin Genel Görünümü

Heroku, sürümlü bir REST API yapısı kullanır:

https://api.heroku.com/

API, tutarlı kaynak kalıpları ve ilişkileriyle JSON:API belirtimini takip eder.

API Sürümleri Karşılaştırması

Sürüm Durum Kimlik Doğrulama Kullanım Durumu
Platform API (v3) Mevcut Taşıyıcı Jeton Tüm yeni entegrasyonlar
GitHub Entegrasyonu Mevcut OAuth 2.0 GitHub bağlantılı uygulamalar
Kapsayıcı Kayıt Defteri Mevcut Docker kimlik doğrulaması Kapsayıcı dağıtımları

Başlarken: Kimlik Doğrulama Kurulumu

Adım 1: Heroku Hesabınızı Oluşturun

API'ye erişmeden önce bir Heroku hesabına ihtiyacınız var:

Heroku hesap oluşturma sayfası ekran görüntüsü
  1. Heroku web sitesini ziyaret edin
  2. Kaydol'a tıklayın ve bir hesap oluşturun
  3. E-posta adresinizi doğrulayın
  4. Hesap kurulumunu tamamlayın

Adım 2: Heroku CLI'yi Kurun

CLI, API jetonları oluşturmaya ve komutları test etmeye yardımcı olur:

# macOS
brew tap heroku/brew && brew install heroku

# Windows
npm install -g heroku

# Linux
curl https://cli-assets.heroku.com/install.sh | sh

Adım 3: API Jetonu Oluşturun

Heroku CLI ile kimlik doğrulama yapın:

# Heroku'ya giriş yapın
heroku login

# Bu, kimlik doğrulama için bir tarayıcı açar
# Giriş yaptıktan sonra jetonunuz yerel olarak depolanır

API jetonunuzu alın:

# Mevcut yetkilendirme jetonunuzu görüntüleyin
heroku authorizations:create --short-lived

# Veya uzun ömürlü bir jeton oluşturun (CI/CD için)
heroku authorizations:create --description "CI/CD Pipeline" --expires-in "1 year"

Güvenlik notu: Jetonları asla kodda değil, ortam değişkenlerinde saklayın:

# .env dosyası
HEROKU_API_KEY="api_anahtarınız_buraya"
HEROKU_APP_NAME="uygulama-adınız"

Adım 4: Jeton Kimlik Doğrulamayı Anlayın

Heroku, Taşıyıcı jeton kimlik doğrulaması kullanır:

Authorization: Bearer {api_key}
Accept: application/vnd.heroku+json; version=3

Her API isteği bu başlıkları gerektirir.

Adım 5: İlk API Çağrınızı Yapın

Kimlik doğrulamanızı test edin:

curl -n https://api.heroku.com/account \
  -H "Accept: application/vnd.heroku+json; version=3" \
  -H "Authorization: Bearer $HEROKU_API_KEY"

Beklenen yanıt:

{
  "id": "kullanıcı-kimliği-burada",
  "email": "developer@example.com",
  "name": "Geliştirici Adı",
  "created_at": "2024-01-15T10:30:00Z",
  "updated_at": "2026-03-20T14:22:00Z"
}

Adım 6: Kodda Kimlik Doğrulama Uygulaması

Yeniden kullanılabilir bir API istemcisi oluşturun:

const HEROKU_API_KEY = process.env.HEROKU_API_KEY;
const HEROKU_BASE_URL = 'https://api.heroku.com';

const herokuRequest = async (endpoint, options = {}) => {
  const response = await fetch(`${HEROKU_BASE_URL}${endpoint}`, {
    ...options,
    headers: {
      'Authorization': `Bearer ${HEROKU_API_KEY}`,
      'Accept': 'application/vnd.heroku+json; version=3',
      'Content-Type': 'application/json',
      ...options.headers
    }
  });

  if (!response.ok) {
    const error = await response.json();
    throw new Error(`Heroku API Hatası: ${error.message}`);
  }

  return response.json();
};

// Kullanım
const account = await herokuRequest('/account');
console.log(`Giriş yapıldı: ${account.email}`);

Uygulama Yönetimi

Yeni Bir Uygulama Oluşturma

Programlı olarak bir Heroku uygulaması oluşturun:

const createApp = async (appName, region = 'us') => {
  const response = await herokuRequest('/apps', {
    method: 'POST',
    body: JSON.stringify({
      name: appName,
      region: region
    })
  });

  return response;
};

// Kullanım
const app = await createApp('harika-uygulamam-2026');
console.log(`Uygulama oluşturuldu: ${app.name}`);
console.log(`Git URL'si: ${app.git_url}`);
console.log(`Web URL'si: ${app.web_url}`);

Beklenen Uygulama Yanıtı

{
  "id": "uygulama-uuid-burada",
  "name": "harika-uygulamam-2026",
  "region": { "name": "us" },
  "created_at": "2026-03-25T10:00:00Z",
  "updated_at": "2026-03-25T10:00:00Z",
  "git_url": "https://git.heroku.com/harika-uygulamam-2026.git",
  "web_url": "https://harika-uygulamam-2026.herokuapp.com",
  "owner": { "email": "developer@example.com" },
  "build_stack": { "name": "heroku-24" }
}

Uygulamalarınızı Listeleme

Hesabınızdaki tüm uygulamaları alın:

const listApps = async (limit = 50) => {
  const response = await herokuRequest(`/apps?limit=${limit}`);
  return response;
};

// Kullanım
const apps = await listApps();
apps.forEach(app => {
  console.log(`${app.name} - ${app.web_url}`);
});

Uygulama Detaylarını Alma

Detaylı uygulama bilgilerini alın:

const getApp = async (appName) => {
  const response = await herokuRequest(`/apps/${appName}`);
  return response;
};

// Kullanım
const app = await getApp('harika-uygulamam-2026');
console.log(`Yığın: ${app.build_stack.name}`);
console.log(`Bölge: ${app.region.name}`);

Uygulama Yapılandırmasını Güncelleme

Uygulama ayarlarını değiştirin:

const updateApp = async (appName, updates) => {
  const response = await herokuRequest(`/apps/${appName}`, {
    method: 'PATCH',
    body: JSON.stringify(updates)
  });

  return response;
};

// Kullanım - uygulama adını değiştir
const updated = await updateApp('eski-uygulama-adı', {
  name: 'yeni-uygulama-adı'
});

Bir Uygulamayı Silme

Hesabınızdan bir uygulamayı kaldırın:

const deleteApp = async (appName) => {
  await herokuRequest(`/apps/${appName}`, {
    method: 'DELETE'
  });

  console.log(`Uygulama ${appName} başarıyla silindi`);
};

Dyno Yönetimi

Dyno'ları Ölçeklendirme

Uygulamanızı yukarı veya aşağı ölçeklendirin:

const scaleDyno = async (appName, processType, quantity) => {
  const response = await herokuRequest(`/apps/${appName}/formation/${processType}`, {
    method: 'PATCH',
    body: JSON.stringify({
      quantity: quantity
    })
  });

  return response;
};

// Kullanım - web dyno'larını 3'e ölçeklendir
const formation = await scaleDyno('uygulamam', 'web', 3);
console.log(`${formation.quantity} ${processType} dyno'suna ölçeklendirildi`);

Dyno Oluşumunu Alma

Mevcut dyno yapılandırmasını görüntüleyin:

const getFormation = async (appName, processType = null) => {
  const endpoint = processType
    ? `/apps/${appName}/formation/${processType}`
    : `/apps/${appName}/formation`;

  const response = await herokuRequest(endpoint);
  return response;
};

// Kullanım
const formation = await getFormation('uygulamam');
formation.forEach(proc => {
  console.log(`${proc.type}: ${proc.quantity} dyno (@ ${proc.size})`);
});

Mevcut Dyno Boyutları

Dyno Tipi Kullanım Durumu Aylık Maliyet
eco Hobi projeleri, demolar 5$
basic Küçük üretim uygulamaları 7$
standard-1x Standart iş yükleri 25$
standard-2x Yüksek performanslı uygulamalar 50$
performance Üretim açısından kritik uygulamalar 250$ +
private Kurumsal izolasyon Özel

Dyno'ları Yeniden Başlatma

Bir uygulama için tüm dyno'ları yeniden başlatın:

const restartDynos = async (appName, processType = null) => {
  const endpoint = processType
    ? `/apps/${appName}/formation/${processType}`
    : `/apps/${appName}/dynos`;

  await herokuRequest(endpoint, {
    method: 'DELETE'
  });

  console.log(`${appName} için dyno'lar yeniden başlatıldı`);
};

Tek Seferlik Dyno'ları Çalıştırma

Yalıtılmış dyno'larda komutları yürütün:

const runCommand = async (appName, command) => {
  const response = await herokuRequest(`/apps/${appName}/dynos`, {
    method: 'POST',
    body: JSON.stringify({
      command: command,
      size: 'standard-1x'
    })
  });

  return response;
};

// Kullanım - veritabanı geçişini çalıştır
const dyno = await runCommand('uygulamam', 'npm run migrate');
console.log(`Dyno başlatıldı: ${dyno.id}`);

Yapılandırma Değişkenleri

Yapılandırma Değişkenlerini Alma

Ortam değişkenlerini alın:

const getConfigVars = async (appName) => {
  const response = await herokuRequest(`/apps/${appName}/config-vars`);
  return response;
};

// Kullanım
const config = await getConfigVars('uygulamam');
console.log(`DATABASE_URL: ${config.DATABASE_URL}`);
console.log(`NODE_ENV: ${config.NODE_ENV}`);

Yapılandırma Değişkenlerini Ayarlama

Ortam değişkenlerini güncelleyin:

const setConfigVars = async (appName, variables) => {
  const response = await herokuRequest(`/apps/${appName}/config-vars`, {
    method: 'PATCH',
    body: JSON.stringify(variables)
  });

  return response;
};

// Kullanım
const updated = await setConfigVars('uygulamam', {
  NODE_ENV: 'production',
  API_SECRET: 'gizli_anahtarınız',
  LOG_LEVEL: 'info'
});

Yapılandırma Değişkenleri için En İyi Uygulamalar

  1. Asla sırları kaydetmeyin - Tüm hassas veriler için ortam değişkenlerini kullanın
  2. Ortam başına ayrı yapılandırmalar kullanın - Hazırlık ve üretim için farklı değişkenler
  3. Sırları düzenli olarak döndürün - API anahtarlarını ve şifreleri üç ayda bir güncelleyin
  4. İlgili değişkenlere ön ek ekleyin - STRIPE_SECRET_KEY, STRIPE_WEBHOOK_SECRET

Derleme ve Sürüm Yönetimi

Bir Derleme Oluşturma

Kodu API aracılığıyla dağıtın:

const createBuild = async (appName, sourceBlobUrl) => {
  const response = await herokuRequest(`/apps/${appName}/builds`, {
    method: 'POST',
    body: JSON.stringify({
      source_blob: {
        url: sourceBlobUrl
      }
    })
  });

  return response;
};

// Kullanım
const build = await createBuild('uygulamam', 'https://storage.example.com/source.tar.gz');
console.log(`Derleme başlatıldı: ${build.id}`);
console.log(`Durum: ${build.status}`);

Derleme Durumunu Alma

Derleme ilerlemesini kontrol edin:

const getBuild = async (appName, buildId) => {
  const response = await herokuRequest(`/apps/${appName}/builds/${buildId}`);
  return response;
};

// Tamamlanana kadar yokla
const checkBuildStatus = async (appName, buildId, maxAttempts = 30) => {
  for (let i = 0; i < maxAttempts; i++) {
    const build = await getBuild(appName, buildId);

    if (build.status === 'succeeded') {
      console.log('Derleme başarılı!');
      return build;
    } else if (build.status === 'failed') {
      throw new Error(`Derleme başarısız: ${build.output}`);
    }

    console.log(`Derleme devam ediyor... deneme ${i + 1}`);
    await new Promise(resolve => setTimeout(resolve, 5000));
  }

  throw new Error('Derleme zaman aşımına uğradı');
};

Sürümleri Listeleme

Sürüm geçmişini görüntüleyin:

const listReleases = async (appName, limit = 10) => {
  const response = await herokuRequest(`/apps/${appName}/releases?limit=${limit}`);
  return response;
};

// Kullanım
const releases = await listReleases('uygulamam');
releases.forEach(release => {
  console.log(`v${release.version} - ${release.description} - ${release.created_at}`);
});

Önceki Sürüme Geri Dönme

Önceki bir sürüme geri dönün:

const rollback = async (appName, releaseId) => {
  const response = await herokuRequest(`/apps/${appName}/releases`, {
    method: 'POST',
    body: JSON.stringify({
      rollback: releaseId
    })
  });

  return response;
};

// Kullanım - 42. sürüme geri dön
const rollbackRelease = await rollback('uygulamam', 42);
console.log(`v${rollbackRelease.version} sürümüne geri dönüldü`);

İşlem Hattı Yönetimi

Bir İşlem Hattı Oluşturma

CI/CD işlem hatları kurun:

const createPipeline = async (pipelineName) => {
  const response = await herokuRequest('/pipelines', {
    method: 'POST',
    body: JSON.stringify({
      name: pipelineName
    })
  });

  return response;
};

// Kullanım
const pipeline = await createPipeline('uygulamam-işlem-hattı');
console.log(`İşlem hattı oluşturuldu: ${pipeline.id}`);

Uygulamaları İşlem Hattına Ekleme

Uygulamaları işlem hattı aşamalarına bağlayın:

const addAppToPipeline = async (pipelineId, appName, stage) => {
  const response = await herokuRequest('/pipeline-couplings', {
    method: 'POST',
    body: JSON.stringify({
      pipeline: pipelineId,
      app: appName,
      stage: stage // 'development', 'staging', 'production'
    })
  });

  return response;
};

// Kullanım
await addAppToPipeline(pipelineId, 'uygulamam-dev', 'development');
await addAppToPipeline(pipelineId, 'uygulamam-staging', 'staging');
await addAppToPipeline(pipelineId, 'uygulamam-prod', 'production');

Slug'ı Bir Sonraki Aşamaya Yükseltme

Kodu işlem hattı boyunca taşıyın:

const promoteSlug = async (slugId, toApp) => {
  await herokuRequest('/promotions', {
    method: 'POST',
    body: JSON.stringify({
      from: toApp, // Kaynak uygulama
      to: toApp,   // Hedef uygulama (bir sonraki aşama)
      slug: slugId
    })
  });

  console.log(`Slug ${slugId}, ${toApp} uygulamasına yükseltildi`);
};

Eklenti Yönetimi

Eklentileri Sağlama

Heroku eklentilerini kurun:

const provisionAddon = async (appName, addonPlan, config = {}) => {
  const response = await herokuRequest('/addon-attachments', {
    method: 'POST',
    body: JSON.stringify({
      app: appName,
      plan: addonPlan,
      config: config
    })
  });

  return response;
};

// Kullanım - PostgreSQL sağla
const db = await provisionAddon('uygulamam', 'heroku-postgresql:mini', {});
console.log(`Veritabanı sağlandı: ${db.addon.name}`);
console.log(`DATABASE_URL: ${db.addon.config_vars.DATABASE_URL}`);

Popüler Eklentiler

Eklenti Plan Başlangıç Fiyatı Kullanım Durumu
heroku-postgresql mini 5$/ay Üretim veritabanı
heroku-redis mini 5$/ay Önbellekleme, oturumlar
papertrail choklad 7$/ay Günlük toplama
sentry geliştirici Ücretsiz Hata izleme
mailgun sandbox Ücretsiz E-posta teslimatı
newrelic lite Ücretsiz Uygulama izleme

Eklentileri Listeleme

Yüklü eklentileri görüntüleyin:

const listAddons = async (appName) => {
  const response = await herokuRequest(`/apps/${appName}/addons`);
  return response;
};

// Kullanım
const addons = await listAddons('uygulamam');
addons.forEach(addon => {
  console.log(`${addon.plan.name} - $${addon.pricing.plan.price} - ${addon.state}`);
});

Eklentileri Kaldırma

Eklentileri kaldırın:

const removeAddon = async (appName, addonId) => {
  await herokuRequest(`/apps/${appName}/addons/${addonId}`, {
    method: 'DELETE'
  });

  console.log(`Eklenti ${addonId}, ${appName} uygulamasından kaldırıldı`);
};

Alan Adı ve SSL Yönetimi

Özel Alan Adları Ekleme

Özel alan adlarını yapılandırın:

const addDomain = async (appName, domainName) => {
  const response = await herokuRequest(`/apps/${appName}/domains`, {
    method: 'POST',
    body: JSON.stringify({
      hostname: domainName
    })
  });

  return response;
};

// Kullanım
const domain = await addDomain('uygulamam', 'api.example.com');
console.log(`CNAME hedefi: ${domain.cname}`);

SSL Sertifikalarını Yapılandırma

Özel alan adlarına SSL ekleyin:

const addSslCertificate = async (appName, domainId, certificateChain, privateKey) => {
  const response = await herokuRequest(`/apps/${appName}/domains/${domainId}/ssl_endpoint`, {
    method: 'PATCH',
    body: JSON.stringify({
      ssl_cert: {
        cert_chain: certificateChain,
        private_key: privateKey
      }
    })
  });

  return response;
};

ACM ile Otomatik SSL

Otomatik Sertifika Yönetimini etkinleştirin:

const enableACM = async (appName, domainName) => {
  const response = await herokuRequest(`/apps/${appName}/domains/${domainName}/sni_endpoint`, {
    method: 'POST',
    body: JSON.stringify({
      kind: 'acm'
    })
  });

  return response;
};

Oran Sınırlandırma ve Kotalar

Oran Sınırlandırmalarını Anlama

Heroku, API kararlılığını korumak için oran sınırları uygular:

Limitlerin aşılması HTTP 429 (Çok Fazla İstek) yanıtlarıyla sonuçlanır.

Oran Sınırlandırma İşlemeyi Uygulama

Yeniden denemeler için üstel geri çekilme kullanın:

const makeRateLimitedRequest = async (endpoint, options = {}, maxRetries = 3) => {
  for (let attempt = 1; attempt <= maxRetries; attempt++) {
    try {
      const response = await herokuRequest(endpoint, options);

      // Oran sınırı başlıklarını kontrol et
      const remaining = response.headers.get('RateLimit-Remaining');
      const resetTime = response.headers.get('RateLimit-Reset');

      if (remaining < 100) {
        console.warn(`Düşük kota kaldı: ${remaining}, ${resetTime} tarihinde sıfırlanıyor`);
      }

      return response;
    } catch (error) {
      if (error.message.includes('429') && attempt < maxRetries) {
        const delay = Math.pow(2, attempt) * 1000;
        console.log(`Oran sınırlandırıldı. ${delay}ms içinde tekrar deneniyor...`);
        await new Promise(resolve => setTimeout(resolve, delay));
      } else {
        throw error;
      }
    }
  }
};

Oran Sınırlandırma Başlıkları

Heroku, her yanıta şu başlıkları ekler:

Başlık Açıklama
RateLimit-Limit Saatte maksimum istek sayısı
RateLimit-Remaining Pencerede kalan istek sayısı
RateLimit-Reset Pencerenin sıfırlandığı Unix zaman damgası

Yaygın Sorun Giderme

Sorun: Kimlik Doğrulama 401 Hatasıyla Başarısız Oluyor

Belirtiler: "Geçersiz kimlik bilgileri" hataları alınıyor.

Çözümler:

  1. API anahtarının doğru olduğunu doğrulayın: heroku authorizations
  2. Jetonun süresinin dolmadığından emin olun (uzun ömürlü jetonlar 1 yıl sürer)
  3. Ortam değişkenindeki fazladan boşlukları kontrol edin
  4. Gerekirse jetonu yeniden oluşturun: heroku authorizations:create

Sorun: Uygulama Adı Zaten Alınmış

Belirtiler: "ad zaten alınmış" hatası alınıyor.

Çözümler:

  1. Küresel olarak benzersiz adlar kullanın - ekip veya rastgele son ek ekleyin
  2. UUID tabanlı adlar oluşturun: app-${Date.now()}
  3. Ad alanı ön ekleri kullanın: ekip-adı-uygulama-adı-ortam
const generateUniqueAppName = (baseName) => {
  const timestamp = Date.now().toString(36);
  const random = Math.random().toString(36).substring(2, 6);
  return `${baseName}-${timestamp}-${random}`;
};

Sorun: Dyno Oluşumu Başarısız Oluyor

Belirtiler: Ölçeklendirme işlemleri hata döndürüyor.

Çözümler:

  1. Procfile'da işlem tipinin mevcut olduğunu doğrulayın
  2. Hesabın kullanılabilir dyno kotası olduğunu kontrol edin
  3. Uygulamanın askıya alınmadığından emin olun
  4. Dyno saat kullanımını gözden geçirin: heroku ps --app=uygulamam

Sorun: Derleme Zaman Aşımıyla Başarısız Oluyor

Belirtiler: Derlemeler 30 dakika sonra takılıyor veya zaman aşımına uğruyor.

Çözümler:

  1. Diliniz için buildpack seçimini optimize edin
  2. Bağımlılıkları düzgün bir şekilde önbelleğe alın
  3. Büyük derlemeleri daha küçük dağıtımlara bölün
  4. Daha hızlı dağıtım için önceden oluşturulmuş slug'lar kullanın

Sorun: Oran Sınırı Aşıldı

Belirtiler: HTTP 429 yanıtları alınıyor.

Çözümler:

  1. İstek kuyruğu uygulayın
  2. Yeniden denemeler için üstel geri çekilme kullanın
  3. Mümkünse istekleri toplu olarak yapın
  4. Oran sınırı başlıklarını proaktif olarak izleyin
// Basit oran sınırlayıcı
class HerokuRateLimiter {
  constructor(requestsPerMinute = 150) {
    this.queue = [];
    this.interval = 60000 / requestsPerMinute;
    this.processing = false;
  }

  async add(requestFn) {
    return new Promise((resolve, reject) => {
      this.queue.push({ requestFn, resolve, reject });
      this.process();
    });
  }

  async process() {
    if (this.processing || this.queue.length === 0) return;

    this.processing = true;

    while (this.queue.length > 0) {
      const { requestFn, resolve, reject } = this.queue.shift();

      try {
        const result = await requestFn();
        resolve(result);
      } catch (error) {
        reject(error);
      }

      if (this.queue.length > 0) {
        await new Promise(r => setTimeout(r, this.interval));
      }
    }

    this.processing = false;
  }
}

Üretim Dağıtım Kontrol Listesi

Canlıya geçmeden önce:

İzleme ve Uyarı

Bu metrikleri takip edin:

const metrics = {
  apiCalls: {
    total: 0,
    successful: 0,
    failed: 0,
    rateLimited: 0
  },
  dynoHours: {
    used: 0,
    quota: 1000
  },
  deployments: {
    successful: 0,
    failed: 0,
    avg_duration: 0
  }
};

// Yüksek hata oranında uyarı
const failureRate = metrics.apiCalls.failed / metrics.apiCalls.total;

if (failureRate > 0.05) {
  sendAlert('Heroku API hata oranı %5'in üzerinde');
}

// Dyno saat kullanımında uyarı
if (metrics.dynoHours.used > metrics.dynoHours.quota * 0.8) {
  sendAlert('Dyno saat kullanımı %80'in üzerinde');
}

Gerçek Dünya Kullanım Durumları

Otomatik CI/CD İşlem Hattı

Bir SaaS ekibi GitHub'dan dağıtımları otomatikleştiriyor:

Uygulama akışı:

  1. GitHub push'u iş akışını tetikler
  2. Testler CI'de çalışır
  3. Heroku API, kaynak blob'dan derleme oluşturur
  4. Hazırlık ortamından üretime yükseltme
  5. Başarı/başarısızlık durumunda ekibe bildirim

Çoklu Ortam Yönetimi

Bir danışmanlık firması 50'den fazla müşteri uygulamasını yönetiyor:

Temel entegrasyon noktaları:

Trafiğe Dayalı Otomatik Ölçeklendirme

Bir e-ticaret platformu trafik artışlarını yönetiyor:

Otomatik ölçeklendirme mantığı:

Sonuç

Heroku API, platform işlevselliğine kapsamlı erişim sağlar. Temel çıkarımlar:

Düğme

SSS Bölümü

Heroku API ne için kullanılır?

Heroku API, uygulamaların, dyno'ların, eklentilerin ve altyapının programlı yönetimini sağlar. Yaygın kullanım durumları arasında CI/CD otomasyonu, çoklu uygulama yönetim araçları, otomatik ölçeklendirme sistemleri ve altyapı izleme panoları bulunur.

Heroku API anahtarı nasıl alınır?

Heroku CLI'yi kurun, heroku login komutunu çalıştırın, ardından heroku authorizations:create ile bir yetkilendirme oluşturun. Döndürülen jetonu ortam değişkenlerinde güvenli bir şekilde saklayın.

Heroku API'si ücretsiz mi?

Evet, Heroku API'si ücretsizdir. Ancak, sağladığınız kaynaklar (dyno'lar, eklentiler vb.) için ödeme yaparsınız. API oran limitleri hesap başına saatte 10.000 istektir.

Heroku API hangi kimlik doğrulamasını kullanır?

Heroku, Taşıyıcı jeton kimlik doğrulaması kullanır. Her isteğe Authorization: Bearer {api_key} başlığını ekleyin. Jetonlar kısa ömürlü (1 saat) veya uzun ömürlü (1 yıla kadar) olabilir.

Heroku API oran limitleri nasıl ele alınır?

RateLimit-Remaining başlığını izleyin ve istek kuyruğu uygulayın. HTTP 429 yanıtları aldığınızda üstel geri çekilme kullanın. Güvenli çalışma için dakikada 150 isteğin altında kalın.

Git olmadan dağıtım yapabilir miyim?

Evet. Kaynak blob URL'sinden dağıtım yapmak için Derlemeler API'sini kullanın. Kodunuzu bulut depolama alanına (S3, GCS) yükleyin ve derleme isteğinizde URL'yi referans alın.

Dağıtımları nasıl otomatikleştiririm?

CI/CD kurmak için İşlem Hattı API'sini kullanın. Derlemeler oluşturun, slug'ları aşamalar boyunca yükseltin ve GitHub veya özel CI sistemleriyle entegre edin.

Sürüm ve derleme arasındaki fark nedir?

Bir derleme, kaynak kodunuzu bir slug'a derler. Bir sürüm, bir slug'ı yapılandırma değişkenleriyle birleştirerek uygulamanızın dağıtılabilir bir sürümünü oluşturur.

Başarısız bir dağıtımı nasıl geri alırım?

Son sürümleri listelemek için Sürümler API'sini kullanın, ardından rollback: <sürüm_kimliği> ile /releases adresine POST yapın. Heroku, önceki sürümde yeni bir sürüm oluşturur.

Birden fazla Heroku hesabını yönetebilir miyim?

Evet. Her hesap için ayrı API jetonları kullanın ve HEROKU_API_KEY ortam değişkenini değiştirerek aralarında geçiş yapın.

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

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