Lorawan-stack: Renderização de enum inconsistente em respostas JSON

Criado em 29 mar. 2020  ·  5Comentários  ·  Fonte: TheThingsNetwork/lorawan-stack

Resumo

Referências: https://github.com/TheThingsNetwork/lorawan-stack/issues/2047

Os valores retornados por NS para enums no campo mac_settings são inconsistentes. Alguns para alguns NS retornam valores brutos e para outros uma representação de string é retornada.

Passos para reproduzir

  1. Definir mac_settings.rx1_delay.value
// request
{
   "end_device":{
      "mac_settings":{
         "rx1_delay":{
            "value":5 // or 'RX_DELAY_5'
         }
      }
   },
   "field_mask":{
      "paths":[
         "mac_settings.rx1_delay.value",
      ]
   }
}

// response
{
   ...
   "mac_settings":{
      "rx1_delay":{
         "value":5
      },
   }
}

// Note, regardless of what you send as the value for mac_settings.rx1_delay.value you always get the raw enum value.
  1. Definir mac_settings.ping_slot_periodicity.value
// request

{
   "end_device":{
      "mac_settings":{
         "ping_slot_periodicity":{
            "value": 1 // or 'PING_EVERY_2S'
         }
      }
   },
   "field_mask":{
      "paths":[
         "mac_settings.ping_slot_periodicity.value"
      ]
   }
}

// response

{
   "mac_settings":{
      "ping_slot_periodicity":{
         "value":"PING_EVERY_2S"
      }
   }
}

// Again, regardless of what you send you always get the string representation of the value.

O que você vê agora?

Valores inconsistentes para campos enum mac_settings

O que você quer ver em vez disso?

Todos os valores devem ser retornados no mesmo formato (raw/string)

Meio Ambiente

v3.7.0-rc2

Como você se propõe a implementar isso?

Acho que primeiro temos que concordar com o formato. Então é a questão de ajustar https://github.com/TheThingsNetwork/lorawan-stack/blob/master/api/lorawan.proto e https://github.com/TheThingsNetwork/lorawan-stack/blob/master/pkg /ttnpb/lorawan.go

Você pode fazer isso sozinho e enviar um Pull Request?

Sim, mas precisa de informações de @rvolosatovs @johanstokking @htdvisser

bummajor compaapi

Comentários muito úteis

Ótimo para V4

Todos 5 comentários

Qual entrada é necessária de nós ( @rvolosatovs @johanstokking @htdvisser)? Este problema está faltando um rótulo discussion ?

FTR, acho que depende de quais campos estamos falando, mas para coisas MAC específicas de LoRaWAN, acho que devemos usar apenas o número, pois isso se alinha com a especificação (periodicidade do slot de ping de PING_EVERY_2S não é definido na especificação, porém o de 1 é)

Infelizmente, isso não é algo que podemos simplesmente mudar, pois violaria nosso compromisso de compatibilidade com a API, então definitivamente não é algo para março.

Atualmente, existem várias maneiras de renderizar uma enumeração. Por exemplo, MACVersion pode ser renderizado como "MAC_V1_0_2" , 3 (ambos compatíveis com jsonpb) ou como "1.0.2" (com stringer do TTN, não compatível). No passado, cometemos o erro de usar o terceiro ( "1.0.2" ) ao renderizar JSON. Não deveríamos ter feito isso, mas não podemos mais mudar isso sem quebrar nossa API.

Para ser o mais compatível possível, aceitamos todos os formulários nas mensagens de solicitação, mas o que retornamos não pode mais ser alterado facilmente.

No futuro (com a API goproto v2), talvez possamos adicionar suporte para uma extensão no cabeçalho Accept , semelhante a como o Github faz isso. Essa extensão pode ser usada para informar ao servidor como enums (e, por exemplo, campos zero) devem ser renderizados.

fechado, pois não vamos corrigir isso

Eu não acho que devemos descartar isso imediatamente como uma correção. Vamos mantê-lo no backlog e ver se podemos corrigi-lo no futuro.

Ótimo para V4

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

Questões relacionadas

ecities picture ecities  ·  5Comentários

kschiffer picture kschiffer  ·  4Comentários

kschiffer picture kschiffer  ·  6Comentários

ecities picture ecities  ·  5Comentários

johanstokking picture johanstokking  ·  3Comentários