NEWS
Rest-API - Verständnisproblem
-
Nix curl
Da verwendest du die http Bibliothek.
Die kann das. -
@oliverio Wäre mir am liebsten. Nur das, was ich dafür brauche aus dem Swagger rauszukriegen übersteigt (aktuell) meinen Wissensstand.
-
@rene55 sagte in Rest-API - Verständnisproblem:
Wobei ich dann noch erlernen muss, wie ich denn im ESP einen curl abgesetzt bekommen
Wie @OliverIO schreibt. einfach per http.
Swagger nimmt
curl
weil man aus curl-Beispielen es eigentlich für jede Variante ableiten kann, z.B. PowerShell usw.
Bei curl sind die einzelnen Option schön getrennt und klar ersichtlich, z.B. ob es POST oder GET ist, ob ein Header übergeben wird usw. -
Einfach ChatGPT befragen.
Gerade für Code, insbesondere wenn die lernbasis groß ist, gibt es schon die 90% Idee wie man zum Ziel kommt, auch wenn da manchmal Fehler enthalten sind.
Hier mal eine Abfrage von gerade ebenAuf einem ESP (z. B. ESP32 oder ESP8266) kannst du eine HTTP-
PATCH
-Anfrage mit derHTTPClient
-Bibliothek in der Arduino-IDE ausführen. Hier ist ein Beispielcode, der zeigt, wie du einePATCH
-Anfrage mit JSON-Daten an einen Server sendest:Beispielcode für ESP32/ESP8266:
#include <WiFi.h> // Für ESP32 (nutze <ESP8266WiFi.h> für ESP8266) #include <HTTPClient.h> const char* ssid = "Dein_WLAN_Name"; const char* password = "Dein_WLAN_Passwort"; const char* serverUrl = "http://example.com/api/resource"; // Ziel-URL für PATCH void setup() { Serial.begin(115200); WiFi.begin(ssid, password); // Warten, bis WiFi verbunden ist while (WiFi.status() != WL_CONNECTED) { delay(1000); Serial.println("Verbinde mit WiFi..."); } Serial.println("WiFi verbunden!"); HTTPClient http; http.begin(serverUrl); // URL setzen http.addHeader("Content-Type", "application/json"); // JSON-Header setzen // JSON-Daten für das Patch-Request String jsonPayload = "{\"key1\":\"value1\",\"key2\":\"value2\"}"; int httpResponseCode = http.PATCH(jsonPayload); // PATCH-Request senden if (httpResponseCode > 0) { Serial.print("HTTP Response Code: "); Serial.println(httpResponseCode); String response = http.getString(); Serial.println("Antwort: " + response); } else { Serial.print("Fehler bei PATCH: "); Serial.println(http.errorToString(httpResponseCode).c_str()); } http.end(); // Verbindung schließen } void loop() { // Kein Code hier nötig }
Erklärung:
- WiFi-Verbindung herstellen: Der ESP verbindet sich mit dem WLAN.
- HTTPClient verwenden: Mit
http.begin(serverUrl)
wird die Verbindung zum Server aufgebaut. - Header setzen:
http.addHeader("Content-Type", "application/json")
teilt dem Server mit, dass JSON gesendet wird. - PATCH-Request senden:
http.PATCH(jsonPayload)
sendet die JSON-Daten an den Server. - Antwort auslesen: Der HTTP-Response-Code und die Server-Antwort werden über die serielle Konsole ausgegeben.
Falls dein Server HTTPS verwendet, solltest du stattdessen
WiFiClientSecure
undHTTPClient
verwenden.Falls du weitere Fragen hast oder es für dein Projekt anpassen möchtest, sag Bescheid!
-
@bananajoe Ja soweit alles ok. Wie schon erwähnt, mit Simple-Api (und den ESPs) läuft das bei mir schon geraume Zeit - sowohl zum ESP als auch zurück. Das blöde ist gerade nur, dass ich nicht zu Hause bin und natürlich keinen ESP hier habe. Ich mache jetzt hier nur aus dem Browser heraus.
-
Wenn es läuft würde ich Nix ändern.
Da ist kein so großer unterschied solange dir der Funktionsumfang von simple api ausreicht und der Adapter noch gewartet wird. -
@oliverio Auch das ist soweit richtig. Einzig wollte ich meinen Wissensstand erweitern, wobei ich ja gerade hier schon mehrfach eigenständig versucht habe und gescheitert bin.
Übrigens Danke für das umfangreiche Beispiel. Wo ich dann gleich nachfragen muss: Was muss denn genau bei 'serverUrl' rein? Nicht dass wir uns wieder im Kreis drehen. -
http://ipaddress:8093/v1/state/system.adapter.rest-api.0.memHeapTotal
das wäre eine Server urlles dir auch mal nur so als Basis wissen den wikipedia artikel zu REST durch
https://de.wikipedia.org/wiki/Representational_State_Transfer
ggfs auch mal wie das http protokoll funktioniert
https://de.wikipedia.org/wiki/Hypertext_Transfer_Protocolrest sozusagen auf http darauf modelliert
REST folgt dem CRUD prinzip, also atomare atkionen, wie mit daten umgegangen werden kann crud steht für Create,Read,Update,Delete -
@oliverio Ich werde mir auch diese Grundlagen mal reinziehen, damit meine Fragen etwas weniger kryptisch werden. Ich hatte eigentlich auf die URL für den 'patch' gehofft. Aber der ist ja seit 2023 etwas defekt.
Erstmal Danke für alle Hilfestellungen. Ich werde mir erstmal einen ESP besorgen und dann in "echt" mal in Ruhe testen. Und wenn es nicht geht, leg ich alles in die Tonne und mach mit Simple-API weiter. Bis es mich wieder überfällt! -
@rene55 sagte in Rest-API - Verständnisproblem:
URL für den 'patch' gehofft. Aber der ist ja seit 2023 etwas defekt
wenn du dir REST durchgelesen hast, wird dir klar, das die URL immer gleich ist.
URL steht ja für unified ressource locatior, also sowas um eine ressource (hier datenpunkt) eindeutig zu identifizieren. in der url
http://ipaddress:8093/v1/state/system.adapter.rest-api.0.memHeapTotal
steht ja drin, welches system = http://ipaddress:8093
welche API version = v1
welchen ressourcentyp = state, wahrscheinlich könnte da auch object stehen
welche ressourcenid = system.adapter.rest-api.0.memHeapTotalje nach http methode
put = neuanlegen (create)
get = lesen (read)
patch = ändern (update)
delete = löschen (delete)weiß das system was du da machen möchtest
bei webseiten kennt man meist nur die http methoden get und postwenn werte notwendig sind, können die als sogenannte payload übergeben werden. das steht aber in der doku der http bibliothek dann auch drin. also immer zuerst die dokumentation genau lesen, nur die gilt.
aber das steht in den beiden artikeln auf einer basis, die anfänger nicht so ganz überfordern.
ansonsten empfehle ich nutze chatgpt (auch schon in der kostenlosenversion)
das kann dir das dann alles erklären und ggfs noch leichter aufbereiten.
ansonsten dann gerne auch hier im forum.