fix(docs): preserva o prefixo /api na URL base da spec OpenAPI by marco-jardim · Pull Request #905 · BrasilAPI/BrasilAPI · GitHub
Skip to content

fix(docs): preserva o prefixo /api na URL base da spec OpenAPI - #905

Open
marco-jardim wants to merge 1 commit into
BrasilAPI:mainfrom
marco-jardim:autopilot/903-docs-servers-api-prefix
Open

marco-jardim wants to merge 1 commit into
BrasilAPI:mainfrom
marco-jardim:autopilot/903-docs-servers-api-prefix

Conversation

@marco-jardim

Copy link
Copy Markdown

Closes #903

Problema

As URLs exibidas no Redoc (/docs) apareciam sem o prefixo /api — por exemplo https://brasilapi.com.br/feriados/v1/{ano} em vez de https://brasilapi.com.br/api/feriados/v1/{ano} — e retornavam 404 ao serem seguidas.

Causa raiz

services/getJsonDoc.js monta a spec única concatenando todos os arquivos de pages/docs/doc/*.json com lodash.merge, que combina arrays por índice.

basic_info.json define a URL base correta:

"servers": [{ "url": "https://brasilapi.com.br/api" }]

Só que eleicoes.json também declarava um servers próprio, sem o prefixo:

"servers": [{ "url": "https://brasilapi.com.br" }]

Como eleicoes.json vem depois de basic_info.json na ordem alfabética do readdirSync, o merge por índice sobrescrevia servers[0].url e a spec inteira passava a apontar para https://brasilapi.com.br. O sintoma aparecia em todos os endpoints, não só em eleições.

O que mudou

  • pages/docs/doc/eleicoes.json: remove o bloco servers redundante. A URL base da spec é responsabilidade do basic_info.json. Isso também corrige as próprias rotas de eleições, que apontavam para /eleicoes/... quando as rotas reais são /api/eleicoes/....
  • services/getJsonDoc.js: extrai servers do merge, exatamente como já era feito com tags e x-tagGroups — os dois casos anteriores em que o merge de arrays do lodash causou problema. Sem isso, qualquer arquivo de doc que venha a declarar servers volta a quebrar a URL base de toda a documentação silenciosamente.
  • tests/docs-spec-refs.test.js: teste cobrindo o caso, no arquivo que já testa a spec agregada.

Como testei

Teste novo falhando antes da correção:

$ npm test -- tests/docs-spec-refs.test.js

 × spec OpenAPI completa (docs) > servers da spec preserva o prefixo /api ...
   → expected 'https://brasilapi.com.br' to be 'https://brasilapi.com.br/api'

 Test Files  1 failed (1)
      Tests  1 failed | 1 passed (2)

Depois da correção:

$ npm test -- tests/docs-spec-refs.test.js

 ✓ tests/docs-spec-refs.test.js (2 tests) 1096ms

 Test Files  1 passed (1)
      Tests  2 passed (2)

Lint, mesmo comando do workflow e2e-tests.yml:

$ npx eslint pages/ services/ lib/ util/ middlewares/ errors/ --ext .js
(exit 0, sem erros)

Suíte completa:

$ npm test

 Test Files  1 failed | 51 passed | 7 skipped (59)
      Tests  2 failed | 462 passed | 77 skipped (541)

As 2 falhas são em tests/diasuteis-v1.test.js e não têm relação com esta mudança — reproduzi as mesmas duas falhas em upstream/main sem nenhuma alteração aplicada (git stash + npm test -- tests/diasuteis-v1.test.js → 2 failed | 6 passed). Não mexi nelas para não misturar escopo.

Impacto de compatibilidade

Nenhum. A mudança afeta apenas a documentação renderizada e o serviço que a agrega. Nenhum handler de pages/api/**, nenhum campo de resposta, nenhum status code e nenhuma URL de endpoint foram alterados. As URLs documentadas passam a coincidir com as rotas que já existiam.


Desenvolvido com assistência de LLM, revisado e testado por mim.

…lAPI#903)

O merge dos arquivos de documentacao usa lodash.merge, que combina arrays por indice. Como eleicoes.json declarava o proprio "servers" apontando para https://brasilapi.com.br, ele sobrescrevia o servers de basic_info.json (https://brasilapi.com.br/api). O Redoc passava a exibir todas as URLs sem o prefixo /api, retornando 404.

- Remove o servers redundante de eleicoes.json
- Extrai servers do merge em getJsonDoc, como ja era feito com x-tagGroups
- Cobre o caso em tests/docs-spec-refs.test.js

Closes BrasilAPI#903
@vercel

vercel Bot commented Sep 1, 2026

Copy link
Copy Markdown

@sonarqubecloud

sonarqubecloud Bot commented Sep 1, 2026

Copy link
Copy Markdown

@felipeflfranca

Copy link
Copy Markdown
Contributor

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

docs: URLs da documentação (Redoc) sem /api retornam 404

4 participants