Pular para o conteúdo
Skillpedia
Sites e telas (frontend)48 mil · #3047

frontend-api-integration-patterns

Ajuda seu agente a integrar o frontend com APIs. Usa padrões para lidar com erros, cancelamentos e atualizações de forma eficiente.

O que ela faz

Esta ferramenta ajuda a conectar seu site ou aplicativo com outros serviços online de forma mais confiável. Ela ensina a lidar com problemas comuns que acontecem quando a informação está sendo enviada e recebida, garantindo que tudo funcione bem e sem erros para o usuário.

Quando usar

  • ✓Ao conectar seu site a um serviço de dados.
  • ✓Quando você quer evitar que informações antigas apareçam na tela.
  • ✓Para corrigir erros que acontecem ao carregar ou enviar dados.

Exemplo do que pedir para a IA

“Como faço para que meu site não mostre dados antigos quando estou buscando novas informações?”

Quer saber mais? Abra as seções abaixo.

Como usar

O jeito mais fácil: copie a mensagem abaixo e cole no Claude, ChatGPT, Cursor ou outra IA. Ela lê a skill e segue as instruções.

Link da skill

https://github.com/sickn33/agentic-awesome-skills/blob/main/plugins/agentic-awesome-skills-claude/skills/frontend-api-integration-patterns/SKILL.md

Mensagem pronta para colar

Use esta skill para me ajudar: https://github.com/sickn33/agentic-awesome-skills/blob/main/plugins/agentic-awesome-skills-claude/skills/frontend-api-integration-patterns/SKILL.md Leia o arquivo SKILL.md desse link e siga as instruções dele na minha tarefa.
Como funciona

Ela organiza o código que se comunica com outros serviços, previne que pedidos duplicados sejam enviados e garante que, se uma conexão falhar, ela possa tentar novamente de forma inteligente.

Instalação

Jeito mais fácil: copie o link da skill e cole no Claude, ChatGPT ou Cursor pedindo para seguir as instruções.

No terminal (Claude Code, Codex, Cursor), na pasta do projeto:

npx skills add sickn33/agentic-awesome-skills --skill frontend-api-integration-patterns

Ou baixe só o arquivo:

curl -L https://raw.githubusercontent.com/sickn33/agentic-awesome-skills/main/plugins/agentic-awesome-skills-claude/skills/frontend-api-integration-patterns/SKILL.md -o SKILL.md
Conteúdo técnico (SKILL.md)

Tradução do texto original do autor no GitHub. Os comandos e códigos estão como no original.

Padrões de Integração de API Frontend

Visão Geral

Esta habilidade oferece padrões prontos para produção para integrar aplicações frontend com APIs de backend.

A maioria dos problemas de frontend não é causada por APIs difíceis de chamar, mas sim pelo manuseio incorreto de comportamento assíncrono — levando a condições de corrida, dados desatualizados, requisições duplicadas e má experiência do usuário.

Esta habilidade foca em correção, resiliência e experiência do usuário, não apenas em fazer as chamadas de API funcionarem.


Quando Usar Esta Habilidade

  • Conectar aplicações frontend (React, React Native, Vue, etc.) a APIs de backend
  • Integrar endpoints de ML/IA (/predict, /recommend)
  • Lidar com dados assíncronos na UI
  • Corrigir dados desatualizados, flickering na UI ou requisições duplicadas
  • Projetar camadas de API frontend escaláveis

Padrões Principais

1. Camada de API (Separação de Responsabilidades)

Centralize a lógica da API e normalize os erros.

export class ApiError extends Error {
  constructor(message, status, payload = null) {
    super(message);
    this.name = "ApiError";
    this.status = status;
    this.payload = payload;
  }
}

export const apiClient = async (url, options = {}) => {
  const res = await fetch(url, {
    headers: { "Content-Type": "application/json" },
    ...options,
  });

  if (!res.ok) {
    let payload = null;
    try {
      payload = await res.json();
    } catch (_) {}

    throw new ApiError(
      payload?.message || "Request failed",
      res.status,
      payload
    );
  }

  // handle empty responses safely (e.g. 204 No Content)
  if (res.status === 204) return null;

  const text = await res.text();
  return text ? JSON.parse(text) : null;
};

2. Gerenciamento de Estado Seguro contra Condições de Corrida

Evite que respostas desatualizadas sobrescrevam dados recentes.

useEffect(() => {
  let cancelled = false;

  const load = async () => {
    try {
      setLoading(true);
      setError(null);

      const result = await getUser();

      if (!cancelled) setData(result);
    } catch (err) {
      if (!cancelled) setError(err.message);
    } finally {
      if (!cancelled) setLoading(false);
    }
  };

  load();

  return () => {
    cancelled = true;
  };
}, []);

Use uma flag de cancelamento para lógica assíncrona que não seja fetch. Para requisições de rede, prefira AbortController.


3. Cancelamento de Requisição (AbortController)

Cancele requisições em andamento para evitar vazamentos de memória e atualizações desatualizadas.

useEffect(() => {
  const controller = new AbortController();

  const load = async () => {
    try {
      const data = await getUser({ signal: controller.signal });
      setData(data);
    } catch (err) {
      if (err.name === "AbortError") return;
      setError(err.message);
    }
  };

  load();
  return () => controller.abort();
}, [userId]);

4. Tentativa com Backoff Exponencial

Tente novamente apenas operações explicitamente seguras para repetição e falhas transitórias classificadas. O padrão executa uma tentativa. Não classifique exceções arbitrárias de programação ou parsing como erros de rede. Respeite o Retry-After do provedor e um prazo total no adaptador real; não ative este backoff simples para respostas de limite de taxa. O exemplo de predição POST intencionalmente não ativa tentativas, a menos que o contrato do backend garanta independentemente a segurança de repetição.

const sleep = (ms) => new Promise((r) => setTimeout(r, ms));

const fetchWithBackoff = async (fn, retries = 3, delay = 300, replaySafe = false) => {
  try {
    return await fn();
  } catch (err) {
    const isAbort = err.name === "AbortError";
    const isHttpError = typeof err.status === "number";
    const isNetworkFailure = err.code === "NETWORK_ERROR";
    const isRetryable = replaySafe && !isAbort &&
      (isNetworkFailure || (isHttpError && err.status >= 500));

    if (retries <= 0 || !isRetryable) throw err;

    const nextDelay = delay * 2 + Math.random() * 100;
    await sleep(nextDelay);

    return fetchWithBackoff(fn, retries - 1, nextDelay, replaySafe);
  }
};

5. Chamadas de API Debounced

Evite chamadas excessivas de API (por exemplo, campos de busca).

const useDebounce = (value, delay = 400) => {
  const [debounced, setDebounced] = useState(value);

  useEffect(() => {
    const t = setTimeout(() => setDebounced(value), delay);
    return () => clearTimeout(t);
  }, [value, delay]);

  return debounced;
};

6. Deduplicação de Requisições

Evite chamadas de API duplicadas entre componentes.

const inFlight = new Map();


…
Perguntas frequentes

O que é 'race condition'?

É quando duas ou mais ações acontecem ao mesmo tempo e a ordem em que terminam causa um resultado inesperado ou incorreto.

Por que cancelar requisições?

Para evitar que o aplicativo mostre informações desatualizadas ou quebras, especialmente se o usuário navegar para outra página antes da resposta chegar.

O que é 'retry strategy'?

É uma forma de tentar novamente uma ação que falhou, esperando um pouco mais a cada tentativa, para lidar com falhas temporárias de conexão.

Detalhes

Descrição original do autor

Production-ready patterns for integrating frontend applications with backend APIs, including race condition handling, request cancellation, retry strategies, error normalization, and UI state management.

repo: sickn33/agentic-awesome-skills

Popularidade

Estrelas no GitHub
48 mil
Posição no ranking
#3047
Licença
MIT
Atualizada em
15/10/2026

Essa skill é útil?

0

Entre para votar.

Comentários

  • …

Mais skills deste repositório

Skills parecidas