Olá a todos ![]()
Tenho desenvolvido um frontend personalizado usando o Discourse como backend headless (arquitetura baseada em Next.js) e gostaria de compartilhar algumas lacunas práticas que encontrei no design atual da API, sob uma perspectiva de integração do mundo real.
Isso não é uma crítica ao próprio Discourse (ele é poderoso e flexível), mas sim um feedback para melhorar a DX (Experiência do Desenvolvedor) para arquiteturas modernas de frontend + orientadas a API.
1. Paginação e Estrutura de Posts do Tópico
Problema atual:
-
A paginação nem sempre é consistente entre os endpoints
-
Os posts do tópico (
/t/{id}.json) misturam:-
o post original
-
as respostas
-
metadados internos
-
Isso dificulta a criação de scroll infinito limpo ou estado normalizado (Redux/Zustand/React Query).
Sugestão:
-
Fornecer uma separação mais clara ou flags de consulta opcionais como:
-
?include_first_post=true|false -
?posts_only=replies -
Suporte a paginação baseada em cursor (em vez de apenas baseada em página)
-
2. Respostas vs. Estrutura do Tópico
Atualmente:
-
As respostas estão embutidas dentro da resposta do tópico
-
Não há separação clara entre:
-
“metadados do tópico”
-
“fluxo de posts”
-
Isso causa:
-
lógica de parsing extra no frontend
-
duplicação ao normalizar o estado
Sugestão:
-
Oferecer endpoints dedicados como:
-
/t/{id}/posts -
/t/{id}/replies -
ou suporte a filtragem dentro de
/t/{id}.json
-
3. Falta de Documentação em Nível de Campo na Resposta da API
Por exemplo, na resposta do tópico:
-
created_at -
bumped_at -
last_posted_at -
updated_at
Esses campos nem sempre são claramente diferenciados.
Problema:
-
Desenvolvedores frequentemente interpretam mal:
-
bumped_atvsupdated_at -
o que dispara a “atividade do tópico”
-
Sugestão:
-
Adicionar documentação de esquema inline ou metadados no estilo OpenAPI:
-
significado de cada campo
-
explicação do ciclo de vida
-
4. Inconsistências em Estatísticas e Cache
Problemas:
-
posts_count,reply_count,participants_countàs vezes ficam defasados em relação aos dados em tempo real -
forte dependência de contadores em cache
Impacto:
-
UI imprecisa (especialmente para dashboards/páginas de análise)
-
requer chamadas de API extras para validar o estado
Sugestão:
-
Adicionar um indicador de “tempo real vs. cache” ou variante de endpoint
-
Ou fornecer atualizações baseadas em webhooks/eventos para contagens
5. Lacunas em Sitemap + SEO + Integração com Frameworks
Ao integrar com frameworks modernos (Next.js, Nuxt, etc.):
Problemas:
-
Não há uma API unificada para:
-
tópicos atualizados para geração de sitemap
-
rastreamento de última alteração no nível da categoria
-
suporte completo à indexação de posts
-
Desenvolvedores acabam fazendo:
-
múltiplas chamadas de API por categoria
-
comparação manual de
updated_at -
varredura de paginação para detectar atualizações
Sugestão:
-
Adicionar endpoints dedicados:
-
/categories/updated -
/topics/changes?since=timestamp -
/sitemap.json(feed de sitemap orientado a API)
-
6. Métricas de Usuário e Agregações em Falta
Dados comumente necessários:
-
total de curtidas recebidas por usuário
-
total de curtidas dadas
-
detalhamento de reações por post/usuário
-
estatísticas de engajamento por categoria
Problema atual:
- requer múltiplos endpoints + agregação no frontend
Sugestão:
-
Adicionar endpoints agregados como:
-
/users/{id}/stats -
/topics/{id}/stats
-
7. Flexibilidade de Avatares de Usuário
Limitação atual:
- avatares estão fortemente acoplados ao sistema de upload do Discourse
Solicitação:
-
permitir URLs de avatar externos (S3 / CDN / provedores de autenticação externos)
-
suportar:
external_avatar_url
Isso ajudaria com:
-
sistemas SSO
-
provedores de identidade headless
8. Chaves de API: Admin vs. Chaves de Usuário
Necessidade de esclarecimento na documentação:
Diferença entre:
-
chave de API de admin
-
chave de API de usuário (criada via
/admin/api/keysou endpoints de API de usuário)
Perguntas:
-
regras de ciclo de vida e expiração
-
regras de revogação por usuário vs. global
-
limitações de escopo de segurança por tipo
Isso é crítico ao construir integrações de nível de produção.
Considerações Finais
A API do Discourse já é poderosa, mas parece otimizada para “uso de fórum renderizado no servidor” mais do que para “arquitetura headless/orientada a frontend”.
Frameworks modernos (Next.js, Remix, etc.) se beneficiam muito de:
-
menos idas e vindas (round trips)
-
limites de dados mais claros
-
regras de cache previsíveis
-
melhores endpoints de agregação
Adoraria receber feedback dos mantenedores ou de outros que estão construindo configurações headless do Discourse.
Obrigado ![]()