Lorawan-stack: JSON応答での一貫性のない列挙型レンダリング

作成日 2020年03月29日  ·  5コメント  ·  ソース: TheThingsNetwork/lorawan-stack

概要

参照: https ://github.com/TheThingsNetwork/lorawan-stack/issues/2047

mac_settingsフィールド内の列挙型に対してNSから返される値に一貫性がありません。 一部のNSは生の値を返し、その他の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列挙型フィールドの値に一貫性がありません

代わりに何を見たいですか?

すべての値は同じ形式(raw / string)で返される必要があります

環境

v3.7.0-rc2

これをどのように実装することを提案しますか?

まず、フォーマットについて合意する必要があると思います。 次に、https://github.com/TheThingsNetwork/lorawan-stack/blob/master/api/lorawan.protoとhttps://github.com/TheThingsNetwork/lorawan-stack/blob/master/pkgを調整します。 /ttnpb/lorawan.go

これを自分で行い、プルリクエストを送信できますか?

はい、ただし@rvolosatovs @ johanstokking @ htdvisserからの入力が必要です

bummajor compaapi

最も参考になるコメント

V4に最適

全てのコメント5件

私たち( @rvolosatovs @johanstokking @htdvisser)からどのような入力が必要ですか? この問題にはdiscussionラベルがありませんか?

FTR、それは私たちが話しているフィールドに依存すると思いますが、LoRaWAN固有のMACのものについては、仕様と一致しているので、数字だけを使用する必要があると思います( PING_EVERY_2SのPingスロットの周期性はそうではありません仕様で定義されていますが、 1の1つは)

残念ながら、これはAPI互換性のコミットメントに違反するため、変更できるものではありません。したがって、これは3月の問題ではありません。

現在、列挙型をレンダリングする方法は複数あります。 たとえば、 MACVersionは、 "MAC_V1_0_2"3 (両方ともjsonpb準拠)、または"1.0.2" (TTNのストリンガーを使用、非準拠)としてレンダリングできます。 過去に、JSONをレンダリングするときに3番目( "1.0.2" )を使用するという間違いを犯しました。 それを行うべきではありませんでしたが、APIを壊さずにそれを変更することはできません。

可能な限り互換性を保つために、リクエストメッセージのすべてのフォームを受け入れますが、返されるものを簡単に変更することはできなくなりました。

将来的には(goproto v2 APIを使用して)、Githubがこれを行うのと同様に、 Acceptヘッダーに拡張機能のサポートを追加する可能性があります。 次に、この拡張機能を使用して、列挙型(およびたとえばゼロフィールド)をレンダリングする方法をサーバーに指示できます。

これを修正しないので閉じました

これをすぐに却下するべきではないと思います。 バックログに残して、将来修正できるかどうか見てみましょう。

V4に最適

このページは役に立ちましたか?
0 / 5 - 0 評価

関連する問題

johanstokking picture johanstokking  ·  8コメント

ecities picture ecities  ·  5コメント

kschiffer picture kschiffer  ·  6コメント

MatteMoveSRL picture MatteMoveSRL  ·  7コメント

johanstokking picture johanstokking  ·  5コメント