Soll ich in MQTT-Themen Sonderzeichen verwenden?

7

Ich habe MQTT verwendet, um alle meine ESP8266-Geräte anzuschließen, aber ich habe eine allgemeine Frage zu Themen. Laut www.hivemq.com :

  • "Führender Schrägstrich" /sollte vermieden werden.
  • Leerzeichen sollten vermieden werden.
  • Verwenden Sie nur ASCII-Zeichen.
  • Betten Sie eine eindeutige Kennung oder die ClientId in das Thema ein.
  • Usw.

Ich habe mich ziemlich genau darauf angewendet, aber ich verwende einige Sonderzeichen (% und ° zum Beispiel). Zum Beispiel benutze ich:

Garage_Sensor_001/Temperature/°C value

Livingroom_HID_002/Switch_001/Action value

Bedroom_Sensor_001/Motion_001/Detection value

Dh

PLACEMENT_OF_NODE/TYPE_OF_SENSOR_UNIT_OR_ACTION/FUNDAMENTAL_UNIT_OF_VALUE_IF_ANY

Meine Frage lautet also: Soll ich bei der Benennung von MQTT-Themen Sonderzeichen verwenden?

Jimmy Westberg
quelle

Antworten:

6

Goufalite ist in Bezug auf dieses Problem völlig richtig: Es handelt sich überhaupt nicht um ein technisches Problem, sondern nur um ein Namensproblem. Daher ist ein Großteil der Ratschläge auf der Grundlage der Vorstellung des Autors, welche Namen am besten sind, sehr eigensinnig.

Die MQTT 3.1-Spezifikation lautet :

  • Bei Themennamen und Themenfiltern wird zwischen Groß- und Kleinschreibung unterschieden
  • Themennamen und Themenfilter können das Leerzeichen enthalten
  • Themennamen und Themenfilter sind UTF-8-codierte Zeichenfolgen. Sie dürfen NICHT in mehr als 65535 Byte codiert werden

Aus technischen Gründen sind die Regeln nur für ASCII und "keine Leerzeichen" nicht erforderlich. Alle konformen MQTT-Broker sollten in der Lage sein, mit ihnen einwandfrei umzugehen.

Ich stimme einigen der Punkte, die HiveMQ sowieso macht, nicht wirklich zu:

Ein Leerzeichen ist der natürliche Feind eines jeden Programmierers. Oft erschweren sie das Lesen und Debuggen von Themen. Wenn die Dinge nicht so laufen, wie sie sind, sollten sie es sein. Nur weil etwas erlaubt ist, heißt das nicht, dass es verwendet werden sollte. UTF-8 kennt viele verschiedene Leerraumtypen. Es ist ziemlich offensichtlich, dass solche ungewöhnlichen Zeichen vermieden werden sollten.

Es ist höchst unwahrscheinlich, dass Sie Leerzeichen auf andere Weise als nur durch Drücken der SPACETaste auf Ihrer Tastatur verwenden. Daher denke ich nicht, dass die versehentliche Verwendung von Homoglyphen wirklich ein Problem darstellt.

Die Verwendung von Nicht-ASCII-UTF-8-Zeichen macht es wirklich schwierig, Tippfehler oder Probleme im Zusammenhang mit dem Zeichensatz zu finden, da diese häufig nicht korrekt angezeigt werden können. Sofern dies nicht wirklich erforderlich ist, empfehlen wir, die Verwendung von Nicht-ASCII-Zeichen in einem Thema zu vermeiden.

Fairer Punkt - das Eingeben von Nicht-ASCII-Zeichen kann ein großes Problem sein. Persönlich würde ich es Garage_Sensor_001/Temperature/°Ceinfach vermeiden , weil in vielen Tastaturen kein Gradsymbol eingebaut ist (britische Tastaturen sicherlich nicht!). Diese Entscheidung basiert eher auf der Praktikabilität als auf dem Protokoll. Wenn Sie in der Lage sind, Sonderzeichen ohne großen Aufwand zu verwenden, und Sie sicher sind, dass niemand anderes die Zeichen eingeben muss, machen Sie es!

Außerdem wäre ich ein wenig skeptisch gegenüber einigen Ratschlägen von HiveMQ. Weiter unten auf der Seite, die Sie verlinkt haben, steht "Abonnieren Sie nicht #", was auf der Website bereits umstritten ist !

Aurora0001
quelle
8

Ich denke, die Benennung von Themen ist das gleiche Problem wie die Benennung von Variablen : allgemeines Anwendungsdesign.

Lassen Sie es uns anders sagen : Wie verwaltet Ihre Implementierungsprogrammiersprache spezielle Zeichen? Räume? Akzente? ... Besonders wenn Sie sie teilen, daher die Regel "kein Schrägstrich".

Wenn Sie eine perfekte Kontrolle über UTF-8 / ASCII-Codepages haben (vertrauen Sie mir, Sie tun es nicht), dann fahren Sie fort! Setzen Sie Akzente, Sonderzeichen!

Denken Sie dann an Folgendes, und dies gilt für alle Projekte:

  • Evolutivität: Wer kümmert sich um Ihr Projekt? Du? Eine Open-Source-Community? Halten Sie es für jeden (auch für Sie) einfach, keine komplexen / langen Themennamen eingeben zu müssen.
  • I18N: Seien wir ehrlich, beliebte Projekte sind auf Englisch und hey, Englisch hat keine Akzente!
Goufalite
quelle