Ссылки: https://github.com/TheThingsNetwork/lorawan-stack/issues/2047
Значения, возвращаемые NS для перечислений в поле mac_settings
, несовместимы. Некоторые для некоторых NS возвращают необработанные значения, а для других возвращается строковое представление.
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.
Несогласованные значения для полей перечисления mac_settings
Все значения должны быть возвращены в одном и том же формате (необработанный/строковый)
v3.7.0-rc2
Думаю, сначала мы должны согласовать формат. Затем нужно настроить https://github.com/TheThingsNetwork/lorawan-stack/blob/master/api/lorawan.proto и https://github.com/TheThingsNetwork/lorawan-stack/blob/master/pkg .
Да, но требуется информация от @rvolosatovs @johanstokking @htdvisser
Какой вклад требуется от нас ( @rvolosatovs @johanstokking @htdvisser)? В этой проблеме отсутствует ярлык discussion
?
FTR, я думаю, это зависит от того, о каких полях мы говорим, но для материалов MAC, специфичных для LoRaWAN, я думаю, мы должны использовать только число, так как это согласуется со спецификацией (периодичность слота Ping PING_EVERY_2S
не определено в спецификации, однако один из 1
является)
К сожалению, это не то, что мы можем просто изменить, так как это нарушит наши обязательства по совместимости API, так что это определенно не то, что нужно для марта.
В настоящее время действительно существует несколько способов отображения перечисления. Например, MACVersion
может отображаться как "MAC_V1_0_2"
, 3
(оба совместимы с jsonpb) или как "1.0.2"
(со стрингером TTN, не совместимым). В прошлом мы совершали ошибку, используя третий ( "1.0.2"
) при рендеринге JSON. Мы не должны были этого делать, но мы больше не можем изменить это, не нарушая наш API.
Чтобы быть как можно более совместимыми, мы принимаем все формы в сообщениях запросов, но то, что мы возвращаем, уже нельзя легко изменить.
В будущем (с API goproto v2) мы могли бы добавить поддержку расширения в заголовке Accept
, аналогично тому, как это делает Github. Затем это расширение можно использовать, чтобы сообщить серверу, как должны отображаться перечисления (и, например, нулевые поля).
закрыто, так как мы не будем это исправлять
Я не думаю, что мы должны немедленно отмахнуться от этого как от исправления. Давайте сохраним это в бэклоге и посмотрим, сможем ли мы это исправить в будущем.
Отличный вариант для V4
Самый полезный комментарий
Отличный вариант для V4