Drehen Sie einen Eisenbahn SQL-Abfrage in eine REST-API Endpunkt
Speichern Sie eine Abfrage im Abfrage-Generator, klicken Sie Neuer EndpunktSie verfügen über eine URL unter api.querystreams.com mit einem eigenen Schlüssel. Die SQL-Abfrage wird schreibgeschützt auf dem Agenten ausgeführt, der bereits mit Ihrer Railway-Datenbank verbunden ist. Der Aufrufer erhält JSON- oder CSV-Daten und sieht weder die SQL-Abfrage noch das Schema oder ein Passwort. Es muss weder Hosting noch das Öffnen eines Ports erforderlich sein. Die Abfrage wird in etwa 90 Sekunden gespeichert, und der kostenlose Tarif deckt Ihren ersten Endpunkt ab.
Was am Ende dabei herauskommt
Eine URL bei api.querystreams.com Diese Funktion gibt die Zeilen Ihrer gespeicherten Railway-Abfrage als JSON- oder CSV-Datei an jeden mit einem entsprechenden Schlüssel zurück. Sie wurde vor der Weitergabe über die Konsole im Portal getestet. Beispiel:
| Schlüssel | Wert | Beschreibung |
|---|---|---|
Stadt Zeichenfolge Optional | Seattle | Aufrufbarer Filter aus der gespeicherten Abfrage |
X-API-Schlüssel | qsapi_AB•••••••••• | Ihr geheimer Token |
{
"Stadt": "Seattle"
}| Kopfzeile | Wert | Beschreibung |
|---|---|---|
X-API-Schlüssel | qsapi_AB•••••••••• | Ihr geheimes Token. Eines pro Anrufer, jederzeit widerrufbar. |
Inhaltstyp | application/json | Die Parameter werden als JSON-Body übertragen. |
Akzeptieren | application/json | JSON-Rückgabe; bei Anfrage nach Text/CSV erhalten Sie CSV. |
curl -X POST "https://api.querystreams.com/v1/endpoints/8f2c4d1e-6b3a-4f7e-9c21-5d0a7b3e2f19" \ -H "X-API-Key: qsapi_YOUR_KEY" \ -H "Content-Type: application/json" \ -d '{"city": "Seattle"}'{
"Spalten": [ { "Name": "customer_id", "Typ": "ganze Zahl" }, { "Name": "Name", "Typ": "Zeichenkette" }, { "Name": "Stadt", "Typ": "Zeichenkette" } ],
"Zeilen": [
{ "customer_id": 1042, "Name": "Northwind Traders", "Stadt": "Seattle" },
{ "customer_id": 1057, "Name": "Alpine Outfitters", "Stadt": "Denver" },
{ "customer_id": 1063, "Name": "Harbour Foods", "Stadt": "Halifax" }
],
"Meta": { "Zeilenanzahl": 3, "agent_duration_ms": 41, "request_id": "req_7Hq2mKd9" }
}| Kopfzeile | Wert | Beschreibung |
|---|---|---|
Inhaltstyp | application/json; charset=utf-8 | Der Umschlag auf der Registerkarte "Body". |
Inhaltslänge | 412 | Zurückgegebene Bytes; das Größenabzeichen oben |
Railway speichert Ihre Daten in der Cloud, betrieben vom jeweiligen Anbieter. Jemand anderes möchte einen Teil davon in seiner App, seinem Dashboard oder seinem Skript nutzen, doch die üblichen Lösungen sind mit zu vielen offenen Daten verbunden: ein Datenbank-Login, der das Projekt überdauert, ein nächtlicher Export, der schon am Morgen veraltet ist, oder ein kleiner API-Server, der nun von jemandem betrieben und aktualisiert werden muss. Query Streams macht den Endpunkt zu einer gespeicherten Abfrage plus einem Schlüssel. Der Agent, der bereits mit Ihrer Railway-Postgres-Datenbank verbunden ist, führt die Abfrage aus, api.querystreams.com prüft den Schlüssel und das Ratenlimit, und der Aufrufer erhält die Zeilen. SQL-Code, Schema und Zugangsdaten verlassen niemals Ihr Konto.
Was Sie benötigen
Ein Query Streams-Konto
Jeder Tarif beinhaltet die REST-API. Die kostenlose Version bietet einen Endpunkt, zwei Schlüssel und 250 Zeilen pro Aufruf – ausreichend für diese Anleitung. Jetzt anmelden unter mein.querystreams.de.
Der Agent läuft auf jedem ständig eingeschalteten Computer, mit zusätzlicher Bahnverbindung.
Es benötigt lediglich einen Internetanschluss.
Eine gespeicherte Abfrage im Abfrage-Generator
Der Endpunkt umschließt genau eine gespeicherte Abfrage. Schreiben Sie die SELECT-Anweisung, führen Sie sie einmal aus und speichern Sie sie. Fügen Sie einen dynamischen Filter hinzu (einen dynamischen Filter). @variable in der WHERE-Klausel), wenn Aufrufer die Möglichkeit haben sollen, zu filtern.
Wer kann Endpunkte erstellen? Eigentümer, Administratoren und Ersteller. Wenn die API Dieser Eintrag fehlt in Ihrer oberen Leiste. Ein Administrator kann ihn für Ihren Benutzer aktivieren. Konto → BerechtigungenJeder, mit dem Sie einen Endpunkt teilen, benötigt lediglich ein Query Streams-Konto, unabhängig vom gewählten Tarif.
Richten Sie es in vier Schritten ein
-
Abfrage speichern
In Abfrage-Generator Wählen Sie Ihre Railway-Verbindung, schreiben Sie die zu veröffentlichende SELECT-Abfrage und führen Sie sie einmal aus, um die Zeilen anzuzeigen. Beschränken Sie sich auf die vom Aufrufer benötigten Spalten; der Endpunkt liefert genau das Ergebnis der Abfrage.
Gespeicherte Anfrage · KundenSELECT Kunden-ID, Name, Stadt VON öffentliche Kunden BEFEHL VON Name LIMIT 100;
Wenn Anrufer filtern können sollen, fügen Sie einen dynamischen Filter hinzu, zum Beispiel
WHERE city = @city. Jede@variablewird in Schritt 3 zu einem API-Parameter. Klicken Sie Speichern Sie und geben Sie der Abfrage einen Namen; dieser Name wird zum Anzeigenamen des Endpunkts. -
Erstellen Sie den Endpunkt
Öffnen API in der oberen Leiste klicken Sie auf Neuer EndpunktDer Zauberer hat vier Schritte. Abfrage auswählen, Konfigurieren, Sperrparameter und Teilen. An Abfrage auswählenKlicken Sie auf die soeben gespeicherte Abfrage; Abfragen, deren Agent offline ist, werden ausgegraut angezeigt. Weiter.
Abkürzung. Im Abfrage-Generator können Sie die geöffnete Abfrage direkt anzeigen; der Assistent startet dann bei Konfigurieren mit der bereits ausgewählten Suchanfrage.
-
Parameter konfigurieren und sperren
An Konfigurieren Die Standardeinstellungen sind für einen ersten Endpunkt richtig: Anzeigename aus der Anfrage ausgefüllt, Lebensdauer Dauerhaft (wählen) Ablauf für einen vorübergehenden Anteil), Antwortmodus Statisch (eine JSON-Antwort; auswählen) Streaming (für Ergebnisse, die über die statische Rudergrenze Ihres Plans hinausgehen), Inneres Format JSON. Antwortmodus und -format sind nach der Erstellung festgelegt, daher legen Sie diese hier fest. Klicken Sie hier. Weiter.
An Sperrparameter Alle dynamischen Filter in der Abfrage werden aufgelistet. Lassen Sie diejenigen unverändert, die vom Aufrufer festgelegt werden können. Abrufbar und gib jedem ein Name der Abfragezeichenfolge; Haken Erforderlich Falls ein Aufruf ohne diese Angabe fehlschlägt, legen Sie einen Wert fest, den der Aufrufer nicht ändern darf. Gesperrtoder ein Date-Szenario wie zum Beispiel Monatsbeginn. Versteckt Behält den Standardwert der Abfrage bei und lehnt jeden Versuch ab, diesen festzulegen. Klicken Sie hier. Weiter.
-
Teilen und Ihren Schlüssel erhalten
An Teilen Sie können einladen Menschen per E-Mail oder fügen Sie eine hinzu Serviceschlüssel für einen Server oder ein Automatisierungstool, oder beides vorerst überspringen. Klicken Sie hier. Erstellen und meinen Schlüssel erhaltenAuf dem Erfolgsbildschirm werden die Endpunkt-URL und Ihr Schlüssel angezeigt: eine 49-stellige Zeichenkette, die mit „.“ beginnt.
qsapi_Kopieren Sie es. Sie können es später vom Endpunkt aus wieder anzeigen lassen. Teilen Die Tabulatortaste sorgt dafür, dass die Daten nicht verloren gehen, wenn Sie den Bildschirm schließen.Klicken Sie auf Schicken In der Konsole den ersten Aufruf direkt vom Portal aus tätigen. Im Antwortbereich wird Folgendes angezeigt: Status, Zeit und Größe, Die Körper Der Tab zeigt das JSON an, und der Aufruf erscheint auf dem Aktivität Drücken Sie die Tabulatortaste einige Sekunden später.
Das war’s. Ihre Railway Postgres-Datenbank antwortet nun über eine URL (schreibgeschützt) auf die von Ihnen angegebenen Schlüssel. Es wurden keine Installationen vorgenommen, kein Port wurde geöffnet, und die SQL-Abfragen verblieben in Ihrem Konto.
Rufen Sie es von überall aus an
Ersetzen Sie die Endpunkt-ID durch Ihre eigene aus der URL-Leiste der Konsole und qsapi_IHR_SCHLÜSSEL mit Ihrem Schlüssel. Aufrufbare Parameter gehören in die Abfragezeichenfolge bei GET; hier wird die gespeicherte Abfrage bereitgestellt. Stadt:
curl "https://api.querystreams.com/v1/endpoints/8f2c4d1e-6b3a-4f7e-9c21-5d0a7b3e2f19?city=Seattle" \ -H "X-API-Key: qsapi_YOUR_KEY"
{
"Spalten": [ { "Name": "customer_id", "Typ": "ganze Zahl" }, { "Name": "Name", "Typ": "Zeichenkette" }, { "Name": "Stadt", "Typ": "Zeichenkette" } ],
"Zeilen": [
{ "customer_id": 1042, "Name": "Northwind Traders", "Stadt": "Seattle" },
{ "customer_id": 1057, "Name": "Alpine Outfitters", "Stadt": "Denver" },
{ "customer_id": 1063, "Name": "Harbour Foods", "Stadt": "Halifax" }
],
"Meta": { "Zeilenanzahl": 3, "agent_duration_ms": 41, "request_id": "req_7Hq2mKd9" }
}Die Zeilen werden als Objekte zurückgegeben, die über den Spaltennamen indiziert sind, mit der Spaltenliste und einem Meta Ein Block, der die Anzahl der Zeilen, die Information, ob das Ergebnis gekürzt wurde, und die Anfrage-ID anzeigt, die Sie zur Unterstützung angeben können. Derselbe Aufruf wie ein POST-Request übermittelt die Parameter in einem JSON-Body, was die richtige Wahl für lange Wertelisten ist:
curl -X POST "https://api.querystreams.com/v1/endpoints/8f2c4d1e-6b3a-4f7e-9c21-5d0a7b3e2f19" \ -H "X-API-Key: qsapi_YOUR_KEY" \ -H "Content-Type: application/json" \ -d '{"params": {"city": "Seattle"}}'?format=csv- CSV statt JSON, inklusive Kopfzeile.
Akzeptierte Formate: text/csvDasselbe gilt für Streaming-Endpunkte. Diese geben NDJSON (ein JSON-Objekt pro Zeile) mit einem abschließenden Wert zurück.{"_summary": true, "row_count": N}Zeile; überprüfen Sie die letzte Zeile. ?sample=true- Maximal fünf Reihen, nicht abgerechnet. Gut geeignet, um einen Kunden anzuschließen.
?compression=lz4- Ein Gehäuse des Typs LZ4 für Vieltelefonierer mit Decoder; Code Die Registerkarte enthält den Decoder-Codeausschnitt für jede Sprache. Die einfache Gzip-Komprimierung erfolgt automatisch, wenn Ihr Client sendet.
Accept-Encoding: gzip. Autorisierung: Bearer qsapi_…- Akzeptiert als Alias für
X-API-Schlüssel. Verwenden Sie es im Browsercode.
Wo es eingesteckt wird
Excel und Power BI
Export → Power Query M (.pq) Sie erhalten eine vorgefertigte Abfrage. Fügen Sie diese in den erweiterten Editor ein (Excel: Daten → Daten abrufen → Aus anderen Quellen → Leere Abfrage; Power BI: Start → Daten transformieren → Neue Quelle → Leere Abfrage) und ersetzen Sie den Platzhalter durch Ihre Abfrage. qsapi_ Schlüssel.
Postbote, Schlaflosigkeit, Hüpfekästchen
Das gleiche Export Das Menü lädt eine Postman v2.1-Sammlung, einen Insomnia v5-Export oder eine Hoppscotch-Sammlung mit ausgefüllten Parametern und einem Platzhalter für den Schlüssel herunter.
Ihr eigener Code
Der Code Der Tab enthält funktionierende Beispiele für cURL, Python, JavaScript, TypeScript, Java, C#, Go, PHP, PowerShell und Ruby. Export → OpenAPI 3.1-Spezifikation Wird von jedem Clientgenerator oder Swagger UI gespeist.
n8n, Zapier, Make, cron
Erstellen Sie einen Serviceschlüssel Fügen Sie für das Tool die URL und den Schlüssel in den entsprechenden HTTP-Knoten ein und planen Sie die Ausführung. Jedes Tool erhält einen eigenen Schlüssel, sodass Sie einen Schlüssel widerrufen können, ohne die anderen zu beeinträchtigen.
Was die Pläne erlauben
| Planen | Endpunkte | Schlüssel pro Endpunkt | Personen pro Endpunkt | Zeilen pro Aufruf (statisch) | Zeilen pro Aufruf (Streaming) | Anrufe pro Minute, pro Taste |
|---|---|---|---|---|---|---|
| Kostenlos | 1 | 2 | 1 | 250 | 250 | 3 |
| Persönlicher Kern | 2 | 3 | 2 | 5,000 | 250,000 | 15 |
| Personal Plus | 5 | 5 | 5 | 10,000 | 500,000 | 30 |
| Kerngeschäft | 5 | 10 | 10 | 50,000 | 1,000,000 | 300 |
| Business Plus | 10 | 20 | 25 | 100,000 | 5,000,000 | 600 |
| Business Max | 25 | 30 | 50 | 250,000 | 10,000,000 | 600 |
| Enterprise Core | 50 | 50 | 100 | 500,000 | 25,000,000 | 1,000 |
| Enterprise Plus | 100 | 100 | 250 | 1,000,000 | 50,000,000 | 1,000 |
| Enterprise Max | 250 | 200 | 500 | 2,500,000 | 100,000,000 | 1,500 |
Jeder Aufruf hat ein festes Abfrage-Timeout von 60 Sekunden und eine Antwortgröße von maximal 8 MiB. Die zurückgegebenen Bytes werden auf Ihr monatliches Datenvolumen angerechnet – dasselbe, das auch die Add-ons für Excel und Google Sheets nutzen. Die kostenlose Version bietet einen Endpunkt und 5 MB Datenvolumen pro Monat, was für eine kleine Tabelle, die mehrmals täglich aufgerufen wird, problemlos ausreicht. Siehe die Preisseite für die Zulagen nach Plan.
Kostenlos ist ein Plan, den man behält. Es handelt sich nicht um eine Testphase, die abläuft. Sehen Sie genau, was sie beinhaltet, auf der Preisseite.
Es sicher aufbewahren
Die SQL-Anweisungen bleiben Ihre.
Die Aufrufer erhalten Zeilen. Sie sehen weder die Abfrage noch die Tabellennamen oder die Verbindungsdetails und können nicht ändern, was der Endpunkt ausführt.
Ein Schlüssel, ein Endpunkt, ein Anrufer
Ein Schlüssel funktioniert genau für einen Endpunkt. Jede Person oder jedes Tool erhält einen eigenen Schlüssel, und jeder Anruf wird diesem zugeordnet. Wird ein Schlüssel widerrufen, funktionieren die anderen weiterhin; der Widerruf wird innerhalb von etwa fünf Minuten wirksam.
Schreibgeschützt, auf Ihrer Seite der Mauer
Der Agent führt die gespeicherte SELECT-Anweisung und nichts anderes aus Ihrem Netzwerk über seine eigene ausgehende Verbindung aus. Es muss kein Port geöffnet und keine Anmeldeinformationen im Internet benötigt werden.
Jeder Anruf im Hauptbuch
Der Aktivität Die Registerkarte zeigt jeden Anruf mit Uhrzeit, Empfänger, Status, Zeilen, Bytes und Dauer an, einschließlich abgelehnter Anrufe. Ablauf Lebensdauer einer temporären Freigabe und der Endpunkt schaltet sich am angegebenen Datum selbst ab.
Wenn etwas nicht funktioniert
| Status | Code | Was zu tun |
|---|---|---|
| 401 | API-Schlüssel erforderlich / API-Schlüssel ungültig | Der Header fehlt oder der Schlüssel ist falsch. Senden X-API-Schlüssel: qsapi_…Die gesamten 49 Zeichen. Die Schlüssel können über die Registerkarte „Freigabe“ des Endpunkts erneut kopiert werden. |
| 403 | API_KEY_ENDPOINT_MISMATCH | Ein gültiger Schlüssel, der an einem anderen Endpunkt verwendet wird. Jeder Schlüssel gehört zu genau einem Endpunkt. |
| 403 | API-Schlüssel widerrufen / API-Endpunkt abgelaufen | Der Schlüssel wurde widerrufen oder der Endpunkt ist abgelaufen. Generieren Sie einen neuen Schlüssel oder stellen Sie den Endpunkt wieder her. |
| 400 | API_PARAM_NOT_OVERRIDABLE | Sie haben einen Parameter gesendet, den der Eigentümer nicht als aufrufbar markiert hat. Im Nachrichtentext werden die zulässigen Namen aufgelistet. |
| 414 | API_QUERY_TOO_LARGE | Die GET-Abfragezeichenfolge enthielt 8 KB oder 200 Listenwerte. Senden Sie dieselben Parameter als JSON-Body in einer POST-Anfrage. |
| 413 | API_OUTPUT_TOO_LARGE | Das Ergebnis überschritt die 8-MiB-Grenze. Schränken Sie die Abfrage ein oder wechseln Sie zum Streaming-Endpunkt. |
| 429 | API_RATE_LIMITED | In dieser Minute gehen zu viele Anrufe wegen des Schlüssels oder des Endpunkts ein. Warten Sie auf den Wiederholen Sekunden oder erhöhen Ratenbegrenzung unter API-Einstellungen → Standardeinstellungen innerhalb Ihres Tarifs. |
| 429 | API_DATA_REALM_EXHAUSTED | Das monatliche Datenvolumen des Nutzers ist aufgebraucht. Es wird mit dem nächsten Abrechnungsmonat zurückgesetzt; für mehr Datenvolumen ist ein Upgrade erforderlich. |
| 503 | API-AGENT_NICHT_VERBUNDEN | Der Agent Ihrer Eisenbahndatenbank ist offline. Überprüfen Sie ihn unter Daten → Datenagenten; Anrufe sind wieder möglich, sobald die Verbindung wiederhergestellt ist. |
| 504 | API-Abfrage-Timeout | Die Abfrage dauerte länger als 60 Sekunden. Fügen Sie einen Filter oder einen Index hinzu oder speichern Sie eine präzisere Abfrage. |
Jeder Fehlerkörper hat die Form {"error": {"code": "…", "message": "…"}} und jede Antwort beinhaltet eine X-QS-Anforderungs-ID Header. Geben Sie die ID in Anführungszeichen an, wenn Sie sich an den Support wenden.
Fragen, die Menschen stellen
Werden meine Daten in Query Streams kopiert?
Nein. Der Agent führt die Abfrage dort aus, wo Ihre Daten gespeichert sind, und sendet nur die angeforderten Zeilen. Es findet keine Synchronisierung oder Zwischenspeicherung statt; die Abfrage wird bei jedem Anruf neu ausgeführt.
Können Anrufer die SQL-Anweisung ändern oder andere Tabellen anfordern?
Nein. Ein Endpunkt führt eine gespeicherte Abfrage aus. Aufrufer können nur die von Ihnen markierten Parameter festlegen. Abrufbarund die Werte werden sicher gebunden: Text wird in Anführungszeichen gesetzt und maskiert, Zahlen werden auf ihren Bereich geprüft, Listen werden erweitert.
Wie übergebe ich das einem Partner?
Am Endpunkt Teilen Registerkarte auswählen Menschen und geben ihre E-Mail-Adresse ein. Sie erhalten einen magischen Link, melden sich mit dieser Adresse an (ein kostenloses Konto genügt) und generieren ihren eigenen Schlüssel; ihre Anrufe werden dann namentlich auf der Registerkarte „Aktivität“ angezeigt. Für einen Server oder ein Automatisierungstool erstellen Sie einen API-Schlüssel stattdessen mit einem Etikett.
Was passiert, wenn ich die gespeicherte Abfrage bearbeite?
Der Endpunkt führt beim nächsten Aufruf die neue SQL-Abfrage aus und seine OpenAPI-Spezifikation wird neu generiert. Die URL und die Schlüssel ändern sich nicht. Wenn Sie einen Filter hinzufügen oder entfernen, überprüfen Sie die Spezifikation erneut. Sperrparameter damit Anrufer die richtigen Parameter sehen.
Ist das im kostenlosen Tarif wirklich enthalten?
Ja. „Kostenlos“ ist ein dauerhafter Tarif, keine befristete Testphase. Er umfasst einen Endpunkt, zwei Schlüssel und 250 Zeilen pro Aufruf. Die genauen Leistungen finden Sie hier: Preisseite.
Spricht der Endpunkt den SQL-Dialekt von Railway?
Ja, denn der SQL-Code stammt von Ihnen. Sie haben ihn geschrieben und in Query Builder gegen Ihre Railway Postgres-Datenbank ausgeführt; der Endpunkt führt genau diese Anweisung über dieselbe Verbindung aus, wobei Ihre Parameterwerte so gebunden sind, wie Railway es erwartet.
Muss meine Railway Postgres-Datenbank über das Internet erreichbar sein?
Nein. Nur der Agent muss von jedem beliebigen Computer mit ständigem Internetzugang darauf zugreifen können. Der Agent stellt eine einzige ausgehende Verbindung zu Query Streams her; Anrufer kommunizieren mit api.querystreams.com und niemals mit Ihrem Server.
Verwandte Leitfäden
Jeder Leitfaden für Railway
Nicht ganz Ihre Konfiguration?
- Betreibt er PostgreSQL auf seinem eigenen Server oder Computer? Nutzen Sie die PostgreSQL-Karte → PostgreSQL
Setup trouble?
- Want the Agent to sign in with a login that can only read? Create a read-only database user, with copy-paste SQL for each database → Create a read-only database user
- Agent shows Offline, or Test connection and Browse are greyed out? Check that the Agent is online → Is the Agent online?

