Lorawan-stack: Несогласованный рендеринг enum в ответах JSON

Созданный на 29 мар. 2020  ·  5Комментарии  ·  Источник: TheThingsNetwork/lorawan-stack

Резюме

Ссылки: https://github.com/TheThingsNetwork/lorawan-stack/issues/2047

Значения, возвращаемые NS для перечислений в поле mac_settings , несовместимы. Некоторые для некоторых NS возвращают необработанные значения, а для других возвращается строковое представление.

Действия по воспроизведению

  1. Установить 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. Установить 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

bummajor compaapi

Самый полезный комментарий

Отличный вариант для V4

Все 5 Комментарий

Какой вклад требуется от нас ( @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

Была ли эта страница полезной?
0 / 5 - 0 рейтинги