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.
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.
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.
Valores inconsistentes para campos enum mac_settings
Todos os valores devem ser retornados no mesmo formato (raw/string)
v3.7.0-rc2
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
Sim, mas precisa de informações de @rvolosatovs @johanstokking @htdvisser
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
Comentários muito úteis
Ótimo para V4