Apicurio-studio: A ordem do caminho na API yml não está ordenada e não corresponde ao caminho na interface do usuário

Criado em 12 mar. 2019  ·  5Comentários  ·  Fonte: Apicurio/apicurio-studio

Olá,

Eu não sei se isso é um bug ou um aprimoramento, mas aqui está

descrição do assunto

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:

image

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:

image

image

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

O que pode ser feito

Tenho algumas ideias, estão longe de ser perfeitas, mas é um começo
Talvez possamos construir sobre eles e elaborar

  • Sempre classifique a API de saída
    Prós: Fácil de implementar (eu acho?)
    Contras: Os usuários não podem escolher seu próprio pedido
  • Adicione uma opção para classificar os caminhos na API de saída
    Prós: Fácil de implementar (eu acho?)
    Contras: O usuário não pode alterar a ordem dos caminhos individuais
  • Modifique a interface do usuário para que os caminhos exibidos não sejam ordenados,
    e adicione um botão para classificar tudo + botões para mover caminhos individuais para cima e para baixo
    Prós: Resolveria tudo
    Contras: Mais difícil de implementar (eu acho?)
enhancement

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.

Todos 5 comentários

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 ?

Esta página foi útil?
0 / 5 - 0 avaliações