← Voltar a todos os artigos
Desafios

API-First: Por Que sua Startup Deveria Pensar em APIs desde o Primeiro Dia

Por Marc Molas·5 de abril de 2024·10 min de leitura

A historia se repete constantemente. Uma startup constroi seu produto web. Frontend e backend acoplados, logica de negocio misturada com logica de apresentacao, dados que fluem por caminhos que so o desenvolvedor original entende. O produto funciona. Os usuarios chegam.

E entao alguem diz: "Precisamos de um app mobile." Ou "Esse cliente enterprise quer integrar nosso servico na plataforma dele." Ou "Vamos oferecer uma versao white-label."

E de repente tudo para. Porque nao existe uma API limpa. O que existe e um monolito onde a unica forma de acessar os dados e pelo frontend web. E reescrever isso leva meses.

Projetar seu produto como API-first nao e over-engineering. E a decisao que permite evitar essa reescrita. E o melhor: nao custa mais tempo no inicio. So exige pensar diferente.

O que realmente significa API-first

API-first nao significa "ter uma API." Quase todo produto moderno tem algum tipo de API. API-first significa algo mais especifico: voce projeta o contrato da API antes de construir a implementacao.

A API e o produto. Todo o resto (seu frontend web, seu app mobile, suas integracoes) sao consumidores dessa API. Nenhum tem privilegios especiais. Seu frontend web faz as mesmas chamadas que um cliente externo faria.

O fluxo de trabalho muda fundamentalmente:

  1. Define o contrato: Quais endpoints existem, quais parametros aceitam, quais respostas retornam, quais erros sao possiveis.
  2. Documenta o contrato: OpenAPI/Swagger, com exemplos reais para cada endpoint.
  3. Cria mocks: O frontend pode comecar a construir contra endpoints simulados que retornam dados de exemplo.
  4. Desenvolve em paralelo: Frontend e backend trabalham simultaneamente contra o contrato acordado.
  5. Integra e testa: Quando os dois lados estao prontos, a integracao e verificar que tudo cumpre o contrato.

Isso nao e teoria. E como trabalham os times de engenharia mais produtivos que conheco.

Os beneficios concretos para uma startup

Nao vou te vender API-first com argumentos abstratos. Estes sao os beneficios que voce vera na pratica:

Frontend e backend se desenvolvem de forma independente. Seu designer pode iterar sobre a UI sem depender de que o backend esteja pronto. Seu engenheiro de backend pode otimizar queries sem tocar o frontend. Os deploys sao independentes. Os bugs se isolam mais facil.

Adicionar um app mobile e trivial. Se sua API ja serve tudo que o frontend web precisa, um app mobile so precisa consumir os mesmos endpoints. Nao ha logica duplicada, nao ha endpoints novos para criar. A API ja existe e esta documentada.

As integracoes com terceiros se tornam plug-and-play. Quando um cliente quer conectar seu servico com o CRM dele, voce nao precisa construir uma integracao custom. Sua API publica ja esta la, documentada e testada.

Os testes sao mais claros. Testar uma API e mais simples do que testar um frontend acoplado a um backend. Voce faz uma request, verifica a response. Sem navegadores, sem DOM, sem flakiness.

Escalar e mais facil. Voce pode escalar sua API independentemente do seu frontend. Pode cachear responses no nivel da API. Pode adicionar rate limiting sem tocar o codigo de negocio.

REST vs GraphQL: quando usar cada um

A primeira decisao tecnica em uma estrategia API-first e o protocolo. Em 2024, as duas opcoes dominantes sao REST e GraphQL.

REST e a opcao padrao. Se voce nao tem um motivo especifico para GraphQL, use REST. E mais simples, tem melhor tooling, todos os engenheiros conhecem, os caches de HTTP funcionam de forma nativa, e a depuracao e trivial com qualquer ferramenta que fale HTTP.

GraphQL faz sentido quando:

  • Seu frontend precisa de dados de multiplos recursos em uma unica tela e o over-fetching com REST e um problema real (nao teorico).
  • Voce tem multiplos clientes (web, mobile, TV) com necessidades de dados muito diferentes.
  • Seu grafo de dados e complexo e as relacoes entre entidades sao profundas.

GraphQL NAO faz sentido quando:

  • Voce tem um unico frontend e um backend simples.
  • Seu time nao tem experiencia com GraphQL (a curva de aprendizado e real).
  • Voce valoriza a simplicidade operacional (caching, monitoracao e seguranca sao mais complexos com GraphQL).

Para a maioria das startups em fase inicial, REST com endpoints bem projetados e a resposta certa. Voce sempre pode adicionar GraphQL como uma camada sobre sua API REST mais tarde.

Design pratico de uma API REST solida

Estes sao os principios que separam uma API bem projetada de uma que gera dor:

Naming consistente. Substantivos no plural para recursos, verbos HTTP para acoes. /users, /orders, /products. Nao /getUser, /createOrder, /deleteAllProducts. O verbo HTTP ja indica a acao: GET, POST, PUT, DELETE.

Codigos de status HTTP corretos. 200 para sucesso, 201 para criacao, 400 para erro do cliente, 401 para nao autenticado, 403 para nao autorizado, 404 para nao encontrado, 422 para validacao falha, 500 para erro do servidor. Nao retorne 200 com um body que diz {"error": true}.

Paginacao desde o dia 1. Todo endpoint que retorne listas deve ser paginado. Nao importa que hoje voce so tenha 50 registros. Quando tiver 50.000, mudar um endpoint de nao-paginado para paginado quebra todos os clientes que o consomem. Cursor-based pagination e mais robusta que offset/limit para dados que mudam frequentemente.

Erros padronizados. Defina um formato de erro consistente e use em toda a API:

{
  "error": {
    "code": "VALIDATION_ERROR",
    "message": "O campo email e obrigatorio",
    "details": [
      {"field": "email", "message": "Este campo e obrigatorio"}
    ]
  }
}

Nao invente um formato diferente para cada endpoint. O frontend precisa conseguir parsear erros de forma generica.

Versionamento desde o inicio. /api/v1/users. Quando precisar fazer breaking changes, crie /api/v2/users e mantenha a v1 durante um periodo de transicao. Sem versionamento, cada mudanca na API pode quebrar clientes existentes.

Autenticacao padrao. JWT para a maioria dos casos. OAuth2 se precisar que terceiros acessem dados dos seus usuarios. Nao invente seu proprio sistema de autenticacao. Use uma biblioteca testada e siga os padroes.

Os erros que mais vejo

Depois de revisar dezenas de APIs de startups, estes sao os padroes que mais causam dor:

  • Expor IDs internos. Se seu banco de dados usa IDs autoincrement, um atacante pode enumerar todos os seus recursos. Use UUIDs ou IDs publicos separados dos internos.
  • Nao ter rate limiting. Sem rate limiting, um script mal feito (ou malicioso) pode derrubar sua API. Implemente rate limiting desde o inicio, mesmo que generoso (1.000 requests por minuto e razoavel para comecar).
  • Naming inconsistente. Um endpoint usa user_id, outro usa userId, outro usa UserID. Escolha uma convencao e mantenha em toda a API. Esse e um problema surpreendentemente frequente quando varios desenvolvedores contribuem sem um guia de estilo.
  • Responses que retornam dados demais. Um endpoint /users que retorna o hash da senha, o token de sessao e dados internos. Projete suas responses pensando no que o cliente precisa, nao no que seu banco de dados tem.
  • Nao documentar. Uma API sem documentacao e uma API que so o autor consegue usar. OpenAPI/Swagger nao e opcional. E parte do produto.

O fluxo de trabalho API-first na pratica

Assim funciona um sprint em um time API-first:

  1. Planejamento: O time define qual funcionalidade sera construida e projeta os endpoints necessarios. O contrato e escrito em OpenAPI.
  2. Mock: Endpoints mock sao levantados retornando dados de exemplo seguindo o contrato. Ferramentas como Prism ou Mockoon fazem isso em minutos.
  3. Desenvolvimento paralelo: O frontend constroi contra os mocks. O backend implementa a logica real. Ambos trabalham ao mesmo tempo sem se bloquear mutuamente.
  4. Integracao: Quando ambos estao prontos, conecta-se o frontend ao backend real. Se o contrato foi respeitado, isso deveria funcionar com mudancas minimas.
  5. Testes de contrato: Testes automatizados verificam que a implementacao real cumpre exatamente o contrato definido. Se alguem muda a API sem atualizar o contrato, os testes falham.

Esse fluxo elimina o maior gargalo em times de produto: a dependencia sequencial entre frontend e backend.

Por que isso importa para sua startup

API-first nao e uma moda. E uma decisao arquitetonica que determina sua velocidade de desenvolvimento a medio prazo. As startups que adotam API-first desde o inicio podem:

  • Lancar um app mobile em semanas, nao meses.
  • Integrar com parceiros sem construir nada custom.
  • Pivotar seu frontend sem tocar o backend.
  • Oferecer versoes white-label reutilizando a mesma API.
  • Escalar frontend e backend de forma independente.

Na Conectia, os engenheiros de backend que conectamos com startups europeias pensam API-first por padrao. Nao porque e uma buzzword, mas porque ja viram o que acontece quando voce nao faz isso: reescritas custosas, integracoes dolorosas e meses perdidos.

Um engenheiro senior que projeta sua API corretamente desde o dia um nao e um custo, e um investimento que se paga sozinho na primeira vez que voce precisa conectar um novo cliente ao seu sistema.


Precisa de um backend engineer que projete sua API desde o primeiro dia pensando em escala e integracao? Fale com um CTO -- conectamos com engenheiros senior que constroem APIs que voce nao vai precisar reescrever.

Pronto para construir a sua equipa de engenharia?

Fale com um parceiro técnico e implemente desenvolvedores validados por CTOs em 72 horas.