Olá,
Eu não sei se isso é um bug ou um aprimoramento, mas aqui está
Digamos que eu queira criar uma API com quatro caminhos:
POST /bar
GET /bar/{id_bar}
POST /foo
GET /foo/{id_foo}
Mas vamos considerar que eu os insiro usando a interface do usuário nesta ordem específica:
GET /foo/{id_foo}
POST /bar
GET /bar/{id_bar}
POST /foo
A interface do usuário é boa e os caminhos aparecem classificados, correspondendo ao que eu quero:
Mas o yml resultante não está ordenado e não corresponde ao que aparece na interface do usuário:
openapi: 3.0.2
info:
title: 'Test API'
version: 1.0.0
paths:
'/foo/{id_foo}': {}
/bar: {}
'/bar/{id_bar}': {}
/foo: {}
Normalmente, eu realmente não me importaria com a ordem dos caminhos no arquivo yml bruto
Mas o fato é que o ReDoc segue a ordem dos caminhos no yml
Portanto, a documentação resultante não é ordenada:
Isso é um problema porque uma vez que uma API começa a viver, alguns caminhos são atualizados, alguns são excluídos e alguns são criados
Isso significa que a documentação resultante está rapidamente se tornando uma bagunça ilegível
Tenho algumas ideias, estão longe de ser perfeitas, mas é um começo
Talvez possamos construir sobre eles e elaborar
Ops, desculpe, esqueci de anexar o YML que usei para as capturas de tela do ReDoc
(O que colei não tem operações, então o ReDoc gera um documento vazio)
openapi: 3.0.2
info:
title: 'Test API'
version: 1.0.0
paths:
'/foo/{id_foo}':
get:
summary: 'Obtain a foo'
parameters:
-
name: id_foo
in: path
required: true
schema:
type: number
responses:
'201':
description: 'A foo'
/bar:
post:
summary: 'Create a bar'
responses:
'200':
description: 'A bar'
'/bar/{id_bar}':
get:
summary: 'Obtain a bar'
parameters:
-
name: id_bar
in: path
required: true
schema:
type: number
responses:
'201':
description: 'Bar created'
/foo:
post:
summary: 'Create a foo'
responses:
'200':
description: 'Foo created'
Esta é uma questão interessante que surpreendentemente não surgiu antes! Na verdade, existem alguns lugares na interface do usuário onde acho que deveríamos fornecer sua opção C - exibir os itens na ordem em que aparecem no documento, mas oferecer opções para classificar e reordenar (arrastar e soltar, presumivelmente).
Dito isso, uma solução temporária seria classificar os caminhos e outras listas antes de entregar o conteúdo ao ReDoc. Isso seria rápido e fácil de fazer e resolveria o problema específico do recurso "Preview" do Apicurio.
Algum pensamento/idéia sobre isso, @jsenko ?
Eu me deparei com esses problemas também; minha observação sobre isso é que o APICURIO apenas acrescenta uma nova definição ao YAML atual quando criamos novos caminhos; ou quando substituímos totalmente o yaml (por exemplo, para caminho individual se eu modificar algo da guia 'fonte').
Eu manipulo manualmente o banco de dados para corrigir isso depois que eu mesmo modifico o YAML (e atualizo a coluna) e, de alguma forma, tudo foi quebrado que eu tenho que remover o projeto e reiniciar novamente.
Como @EricWittmann disse, acho melhor classificar os caminhos e outras listas antes de entregar o conteúdo ao ReDoc, ou poderíamos usar outro botão na guia 'fonte' ao lado do botão 'Formatar' (talvez nomeando como 'Sort Paths'), que podemos lidar por nós mesmos.
Assim como o nº 394, acho que a ideia geral aqui é que a IU do Apicurio deve corresponder à ordenação YAML para todos os tipos de elementos (caminhos, campos, provavelmente tipos de dados) porque essa ordem às vezes é importante (como para gerar documentação).
Uma coisa simples que seria útil aqui é habilitar o botão Salvar ao editar o YAML bruto e alterar apenas a ordem dos elementos. Atualmente, o Apicurio é um pouco inteligente demais e desativa o botão Salvar quando a única coisa que mudou é a ordem dos elementos.
Acho que a melhor coisa é ordenar na interface do usuário para corresponder à fonte (como mencionado) e para que os usuários possam mover as coisas por meio de arrastar e soltar. Essa não é uma mudança trivial, mas é a coisa certa a fazer IMO. Pensamentos @jsenko ?
Comentários muito úteis
Eu me deparei com esses problemas também; minha observação sobre isso é que o APICURIO apenas acrescenta uma nova definição ao YAML atual quando criamos novos caminhos; ou quando substituímos totalmente o yaml (por exemplo, para caminho individual se eu modificar algo da guia 'fonte').
Eu manipulo manualmente o banco de dados para corrigir isso depois que eu mesmo modifico o YAML (e atualizo a coluna) e, de alguma forma, tudo foi quebrado que eu tenho que remover o projeto e reiniciar novamente.
Como @EricWittmann disse, acho melhor classificar os caminhos e outras listas antes de entregar o conteúdo ao ReDoc, ou poderíamos usar outro botão na guia 'fonte' ao lado do botão 'Formatar' (talvez nomeando como 'Sort Paths'), que podemos lidar por nós mesmos.