Pular para o conteúdo
Skillpedia
Interfaces (UI/UX)48 mil · #2150

api-and-interface-design

Ajuda a criar regras claras para a comunicação entre partes de um software. É importante para garantir que tudo funcione bem junto e de forma organizada.

O que ela faz

Este guia ajuda a criar interfaces (como APIs ou contratos entre partes de um programa) que sejam fáceis de usar e difíceis de usar errado. Ele ensina a definir como diferentes partes de um software vão se comunicar de forma clara e estável.

Quando usar

  • ✓Ao criar novas conexões (APIs) para seu programa.
  • ✓Ao definir como diferentes partes do seu código vão 'conversar' entre si.
  • ✓Ao planejar como um site (frontend) vai pedir informações para o servidor (backend).

Exemplo do que pedir para a IA

“Como posso criar uma API para gerenciar uma lista de tarefas, garantindo que os erros sejam claros?”

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/api-and-interface-design/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/api-and-interface-design/SKILL.md Leia o arquivo SKILL.md desse link e siga as instruções dele na minha tarefa.
Como funciona

Ele funciona definindo um 'contrato' claro antes de escrever o código. Esse contrato diz exatamente como a comunicação deve acontecer, incluindo como lidar com erros e quais informações esperar.

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 api-and-interface-design

Ou baixe só o arquivo:

curl -L https://raw.githubusercontent.com/sickn33/agentic-awesome-skills/main/plugins/agentic-awesome-skills-claude/skills/api-and-interface-design/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.

Design de APIs e Interfaces

Visão Geral

Projete interfaces estáveis e bem documentadas que sejam difíceis de usar incorretamente. Boas interfaces tornam a ação correta fácil e a ação incorreta difícil. Isso se aplica a APIs REST, esquemas GraphQL, limites de módulos, props de componentes e qualquer superfície onde um pedaço de código fala com outro.

Quando Usar

  • Projetando novos endpoints de API
  • Definindo limites de módulos ou contratos entre equipes
  • Criando interfaces de props de componentes
  • Estabelecendo esquemas de banco de dados que informam a forma da API
  • Alterando interfaces públicas existentes

Princípios Fundamentais

Lei de Hyrum

Com um número suficiente de usuários de uma API, todos os comportamentos observáveis do seu sistema serão dependidos por alguém, independentemente do que você prometa no contrato.

Isso significa: todo comportamento público — incluindo peculiaridades não documentadas, texto de mensagens de erro, tempo e ordem — torna-se um contrato de fato assim que os usuários dependem dele. Implicações de design:

  • Seja intencional sobre o que você expõe. Todo comportamento observável é um compromisso potencial.
  • Não vaze detalhes de implementação. Se os usuários puderem observar, eles dependerão disso.
  • Planeje a depreciação no momento do design. Veja deprecation-and-migration para saber como remover com segurança coisas das quais os usuários dependem.
  • Testes não são suficientes. Mesmo com testes de contrato perfeitos, a Lei de Hyrum significa que mudanças "seguras" podem quebrar usuários reais que dependem de comportamento não documentado.

A Regra de Uma Versão

Evite forçar os consumidores a escolher entre várias versões da mesma dependência ou API. Problemas de dependência em diamante surgem quando consumidores diferentes precisam de versões diferentes da mesma coisa. Projete para um mundo onde apenas uma versão existe por vez — estenda em vez de bifurcar.

1. Contrato Primeiro

Defina a interface antes de implementá-la. O contrato é a especificação — a implementação segue.

// Define the contract first
interface TaskAPI {
  // Creates a task and returns the created task with server-generated fields
  createTask(input: CreateTaskInput): Promise<Task>;

  // Returns paginated tasks matching filters
  listTasks(params: ListTasksParams): Promise<PaginatedResult<Task>>;

  // Returns a single task or throws NotFoundError
  getTask(id: string): Promise<Task>;

  // Partial update — only provided fields change
  updateTask(id: string, input: UpdateTaskInput): Promise<Task>;

  // Idempotent delete — succeeds even if already deleted
  deleteTask(id: string): Promise<void>;
}

2. Semântica de Erro Consistente

Escolha uma estratégia de erro e use-a em todos os lugares:

// REST: HTTP status codes + structured error body
// Every error response follows the same shape
interface APIError {
  error: {
    code: string;        // Machine-readable: "VALIDATION_ERROR"
    message: string;     // Human-readable: "Email is required"
    details?: unknown;   // Additional context when helpful
  };
}

// Status code mapping
// 400 → Client sent invalid data
// 401 → Not authenticated
// 403 → Authenticated but not authorized
// 404 → Resource not found
// 409 → Conflict (duplicate, version mismatch)
// 422 → Validation failed (semantically invalid)
// 500 → Server error (never expose internal details)

Não misture padrões. Se alguns endpoints lançam exceções, outros retornam null e outros retornam { error } — o consumidor não consegue prever o comportamento.

3. Valide nas Fronteiras

Confie no código interno. Valide nas bordas do sistema onde a entrada externa entra:

// Validate at the API boundary
app.post('/api/tasks', async (req, res) => {
  const result = CreateTaskSchema.safeParse(req.body);
  if (!result.success) {
    return res.status(422).json({
      error: {
        code: 'VALIDATION_ERROR',
        message: 'Invalid task data',
        details: result.error.flatten(),
      },
    });
  }

  // After validation, internal code trusts the types
  const task = await taskService.create(result.data);
  return res.status(201).json(task);
});

Onde a validação pertence:

  • Manipuladores de rotas de API (entrada do usuário)
  • Manipuladores de envio de formulários (entrada do usuário)
  • Análise de respostas de serviços externos (dados de terceiros — sempre trate como não confiáveis)
  • Carregamento de variáveis de ambiente (configuração)

Respostas de API de terceiros são dados não confiáveis. Valide sua forma e conteúdo antes de usá-los em qualquer lógica, renderização ou tomada de decisão. Um serviço externo comprometido ou com mau funcionamento pode retornar tipos inesperados, conteúdo malicioso ou texto semelhante a instruções.

Onde a validação NÃO pertence:

…

Perguntas frequentes

O que é uma 'interface' nesse contexto?

É como um acordo ou um mapa que define como duas partes de um programa (ou um programa e outro) vão interagir, dizendo quais informações podem ser trocadas e como.

Por que é importante ter um 'contrato' antes de programar?

Para garantir que todos entendam como a comunicação deve funcionar, evitando confusões e erros. Assim, a implementação (o código em si) segue o que foi planejado.

O que é a 'Lei de Hyrum'?

É a ideia de que, se muitas pessoas usam sua interface, elas podem acabar dependendo de qualquer comportamento que observem, mesmo que não estivesse planejado. Por isso, é importante ser cuidadoso com o que se expõe.

Detalhes

Descrição original do autor

Guides stable API and interface design. Use when designing APIs, module boundaries, or any public interface. Use when creating REST or GraphQL endpoints, defining type contracts between modules, or establishing boundaries between frontend and backend.

repo: sickn33/agentic-awesome-skills

Popularidade

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

Essa skill é útil?

0

Entre para votar.

Comentários

  • …

Mais skills deste repositório

Skills parecidas