Datei → Neu → Neuer API-Test öffnet einen HTTP-Client, der in einer
.lnh-Datei gespeichert wird. Eine Datei steht für einen Endpunkt
(Methode, URL, Kopfzeilen und Textkörper) und behält mehrere Tests in der
Liste links — jeder Test mit seinen Werten für die in URL, Kopfzeilen und Textkörper
verwendeten Variablen {name}, plus dem Ergebnis der letzten Ausführung
(Status, Zeit, Datum, Antwort-Kopfzeilen und -Textkörper). Es zeigt auch den
entsprechenden curl-Befehl. Dieselbe einmalige Operation ist über
CLI (http) und MCP (http_request)
verfügbar. Der Tester verwendet curl, das in Windows 10 und 11 bereits enthalten ist; fehlt es, öffnet LightNote vor dem Senden den Installationsleitfaden.
Senden und Antwort lesen
Strg+Enter sendet die Anfrage. Solange die Antwort nicht da ist, wird
derselbe Knopf zu Stoppen (oder Esc), und die Wartezeit zeigt die Sekunden.
Das Abzeichen der Antwort zeigt Status und Dauer; daneben stehen Typ, Größe und wann der
Test lief. Die curl-Zeile folgt dem, was du tippst, schon mit den Variablen
des ausgewählten Tests: der Knopf daneben kopiert den Befehl, und sein Pfeil bietet dasselbe
in PowerShell, Python, JavaScript, C# und HTTPie. Einen curl-Befehl direkt in
die URL einzufügen, übernimmt Methode, Kopfzeilen und Text, ohne die Tests zu löschen.
Eine Variable ohne Wert im Test wird wörtlich gesendet ({id} in der
URL, und der Server antwortet mit einem Fehler, der nicht sagt, warum) — der Tab
Variablen hebt sie hervor und nennt sie. Der Punkt neben jedem Test in der Liste hat
die Farbe des letzten Status, und der leere Ring ist ein Test, der noch nicht lief. In der
Antwort formatiert die Leiste über dem Text JSON/XML nur auf dem Bildschirm, bricht Zeilen
um, kopiert den Text und speichert ihn so, wie er kam, in einer Datei.
Die Anfrage zusammenstellen. Der Tab Parameter zeigt die Query der URL als Liste: Eine Zeile zu ändern ändert die URL, und die URL zu ändern ändert die Liste. Der Tab Authentifizierung baut die Kopfzeile selbst — Basic, Bearer oder API-Schlüssel, in einer Kopfzeile oder in der URL —, und jedes Feld nimmt eine {variable} an, damit das Geheimnis in der Umgebung liegt und nicht in der Datei; hat der Tab Kopfzeilen schon dieselbe Kopfzeile, gilt diese. Im Text wählt der Typ JSON, XML, SOAP, Formular, Multipart (Textfelder und Dateien) oder eine binär gesendete Datei, und der Content-Type wird ergänzt, wenn du keinen geschrieben hast. Ein relativer Dateipfad zählt ab dem Ordner der .lnh. Bei Multipart oder Datei graut der Pfeil der Kopieren-Schaltfläche PowerShell und JavaScript aus, weil sie diesen Text nicht senden können. Der Tab Optionen ändert das Zeitlimit (standardmäßig 60 s) und lässt die Anfrage Weiterleitungen folgen — ohne das zeigt die Antwort das 3xx selbst. In einer älteren LightNote-Version geöffnet, wird die Datei ohne die Authentifizierung und ohne den Typ gesendet, nie als eine andere Anfrage. Für einen lokalen Server mit eigenem Zertifikat schaltet Zertifikat nicht prüfen (HTTPS) die Prüfung ab: Solange die Option aktiv ist, steht in der Antwortzeile Zertifikat nicht geprüft, und lnote http-run sagt es auch im Bericht.
Die Antwort lesen. Der Antworttext öffnet sich in einem schreibgeschützten Code-Editor, hervorgehoben nach dem Typ der Antwort, mit Faltung und der Suche des Fensters (Ctrl+F). Der Tab Cookies listet, was der Server speichern lassen will, und der Zeitverlauf zeigt die genau gesendete Anfrage — mit den Kopfzeilen, die curl selbst ergänzt hat — und die rohen Kopfzeilen der Antwort. Der Zeitverlauf bleibt nur im Speicher: Er wiederholt die Authorization, und die Datei landet in Git.
Prüfungen
Der Tab Prüfungen zeigt, ob der Test bestanden hat. Jede Zeile
vergleicht einen Teil der Antwort — den Status, eine Kopfzeile, den ganzen Text, einen
JSONPath ($.user.id, $.items[0].name,
$.items.length()), einen XPath (//Price,
count(//Item)) oder die Zeit in Millisekunden — mit dem erwarteten Wert: gleich,
verschieden, größer, kleiner, enthält, passt auf einen regulären Ausdruck, existiert oder ist
von einem Typ. Im XPath wird das Namenspräfix ignoriert, soap:Envelope und
Envelope sind also derselbe Schritt. Mit Prüfungen entscheiden sie das Ergebnis:
ein erwartetes 404 besteht, und ein 200 mit falschem Feld fällt durch. Das Ergebnis jeder
Prüfung steht in der letzten Spalte, die Zusammenfassung neben dem Abzeichen der Antwort, und
der Punkt des Tests in der Liste wird grün oder rot. Eine abgewählte Zeile bleibt in der
Datei, zählt aber nicht zum Ergebnis.
Der Abspielknopf oben in der Liste führt alle Tests der Datei nacheinander aus und zeigt, wie viele bestanden haben. Sobald ein Test zweimal gelaufen ist, öffnet der Vergleichsknopf über dem Antworttext die vorherige und die aktuelle Ausführung nebeneinander, mit auf beiden Seiten formatiertem Text. Nur die vorherige Ausführung wird gespeichert: die Datei kommt ins Git, und ein langer Verlauf würde jeden Diff füllen.
Umgebungen, Erfassungen und der ganze Ordner
Umgebungen nutzen das offene Format von JetBrains und VS Code: eine
http-client.env.json im Ordner (oder darüber) mit einem Objekt pro Umgebung —
{"dev": {"host": "http://localhost:8080"}} — und daneben eine
http-client.private.env.json mit den Geheimnissen, damit sie nicht ins Git
kommen. In derselben Umgebung gewinnt die private Datei, und $shared gilt für
alle. Die Auswahl neben der URL wählt die Umgebung, und das Import-/Exportmenü erstellt die
Datei. Eine Variable kommt aus dem Test, dann aus einer Erfassung, dann aus der Umgebung, und
der Tab Variablen zeigt, woher jede stammt.
Der Tab Erfassungen speichert einen Teil der Antwort als Variable — das
token eines Logins, die id einer neu angelegten Ressource — für die
folgenden Tests in dieser Datei und in den anderen desselben Ordners. So versorgt eine
Login-.lnh den authentifizierten Aufruf einer anderen. Der erfasste Wert bleibt
nur im Speicher und kommt nie in die Datei.
Der Ordner ist die Sammlung: lnote http-run --path <Ordner> --env dev
führt alle seine .lnh in natürlicher Reihenfolge aus (01-login vor
02-profil) und endet mit Fehler, wenn ein Test fehlschlägt — passend für eine CI.
Dieselbe Ausführung gibt es per MCP als http_test_run, damit der KI-Agent deine
Tests ausführen kann. Standardmäßig bleiben die Dateien unverändert; --save
schreibt das letzte Ergebnis jedes Tests hinein.
Importieren und exportieren
OpenAPI importieren und exportieren. Die Pfeil-Schaltfläche oben
in der Testliste öffnet OpenAPI importieren… und OpenAPI exportieren…. Der
Import liest eine Spezifikation in YAML oder JSON in den drei gebräuchlichen
Generationen — Swagger 2.0, OpenAPI 3.0 und 3.1 — und baut den Test
selbst auf: die {Parameter} im Pfad verwenden bereits dieselbe Syntax wie die
{Name}-Variablen der .lnh-Datei, die deklarierten Beispiele
werden zu den Testwerten, das Sicherheitsschema wird zum Authorization-Header,
und jeder deklarierte Server wird zu einem eigenen Test (Test- und Produktivumgebung
nebeneinander). Da eine .lnh-Datei einen Endpunkt enthält, fragt eine
Spezifikation mit mehreren Operationen, welche importiert werden soll — oder schreibt
alle auf einmal, eine .lnh-Datei pro Operation.
Der Export geht den umgekehrten Weg und erzeugt aus der Datei eine
OpenAPI-3.0.3-Spezifikation: Server, Parameter und Rumpf stammen aus der Vorlage, die
Beispielantworten aus den aufgezeichneten Ausführungen. Das ist ein Gerüst, kein
vollständiger Vertrag — die .lnh-Datei beschreibt Aufrufe, also werden Typen,
Beschreibungen und Schemata nicht rekonstruiert. Ihre Tests reisen im Feld
x-lightnote-tests mit und kommen deshalb beim erneuten Import unversehrt
zurück.
Einen curl-Befehl importieren. In derselben Schaltfläche öffnet
curl-Befehl importieren… ein Einfügefeld — von dort kommt der Befehl, nicht von
der Festplatte, und das Feld ist vorausgefüllt, wenn ein curl in der
Zwischenablage liegt. Es versteht die drei Dialekte, in denen derselbe Befehl kursiert:
Als cURL kopieren aus Chrome/Firefox (einfache Anführungszeichen), Copy as cURL
(cmd) unter Windows (mit ^) und das mit \ umbrochene
Beispiel aus der Dokumentation. Die Methode stammt aus -X — oder wird
abgeleitet: POST, wenn ein Rumpf vorhanden ist, sonst GET.
Der Import ist wörtlich: Kein Wert wird von selbst zu einer
{Name}-Variablen, denn zu raten, welches Token ein Geheimnis ist, ginge
schief. Einige Fälle warnen, statt zu lügen — ein Rumpf aus einer Datei (-d
@datei) kann nicht gelesen werden, und ein Multipart-Upload (-F) wird
nicht originalgetreu nachgebildet; die Felder landen deshalb als Text im Rumpf, damit Sie
sie anpassen können.
Aus einem anderen Tool importieren. Aus einem anderen Tool importieren… liest eine .http/.rest-Datei (REST Client für VS Code, JetBrains, Visual Studio), eine Postman-Sammlung oder -Umgebung, einen Insomnia-Export (v4 als JSON oder v5 als YAML), die HAR-Datei, die der Browser mit Alle als HAR speichern schreibt, eine Bruno-Datei .bru (oder den ganzen Ordner über Bruno-Ordner importieren…) und die WSDL eines SOAP-Dienstes. Das Format wird am Inhalt erkannt, nicht an der Endung. Jede Anfrage wird zu einer .lnh, und die Ordner der Sammlung werden zu Ordnern: Wählen Sie eine für diese Datei oder speichern Sie alle auf einmal. {{name}} wird zu {name}, die Authentifizierung zu einer Kopfzeile, Umgebungen landen in http-client.env.json (was die Quelle als geheim markiert, in der .private-Datei), ohne einen vorhandenen Wert zu ändern, und die Prüfungen und Erfassungen von Bruno — sowie pm.response.to.have.status aus Postman — werden zu Prüfungen und Erfassungen hier. Aus einer HAR kommen nur die API-Aufrufe und die Seite, mit der Antwort des Browsers als letzter Ausführung; aus einer WSDL entsteht pro Operation ein SOAP-Umschlag mit SOAPAction und jedem Feld als Variable.
Was keine Entsprechung hat, bleibt unverändert und wird genannt: Skripte vor und nach der Anfrage werden nicht konvertiert, dynamische Variablen ({{$guid}}) und Verkettungen bleiben wörtlich, und Basic mit Variable, Multipart-Text und Datei-Text landen im Tab Authentifizierung und im Typ des Textes — der Dateipfad, der vom anderen Rechner stammt, wird zum Prüfen aufgelistet. Beim Speichern der Sammlung wird dieser Bericht zu einer Notiz im Zielordner. Als .http exportieren… geht den umgekehrten Weg mit dem ausgewählten Test: die Vorlage mit {{name}} und die Werte als @name = Wert.
Inhalt
Bearbeiten
- Überblick
- Erste Schritte
- Arbeitsbereich und Fenster
- Aktivitäten-Panel: Aufgaben und Meldungen
- Code-Editor
- Markdown und Wikilinks
- Diagramme (Mermaid)
- Mathematik und Chemie (LaTeX)
- Kalender in der Notiz
- Nummerierung und Querverweise
- Zitate und Literaturverzeichnis
- Norm für wissenschaftliche Arbeiten
- Verbindungsgraph
- Tabellen (Parquet, CSV, JSON, Excel)
- Analysebereich: Pivot-Tabelle und mehrere Diagramme
- PDF und Bilder
- Bilder: einen Screenshot markieren
- HTML-Seiten (.html)
- Zip als Ordner (.zip)
- Blöcke (.lnb)
- Aufgaben (Kanban / Gantt)
- Benutzerdefinierte Tabelle (.lnd)
- Bases (gespeicherte Abfragen über Ihre Notizen)
Werkzeuge
- In Dateien suchen und Ausstehend
- Versionsverwaltung (einfaches Git)
- Snapshots und Sicherung
- Änderungen überprüfen (Checkpoints)
- Dateien vergleichen (diff)
- Code ausführen (F5)
- Terminal und KI-CLIs
- KI-Assistent für die Auswahl (Strg+K / Strg+I)
- KI auf Ihrem Computer
- KI-Sitzungen
- KI-Chat
- HTTP-APIs testen (.lnh)
- Datenbanken (.lnc)
- SSH-Verbindung (.lns)
- Sicherheit: Sicherheitsphrase, PIN und sicheres Markdown
- Tägliche Notizen, Schnellerfassung und Infobereich
- Alte Notizen wiederfinden
- Ihre Notizen auf dem Handy
- Audio aufnehmen (Stimme, Besprechung) mit KI-Transkription
- Haftnotizen
- Kalender
- Befehlspalette
Automatisierung (KI / Skripte)
Referenz