REST WebAPI Fragen

  • Allgemein

Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von Mono.

    REST WebAPI Fragen

    Hi,

    Ich schreibe zur Zeit an einem Projekt dass Sensordaten von Arduinos sammelt und diese via einer API zur Verfügung stellt. Die API wurde mit Flask in Python geschrieben, ist allerdings nebensächlich für das was die Frage beinhaltet.
    Ich erhalte folgenden String von jedem meiner Arduinos in meinen Broker:
    VALUE|USER|SENSORID
    Value ist der gemessene Sensorwert, User der Nutzer der gerade am Sensorarray angemeldet ist, und SensorID die Kennung des Sensors. Die Idee ist dass anhand der SensorID geprüft wird ob für diesen Sensor bereits eine Tabelle existiert und wenn nicht dann wird eine angelegt und der Messwert darin abgelegt, mit Timestamp und Nutzerkennung. Der Broker hat einen Buffer der bis zu 5 Messwerte Nachrichten hält damit nicht jede Sekunde die API aufgerufen werden muss.

    Hier ist auch schon das erste Problem: Nach REST Richtlininen müsste ich ja einen POST Request an den entsprenchenden Sensor z.B. "API/Sensor/Temperatur" schicken, aber ich will ja alle Werte des Buffers versenden und diese haben halt unter Umständen unterschiedliche SensorID gehören also in unterschiedliche Tabellen. Deswegen habe ich es so gelöst, das ich einen POST Request mit

    Quellcode

    1. [{
    2. "value" : 22,
    3. "user" : "TE",
    4. "timestamp" : "some timestamp",
    5. "sensorID" : "TEMPERATURE"
    6. },
    7. {"value" : 22,"user" : "TE","timestamp" : "some timestamp","sensorID" : "HUMIDTIY"}]

    an API/Sensor/ versende was ja nicht unbedingt REST konform ist, da man immer die Ressource ansprechen sollte die geändert werden soll.

    Nächstes Problem:
    Wie würde ich elegant eine Zeitraum basierte Auswertung realisieren? Daten holen geht laut REST mit GET also API/Sensor/Temperature, heißt ich müsste hier im Body eine Timespan angeben, dass ist allerdings natürlich auch nicht wirklich sauber :/ .

    Hofffe jemand kann mir hier einen Tipp geben wie sich das sauber lösen lässt.

    8-) faxe1008 8-)
    Definiere

    faxe1008 schrieb:

    Zeitraum basierte Auswertung
    Die Aufnahme eines Messwertes ist praktisch ein Zeitpunkt, den kannst Du mit DateTime.Now auslesen.
    Zwei Messwerten kannst Du einen TimeSpan zuweisen, die Differenz der beiden Zeitpunkte.
    Inwieweit das sinnvoll ist, kann ich jetzt nicht sagen.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Ich verstehe um ehrlich zu sein dein Datenmodell nicht zu 100% .

    Hier her:

    XML-Quellcode

    1. API/Sensor/Temperatur

    würde man normalerweise gar nix posten. Sondern

    XML-Quellcode

    1. API/Sensor/<SensorID>/Temperatur


    Wenn du mehrere Temperaturen für unterschiedliche Sensoren hast und die mit einem Mal posten willst würde ich einen neuen Extra Endpoint erstellen ala:

    XML-Quellcode

    1. API/TempCollection
    Das ist meine Signatur und sie wird wunderbar sein!

    faxe1008 schrieb:

    Bleibt noch die Sache mit der zeitraumbasierten Auswertung
    Was meinst Du damit?
    Das eine ist das Abholen der Werte innerhalb der beiden Zeitpunkte, das sollte ein Klacks sein,
    die Darstellung, Interpretation usw. ist was völlig anderes, da können wir Dir ohne Aufgabenstellung nicht helfen.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Ich würde es wie gesagt mit GET Parametern in der URL machen (also GET /API/Sensor?startdate=20170101&enddate=20171231. Die verwendet man normalerweise für Filter oder Such Parameter.
    Das ist meine Signatur und sie wird wunderbar sein!