En bref
L'API Heroku permet aux développeurs d'automatiser le déploiement, de gérer les applications, de configurer les add-ons et de faire évoluer l'infrastructure de manière programmatique. Elle utilise OAuth 2.0 et l'authentification par jeton, des points d'accès RESTful pour les applications, les dynos, les builds et les pipelines, avec des limites de débit de 10 000 requêtes par heure et par compte. Ce guide couvre la configuration de l'authentification, les points d'accès principaux, l'intégration CI/CD et les stratégies de déploiement en production.
Essayez Apidog dès aujourd'hui
Introduction
Heroku alimente plus de 4 millions d'applications dans plus de 170 pays. Pour les développeurs qui créent des outils d'automatisation de déploiement, des pipelines CI/CD ou des outils de gestion multi-applications, l'intégration de l'API Heroku n'est pas une option, c'est une nécessité.
Voici la réalité : les équipes gérant plus de 10 applications Heroku perdent 8 à 12 heures par semaine en déploiements manuels et en changements de configuration. Une solide intégration de l'API Heroku automatise les déploiements, adapte les dynos en fonction du trafic et synchronise la configuration entre les environnements.
Ce guide vous accompagne tout au long du processus complet d'intégration de l'API Heroku. Vous apprendrez l'authentification par jeton, la gestion des applications et des dynos, les pipelines de build, le provisionnement d'add-ons et le dépannage des erreurs. À la fin, vous disposerez d'une intégration Heroku prête pour la production.
💡 Astuce : Apidog simplifie les tests d'intégration d'API. Testez vos points d'accès Heroku, validez les flux d'authentification, inspectez les réponses API et déboguez les problèmes de configuration dans un seul espace de travail. Importez les spécifications API, simulez les réponses et partagez les scénarios de test avec votre équipe.
Qu'est-ce que l'API Heroku ?
Heroku fournit une API de plateforme RESTful pour la gestion des applications et de l'infrastructure sur la plateforme Heroku. L'API gère :
- La création, la configuration et la suppression d'applications
- La mise à l'échelle des Dyno et la gestion des processus
- La gestion des builds et des versions
- Le provisionnement et la configuration des add-ons
- La gestion des pipelines et des promotions
- La gestion des domaines et des certificats SSL
- La configuration de la redirection des logs et de la surveillance
- La gestion des équipes et des collaborateurs
Fonctionnalités Clés
| Fonctionnalité | Description |
|---|---|
| Conception RESTful | Méthodes HTTP standard avec réponses JSON |
| Authentification par Jeton | Jeton Bearer avec prise en charge d'OAuth 2.0 |
| Requêtes par Plage | Pagination pour les grands ensembles de résultats |
| Limitation de Débit | 10 000 requêtes par heure par compte |
| Créations Idempotentes | Comportement de réessai sécurisé pour les écritures |
| Compression Gzip | Compression des réponses pour économiser la bande passante |
Vue d'Ensemble de l'Architecture API
Heroku utilise une structure d'API REST versionnée :
https://api.heroku.com/
L'API suit la spécification JSON:API avec des modèles et des relations de ressources cohérents.
Comparaison des Versions d'API
| Version | Statut | Authentification | Cas d'utilisation |
|---|---|---|---|
| API de Plateforme (v3) | Actuelle | Jeton Bearer | Toutes les nouvelles intégrations |
| Intégration GitHub | Actuelle | OAuth 2.0 | Applications connectées à GitHub |
| Registre de Conteneurs | Actuelle | Authentification Docker | Déploiements de conteneurs |
Démarrage : Configuration de l'Authentification
Étape 1 : Créer votre compte Heroku
Avant d'accéder à l'API, créez un compte Heroku :
- Visitez le site web Heroku
- Cliquez sur Sign Up (S'inscrire) et créez un compte
- Vérifiez votre adresse e-mail
- Terminez la configuration du compte
Étape 2 : Installer l'interface de ligne de commande Heroku
L'interface de ligne de commande (CLI) aide à générer des jetons API et à tester des commandes :
# macOS
brew tap heroku/brew && brew install heroku
# Windows
npm install -g heroku
# Linux
curl https://cli-assets.heroku.com/install.sh | sh
Étape 3 : Générer un Jeton API
Authentifiez-vous avec l'interface de ligne de commande Heroku :
# Se connecter à Heroku
heroku login
# Cela ouvre un navigateur pour l'authentification
# Après la connexion, votre jeton est stocké localement
Récupérez votre jeton API :
# Afficher votre jeton d'autorisation actuel
heroku authorizations:create --short-lived
# Ou créer un jeton de longue durée (pour CI/CD)
heroku authorizations:create --description "CI/CD Pipeline" --expires-in "1 year"
Sécurité : Stockez les jetons dans des variables d'environnement, jamais dans le code :
# fichier .env
HEROKU_API_KEY="votre_clé_api_ici"
HEROKU_APP_NAME="votre-nom-d-app"
Étape 4 : Comprendre l'authentification par jeton
Heroku utilise l'authentification par jeton Bearer :
Authorization: Bearer {api_key}
Accept: application/vnd.heroku+json; version=3
Chaque requête API nécessite ces en-têtes.
Étape 5 : Effectuer votre premier appel API
Testez votre authentification :
curl -n https://api.heroku.com/account \
-H "Accept: application/vnd.heroku+json; version=3" \
-H "Authorization: Bearer $HEROKU_API_KEY"
Réponse attendue :
{
"id": "id-utilisateur-ici",
"email": "developpeur@example.com",
"name": "Nom du Développeur",
"created_at": "2024-01-15T10:30:00Z",
"updated_at": "2026-03-20T14:22:00Z"
}
Étape 6 : Implémenter l'authentification dans le code
Créez un client API réutilisable :
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 Error: ${error.message}`);
}
return response.json();
};
// Utilisation
const account = await herokuRequest('/account');
console.log(`Connecté en tant que : ${account.email}`);
Gestion des Applications
Création d'une Nouvelle Application
Créez une application Heroku par programme :
const createApp = async (appName, region = 'us') => {
const response = await herokuRequest('/apps', {
method: 'POST',
body: JSON.stringify({
name: appName,
region: region
})
});
return response;
};
// Utilisation
const app = await createApp('my-awesome-app-2026');
console.log(`Application créée : ${app.name}`);
console.log(`URL Git : ${app.git_url}`);
console.log(`URL Web : ${app.web_url}`);
Réponse Attendue de l'Application
{
"id": "uuid-app-ici",
"name": "my-awesome-app-2026",
"region": { "name": "us" },
"created_at": "2026-03-25T10:00:00Z",
"updated_at": "2026-03-25T10:00:00Z",
"git_url": "https://git.heroku.com/my-awesome-app-2026.git",
"web_url": "https://my-awesome-app-2026.herokuapp.com",
"owner": { "email": "developpeur@example.com" },
"build_stack": { "name": "heroku-24" }
}
Lister vos Applications
Récupérer toutes les applications de votre compte :
const listApps = async (limit = 50) => {
const response = await herokuRequest(`/apps?limit=${limit}`);
return response;
};
// Utilisation
const apps = await listApps();
apps.forEach(app => {
console.log(`${app.name} - ${app.web_url}`);
});
Obtenir les détails de l'application
Récupérer des informations détaillées sur l'application :
const getApp = async (appName) => {
const response = await herokuRequest(`/apps/${appName}`);
return response;
};
// Utilisation
const app = await getApp('my-awesome-app-2026');
console.log(`Pile : ${app.build_stack.name}`);
console.log(`Région : ${app.region.name}`);
Mise à jour de la configuration de l'application
Modifier les paramètres de l'application :
const updateApp = async (appName, updates) => {
const response = await herokuRequest(`/apps/${appName}`, {
method: 'PATCH',
body: JSON.stringify(updates)
});
return response;
};
// Utilisation - changer le nom de l'application
const updated = await updateApp('ancien-nom-app', {
name: 'nouveau-nom-app'
});
Supprimer une application
Supprimer une application de votre compte :
const deleteApp = async (appName) => {
await herokuRequest(`/apps/${appName}`, {
method: 'DELETE'
});
console.log(`L'application ${appName} a été supprimée avec succès`);
};
Gestion des Dynos
Mise à l'Échelle des Dynos
Ajuster le nombre de dynos de votre application :
const scaleDyno = async (appName, processType, quantity) => {
const response = await herokuRequest(`/apps/${appName}/formation/${processType}`, {
method: 'PATCH',
body: JSON.stringify({
quantity: quantity
})
});
return response;
};
// Utilisation - mettre à l'échelle les dynos web à 3
const formation = await scaleDyno('my-app', 'web', 3);
console.log(`Mis à l'échelle à ${formation.quantity} dynos ${processType}`);
Obtenir la Formation de Dyno
Afficher la configuration actuelle des dynos :
const getFormation = async (appName, processType = null) => {
const endpoint = processType
? `/apps/${appName}/formation/${processType}`
: `/apps/${appName}/formation`;
const response = await herokuRequest(endpoint);
return response;
};
// Utilisation
const formation = await getFormation('my-app');
formation.forEach(proc => {
console.log(`${proc.type}: ${proc.quantity} dynos (@ ${proc.size})`);
});
Tailles de Dyno Disponibles
| Type de Dyno | Cas d'utilisation | Coût/Mois |
|---|---|---|
| eco | Projets de loisir, démos | 5 $ |
| basic | Petites applications de production | 7 $ |
| standard-1x | Charges de travail standard | 25 $ |
| standard-2x | Applications haute performance | 50 $ |
| performance | Applications critiques | 250 $+ |
| private | Isolation d'entreprise | Personnalisé |
Redémarrage des Dynos
Redémarrer tous les dynos pour une application :
const restartDynos = async (appName, processType = null) => {
const endpoint = processType
? `/apps/${appName}/formation/${processType}`
: `/apps/${appName}/dynos`;
await herokuRequest(endpoint, {
method: 'DELETE'
});
console.log(`Dynos redémarrés pour ${appName}`);
};
Exécuter des Dynos Éphémères
Exécuter des commandes dans des dynos isolés :
const runCommand = async (appName, command) => {
const response = await herokuRequest(`/apps/${appName}/dynos`, {
method: 'POST',
body: JSON.stringify({
command: command,
size: 'standard-1x'
})
});
return response;
};
// Utilisation - exécuter une migration de base de données
const dyno = await runCommand('my-app', 'npm run migrate');
console.log(`Dyno démarré : ${dyno.id}`);
Variables de Configuration
Obtenir les Variables de Configuration
Récupérer les variables d'environnement :
const getConfigVars = async (appName) => {
const response = await herokuRequest(`/apps/${appName}/config-vars`);
return response;
};
// Utilisation
const config = await getConfigVars('my-app');
console.log(`DATABASE_URL: ${config.DATABASE_URL}`);
console.log(`NODE_ENV: ${config.NODE_ENV}`);
Définition des Variables de Configuration
Mettre à jour les variables d'environnement :
const setConfigVars = async (appName, variables) => {
const response = await herokuRequest(`/apps/${appName}/config-vars`, {
method: 'PATCH',
body: JSON.stringify(variables)
});
return response;
};
// Utilisation
const updated = await setConfigVars('my-app', {
NODE_ENV: 'production',
API_SECRET: 'votre-clé-secrète',
LOG_LEVEL: 'info'
});
Bonnes pratiques pour les variables de configuration
- Ne jamais commettre de secrets : Utilisez des variables d'environnement pour toutes les données sensibles.
- Utiliser des configurations séparées par environnement : Des variables différentes pour la préproduction et la production.
- Renouveler les secrets régulièrement : Mettez à jour les clés API et les mots de passe tous les trimestres.
-
Préfixer les variables liées :
STRIPE_SECRET_KEY,STRIPE_WEBHOOK_SECRET, etc.
Gestion des Builds et des Versions
Création d'un Build
Déployer le code via l'API :
const createBuild = async (appName, sourceBlobUrl) => {
const response = await herokuRequest(`/apps/${appName}/builds`, {
method: 'POST',
body: JSON.stringify({
source_blob: {
url: sourceBlobUrl
}
})
});
return response;
};
// Utilisation
const build = await createBuild('my-app', 'https://storage.example.com/source.tar.gz');
console.log(`Build démarré : ${build.id}`);
console.log(`Statut : ${build.status}`);
Obtenir le Statut du Build
Vérifier la progression du build :
const getBuild = async (appName, buildId) => {
const response = await herokuRequest(`/apps/${appName}/builds/${buildId}`);
return response;
};
// Poll jusqu'à ce que ce soit terminé
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('Build réussi !');
return build;
} else if (build.status === 'failed') {
throw new Error(`Build a échoué : ${build.output}`);
}
console.log(`Build en cours... tentative ${i + 1}`);
await new Promise(resolve => setTimeout(resolve, 5000));
}
throw new Error('Délai d\'attente du build dépassé');
};
Lister les Versions
Afficher l'historique des versions :
const listReleases = async (appName, limit = 10) => {
const response = await herokuRequest(`/apps/${appName}/releases?limit=${limit}`);
return response;
};
// Utilisation
const releases = await listReleases('my-app');
releases.forEach(release => {
console.log(`v${release.version} - ${release.description} - ${release.created_at}`);
});
Retour à la Version Précédente
Revenir à une version précédente :
const rollback = async (appName, releaseId) => {
const response = await herokuRequest(`/apps/${appName}/releases`, {
method: 'POST',
body: JSON.stringify({
rollback: releaseId
})
});
return response;
};
// Utilisation - retour à la version 42
const rollbackRelease = await rollback('my-app', 42);
console.log(`Revenu à la version v${rollbackRelease.version}`);
Gestion des Pipelines
Création d'un Pipeline
Mettre en place des pipelines CI/CD :
const createPipeline = async (pipelineName) => {
const response = await herokuRequest('/pipelines', {
method: 'POST',
body: JSON.stringify({
name: pipelineName
})
});
return response;
};
// Utilisation
const pipeline = await createPipeline('mon-pipeline-app');
console.log(`Pipeline créé : ${pipeline.id}`);
Ajouter des applications au pipeline
Connecter des applications aux étapes du pipeline :
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;
};
// Utilisation
await addAppToPipeline(pipelineId, 'mon-app-dev', 'development');
await addAppToPipeline(pipelineId, 'mon-app-staging', 'staging');
await addAppToPipeline(pipelineId, 'mon-app-prod', 'production');
Promouvoir un Slug à l'Étape Suivante
Déplacer le code à travers le pipeline :
const promoteSlug = async (slugId, toApp) => {
await herokuRequest('/promotions', {
method: 'POST',
body: JSON.stringify({
from: toApp, // Application source
to: toApp, // Application cible (étape suivante)
slug: slugId
})
});
console.log(`Slug ${slugId} promu vers ${toApp}`);
};
Gestion des Add-Ons
Provisionnement d'Add-Ons
Installer des add-ons Heroku :
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;
};
// Utilisation - provisionner PostgreSQL
const db = await provisionAddon('my-app', 'heroku-postgresql:mini', {});
console.log(`Base de données provisionnée : ${db.addon.name}`);
console.log(`DATABASE_URL: ${db.addon.config_vars.DATABASE_URL}`);
Add-Ons Populaires
| Add-On | Plan | Prix de Départ | Cas d'Utilisation |
|---|---|---|---|
| heroku-postgresql | mini | 5 $/mois | Base de données production |
| heroku-redis | mini | 5 $/mois | Mise en cache, sessions |
| papertrail | choklad | 7 $/mois | Agrégation de journaux |
| sentry | developer | Gratuit | Suivi des erreurs |
| mailgun | sandbox | Gratuit | Envoi d'e-mails |
| newrelic | lite | Gratuit | Surveillance d'applications |
Lister les Add-Ons
Afficher les add-ons installés :
const listAddons = async (appName) => {
const response = await herokuRequest(`/apps/${appName}/addons`);
return response;
};
// Utilisation
const addons = await listAddons('my-app');
addons.forEach(addon => {
console.log(`${addon.plan.name} - $${addon.pricing.plan.price} - ${addon.state}`);
});
Supprimer des Add-Ons
Désinstaller les add-ons :
const removeAddon = async (appName, addonId) => {
await herokuRequest(`/apps/${appName}/addons/${addonId}`, {
method: 'DELETE'
});
console.log(`L'Addon ${addonId} a été supprimé de ${appName}`);
};
Gestion des Domaines et SSL
Ajouter des Domaines Personnalisés
Configurer des domaines personnalisés :
const addDomain = async (appName, domainName) => {
const response = await herokuRequest(`/apps/${appName}/domains`, {
method: 'POST',
body: JSON.stringify({
hostname: domainName
})
});
return response;
};
// Utilisation
const domain = await addDomain('my-app', 'api.example.com');
console.log(`Cible CNAME : ${domain.cname}`);
Configuration des Certificats SSL
Ajouter SSL aux domaines personnalisés :
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;
};
SSL Automatisé avec ACM
Activer la gestion automatique des certificats (ACM) :
const enableACM = async (appName, domainName) => {
const response = await herokuRequest(`/apps/${appName}/domains/${domainName}/sni_endpoint`, {
method: 'POST',
body: JSON.stringify({
kind: 'acm'
})
});
return response;
};
Limitation de Débit et Quotas
Comprendre les Limites de Débit
- Limite Standard : 10 000 requêtes par heure par compte
- Fenêtre : glissante de 60 minutes
- Réinitialisation : automatique après expiration
En cas de dépassement, l'API retourne HTTP 429 (Trop de requêtes).
Implémentation de la Gestion des Limites de Débit
Utilisez la temporisation exponentielle pour les réessais :
const makeRateLimitedRequest = async (endpoint, options = {}, maxRetries = 3) => {
for (let attempt = 1; attempt <= maxRetries; attempt++) {
try {
const response = await herokuRequest(endpoint, options);
// Vérifier les en-têtes de limite de débit
const remaining = response.headers.get('RateLimit-Remaining');
const resetTime = response.headers.get('RateLimit-Reset');
if (remaining < 100) {
console.warn(`Quota faible restant : ${remaining}, réinitialisation à ${resetTime}`);
}
return response;
} catch (error) {
if (error.message.includes('429') && attempt < maxRetries) {
const delay = Math.pow(2, attempt) * 1000;
console.log(`Limite de débit atteinte. Réessai dans ${delay}ms...`);
await new Promise(resolve => setTimeout(resolve, delay));
} else {
throw error;
}
}
}
};
En-têtes de Limite de Débit
| En-tête | Description |
|---|---|
RateLimit-Limit |
Nombre maximum de requêtes par heure |
RateLimit-Remaining |
Requêtes restantes dans la fenêtre |
RateLimit-Reset |
Horodatage Unix de réinitialisation |
Dépannage des Problèmes Courants
Problème : Échec de l'Authentification avec 401
Symptômes : Erreurs "Invalid credentials".
Solutions :
- Vérifiez la clé API :
heroku authorizations - Vérifiez l'expiration du jeton (1 an max)
- Vérifiez l'absence d'espaces dans la variable d'environnement
- Régénérez le jeton si nécessaire :
heroku authorizations:create
Problème : Nom d'application déjà pris
Symptômes : Erreur "name is already taken".
Solutions :
- Utilisez des noms uniques à l'échelle mondiale (ex: suffixe aléatoire)
- Générez des noms basés sur des UUID :
const generateUniqueAppName = (baseName) => {
const timestamp = Date.now().toString(36);
const random = Math.random().toString(36).substring(2, 6);
return `${baseName}-${timestamp}-${random}`;
};
- Utilisez des préfixes d'espace de noms (
nom_equipe-nom_app-environnement)
Problème : Échec de la formation des Dynos
Symptômes : Les mises à l'échelle échouent.
Solutions :
- Vérifiez que le type de processus existe dans le Procfile
- Vérifiez le quota de dynos disponible
- L'application ne doit pas être suspendue
- Vérifiez l'utilisation des heures de dyno :
heroku ps --app=my-app
Problème : Échec de la construction avec un dépassement de délai
Symptômes : Builds bloqués ou expirés après 30 minutes.
Solutions :
- Optimisez le buildpack pour votre langage
- Mettez en cache les dépendances
- Divisez les builds volumineux
- Utilisez des slugs pré-construits
Problème : Limite de Débit Dépassée
Symptômes : Réponses HTTP 429.
Solutions :
- Implémentez une file d'attente de requêtes
- Utilisez la temporisation exponentielle pour les réessais
- Groupez les requêtes
- Surveillez les en-têtes de limite de débit
// Simple limiteur de débit
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;
}
}
Liste de Contrôle pour le Déploiement en Production
Avant la mise en ligne, vérifiez :
- [ ] Jetons API de longue durée pour le CI/CD
- [ ] Stockage sécurisé des secrets (Vault, AWS Secrets Manager)
- [ ] Limitation de débit et file d'attente des requêtes
- [ ] Gestion complète des erreurs
- [ ] Journalisation de tous les appels API
- [ ] Surveillance de l'utilisation des heures de dyno
- [ ] Drains de log pour journalisation externe
- [ ] Promotions de pipeline pour CI/CD
- [ ] ACM activé pour SSL auto
- [ ] Stratégie de sauvegarde pour les bases de données
Surveillance et Alertes
Surveillez ces métriques :
const metrics = {
apiCalls: {
total: 0,
successful: 0,
failed: 0,
rateLimited: 0
},
dynoHours: {
used: 0,
quota: 1000
},
deployments: {
successful: 0,
failed: 0,
avg_duration: 0
}
};
// Alerte en cas de taux d'échec élevé
const failureRate = metrics.apiCalls.failed / metrics.apiCalls.total;
if (failureRate > 0.05) {
sendAlert('Taux d\'échec de l\'API Heroku supérieur à 5%');
}
// Alerte sur l'utilisation des heures de dyno
if (metrics.dynoHours.used > metrics.dynoHours.quota * 0.8) {
sendAlert('Utilisation des heures de Dyno supérieure à 80%');
}
Cas d'Utilisation Réels
Pipeline CI/CD Automatisé
Exemple : Une équipe SaaS automatise les déploiements depuis GitHub.
- Défi : Déploiements manuels sources d'erreurs
- Solution : GitHub Actions + API Heroku
- Résultat : Déploiements 90 % plus rapides
Flux d'implémentation :
- Un push GitHub déclenche le workflow
- Les tests s'exécutent en CI
- L'API Heroku crée un build depuis le blob source
- Promotion de la préproduction à la production
- Notification de l'équipe
Gestion Multi-Environnement
Exemple : Un cabinet de conseil gère plus de 50 applications.
- Défi : Synchronisation manuelle des configurations
- Solution : Gestion centralisée via l'API Heroku
- Résultat : 8 heures/semaine économisées
Points d'intégration clés :
- Synchronisation des variables de configuration entre environnements
- Provisionnement automatisé d'add-ons
- Opérations en masse pour l'intégration clients
Mise à l'échelle automatique basée sur le trafic
Exemple : Plateforme e-commerce.
- Défi : Mise à l'échelle manuelle lors de pics
- Solution : Autoscaling via l'API Heroku
- Résultat : Zéro downtime lors des pics x10
Logique de scaling :
- Surveiller la latence via l'API de métriques
- Échelle up si latence p95 > 500ms
- Échelle down en période creuse
- Alerte en cas d'utilisation élevée prolongée
Conclusion
L'API Heroku offre un accès complet aux fonctionnalités de la plateforme. Points clés à retenir :
- Authentification par jeton Bearer : stockage et rotation sécurisés
- Limitation de débit (10K/heure) : surveillez proactivement
- Pipelines : workflows CI/CD robustes
- Gestion des erreurs : fiabilité du déploiement
- Apidog simplifie les tests d'API et la collaboration pour les intégrations Heroku
Section FAQ
À quoi sert l'API Heroku ?
L'API Heroku permet la gestion programmatique des applications, des dynos, des add-ons et de l'infrastructure. Cas courants : automatisation CI/CD, outils de gestion multi-applications, autoscaling, dashboards de monitoring.
Comment obtenir une clé API Heroku ?
Installez la CLI Heroku, exécutez heroku login, puis heroku authorizations:create. Stockez le jeton dans des variables d'environnement.
L'API Heroku est-elle gratuite ?
Oui, l'API est gratuite. Vous payez uniquement les ressources provisionnées (dynos, add-ons, ...). Limite : 10 000 requêtes/heure/compte.
Quelle authentification l'API Heroku utilise-t-elle ?
Jeton Bearer. Ajoutez Authorization: Bearer {clé_api} dans chaque requête. Jetons de courte (1h) ou longue durée (1 an).
Comment gérer les limites de débit de l'API Heroku ?
Surveillez RateLimit-Remaining et implémentez une file d'attente. Utilisez la temporisation exponentielle sur HTTP 429. Restez sous 150 requêtes/minute.
Puis-je déployer sans Git ?
Oui. Utilisez l'API Builds avec une URL de blob source. Uploadez le code sur un stockage cloud et référencez l'URL dans la requête de build.
Comment automatiser les déploiements ?
Utilisez l'API Pipeline : créez des builds, promouvez des slugs, intégrez GitHub ou CI personnalisés.
Quelle est la différence entre une version (release) et une compilation (build) ?
Un build transforme le code source en slug. Une release associe un slug à une configuration pour déployer l'application.
Comment annuler un déploiement échoué ?
Listez les releases, puis faites un POST sur /releases avec rollback: <id_version>. Heroku créera une nouvelle release sur la version précédente.
Puis-je gérer plusieurs comptes Heroku ?
Oui. Utilisez des jetons API séparés pour chaque compte et changez la variable d'environnement HEROKU_API_KEY.

Top comments (0)