Noções Básicas de Integrações
8 exemplos para você começar com integrações de terceiros para APIs Node.js - 6 básicos e 2 intermediários.
Busque em todas as páginas da documentação
8 exemplos para você começar com integrações de terceiros para APIs Node.js - 6 básicos e 2 intermediários.
npm install stripe got
npm install -D typescript@5.6 tsxVeja Padrões de SDK e Stripe, Twilio para detalhes específicos do fornecedor.
// Ruim: rota chama SDK
app.post("/checkout", async (req, res) => {
const stripe = new Stripe(process.env.STRIPE_KEY!);
const pi = await stripe.paymentIntents.create({ amount: 1000, currency: "usd" });
res.json(pi);
});
// Bom: rota chama serviço de integração
app.post("/checkout", async (req, res) => {
const result = await paymentsService.createIntent(req.body);
res.status(201).json(result);
});Relacionado: Casos de Uso e Serviços
// src/integrations/stripe-client.ts
import Stripe from "stripe";
let stripe: Stripe | null = null;
export function getStripe() {
if (!stripe) {
stripe = new Stripe(process.env.STRIPE_SECRET_KEY!, {
apiVersion: "2024-11-20.acacia",
timeout: 10_000,
maxNetworkRetries: 0, // sua política de retentativa
});
}
return stripe;
}timeout explícito - os padrões do SDK podem ser muito longos para o orçamento de requisição HTTPexport async function withTimeout<T>(promise: Promise<T>, ms: number): Promise<T> {
const ac = new AbortController();
const timer = setTimeout(() => ac.abort(), ms);
try {
return await Promise.race([
promise,
new Promise<T>((_, reject) => {
ac.signal.addEventListener("abort", () => reject(new Error("timeout")));
}),
]);
} finally {
clearTimeout(timer);
}
}export function mapStripeError(err: unknown): AppError {
if (err instanceof Stripe.errors.StripeCardError) {
return new AppError("card_declined", 402, { code: err.code });
}
if (err instanceof Stripe.errors.StripeAPIError) {
return new AppError("payment_provider_unavailable", 503);
}
return new AppError("internal", 500);
}logger.info({
msg: "stripe_request",
requestId: req.headers["x-request-id"],
operation: "paymentIntents.create",
idempotencyKey: key,
});const key = process.env.NODE_ENV === "production"
? process.env.STRIPE_LIVE_KEY!
: process.env.STRIPE_TEST_KEY!;import got from "got";
const client = got.extend({
prefixUrl: "https://api.partner.com/v1/",
timeout: { request: 8_000 },
headers: { Authorization: `Bearer ${process.env.PARTNER_TOKEN}` },
});
export async function fetchPartnerStatus(id: string) {
return client.get(`status/${id}`).json<PartnerStatus>();
}got documentados em Resiliência de Saída e RetentativasSaída: sua API -> API Stripe (criar pagamento)
Entrada: Stripe -> seu webhook (pagamento bem-sucedido)
SDK oficial quando disponível (Stripe, Twilio, AWS). HTTP bruto para pequenos parceiros REST com geração de cliente OpenAPI.
Testes de módulo de serviço com mock HTTP (nock, MSW) ou modo de teste do fornecedor.
Sim para dependências críticas no caminho de requisição - veja Disjuntores.
Prefira fila assíncrona quando o usuário não precisar de resultado síncrono (email, geração de PDF).
Stripe Connect ou mapa de chave de API por inquilino - nunca chave global para contas conectadas sem design.
Encapsule em um serviço injetável; mesmas regras de timeout e mapeamento de erros.
Fixe as versões principais do SDK; leia o changelog do fornecedor antes de atualizar.
Redija cabeçalhos de autorização em serializadores Pino.
Versões da Stack: Esta página foi escrita para Node.js 24.18.0 (LTS Ativo), npm 10+, TypeScript 5.6+, Express 5, Fastify 5 e NestJS 11.
Revisado por Chris St. John·Última atualização: 16 de jul. de 2026