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
Mensagem pronta para colar
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-designOu 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.mdConteú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-migrationpara 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.
Popularidade
- Estrelas no GitHub
- 48 mil
- Posição no ranking
- #2150
- Licença
- MIT
- Atualizada em
- 15/10/2026
Comentários
- …
Mais skills deste repositório
00-andruia-consultant
Ajuda seu agente a iniciar ou melhorar projetos de IA. Ele analisa código, sugere ferramentas e cria planos de ação em espanhol.
sickn33/agentic-awesome-skills
007
Faz seu agente realizar auditorias de segurança e modelagem de ameaças. É útil para proteger projetos contra ataques e vulnerabilidades.
sickn33/agentic-awesome-skills
10-andruia-skill-smith
Ajuda seu agente a criar ou melhorar ferramentas de IA. Ele define como as ferramentas funcionam, escreve a documentação e valida a estrutura.
sickn33/agentic-awesome-skills
20-andruia-niche-intelligence
Faz seu agente criar um resumo sobre um setor específico. É útil para entender o contexto, regras, padrões de uso e riscos de um projeto, usando fontes confiáveis.
sickn33/agentic-awesome-skills
Skills parecidas
accessibility
Ajuda seu agente a criar interfaces que todos possam usar. Garante que sites e aplicativos funcionem bem para pessoas com deficiência, como cegos ou com mobilidade reduzida.
affaan-m/ECC
design-system
Ajuda seu agente a criar um sistema de design a partir de um código existente. Ele extrai informações visuais e verifica a consistência, gerando um relatório e uma prévia interativa.
affaan-m/ECC
liquid-glass-design
Ajuda seu agente a criar interfaces de usuário com efeito 'Liquid Glass' para iOS. Permite adicionar efeitos visuais dinâmicos e interativos em SwiftUI e UIKit.
affaan-m/ECC