Näited: DBE kasutamine backendina
DBE-d ei pea kasutama ainult siin veebilehel — iga andmebaas on kättesaadav ka lihtsa HTTP/JSON API kaudu. See tähendab, et suvaline programm suvalises keeles (PHP, Java, Python, Go, mis iganes) saab DBE-t kasutada oma rakenduse andmebaasi-backend'ina, saates käsklusi üle võrgu — täpselt samamoodi nagu see veebileht ise teeb, kui vajutad "Käivita" nuppu.
Kuidas need kõik kokku on seotud
PHP, Java, Python ja Go näited allpool ei tea midagi DBE seesmisest ehitusest ega puutu kokku .dbe failiga otse. Nad on kõik lihtsalt HTTP kliendid, mis räägivad sama kahe otspunktiga samal DBE serveril. Ühendus käib alati samamoodi:
/api/andmebaasid, /api/db/<nimi>/execute
Kuna kõik keeled räägivad sama serveriga, saavad nad kõik samaaegselt kasutada sama andmebaasi — PHP veebileht, Java taustateenus, Python skript ja Go mikroteenus võivad kõik kirjutada ja lugeda sama .dbe faili, ilma et nad üksteisest teaksidki.
API otspunktid
| Meetod | URL | Keha (JSON) | Kirjeldus |
|---|---|---|---|
| GET | /api/andmebaasid |
— | Loetleb olemasolevad andmebaasid |
| POST | /api/andmebaasid |
{"name": "minu_db"} |
Loob uue andmebaasi |
| POST | /api/db/<nimi>/execute |
{"script": "VALI KÕIK TABELIST t;"} |
Käivitab ühe või mitu ;-eraldatud käsku ja tagastab tulemused |
Vastus on alati JSON, kujul {"results": [...]}, kus iga käsu kohta on
ok, type (rows või info),
columns/rows või message/error.
Meeles pea, et demoserveris kustub iga uus andmebaas automaatselt 60 sekundi pärast
— oma rakenduses jookseb DBE ilma selle piiranguta.
PHP
→ Vaata "php" andmebaasi DBE töölaual
→ Ava töötav PHP fail (databases/php)
→ Kerge, keskmine, keeruline päring (paringud.php)
<?php
$base = "https://databaas.ee";
// 1. Loo uus andmebaas
$ch = curl_init("$base/api/andmebaasid");
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ["Content-Type: application/json"]);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode(["name" => "minu_php_db"]));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_exec($ch);
curl_close($ch);
// 2. Käivita SQL-skript
$script = "LOO TABEL kasutajad (id TÄISARV PÕHIVÕTI, nimi TEKST);
LISA TABELISSE kasutajad (id, nimi) VÄÄRTUSED (1, 'Mari');
VALI KÕIK TABELIST kasutajad;";
$ch = curl_init("$base/api/db/minu_php_db/execute");
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ["Content-Type: application/json"]);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode(["script" => $script]));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
$data = json_decode($response, true);
foreach ($data["results"] as $r) {
if ($r["ok"] && ($r["type"] ?? "") === "rows") {
foreach ($r["rows"] as $row) {
print_r($row);
}
}
}
Java
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class DbeExample {
public static void main(String[] args) throws Exception {
String base = "https://databaas.ee";
HttpClient client = HttpClient.newHttpClient();
// 1. Loo andmebaas
HttpRequest create = HttpRequest.newBuilder()
.uri(URI.create(base + "/api/andmebaasid"))
.header("Content-Type", "application/json")
.POST(HttpRequest.BodyPublishers.ofString("{\"name\":\"minu_java_db\"}"))
.build();
client.send(create, HttpResponse.BodyHandlers.ofString());
// 2. Käivita SQL-skript
String script = "LOO TABEL kasutajad (id TÄISARV PÕHIVÕTI, nimi TEKST);"
+ "LISA TABELISSE kasutajad (id, nimi) VÄÄRTUSED (1, 'Mari');"
+ "VALI KÕIK TABELIST kasutajad;";
String body = "{\"script\":\"" + script.replace("\"", "\\\"") + "\"}";
HttpRequest execute = HttpRequest.newBuilder()
.uri(URI.create(base + "/api/db/minu_java_db/execute"))
.header("Content-Type", "application/json")
.POST(HttpRequest.BodyPublishers.ofString(body))
.build();
HttpResponse<String> response = client.send(execute, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
}
}
Reaalses projektis kasuta JSON-i käsitsi stringimise asemel mõnda teeki (nt org.json).
Python
import requests
base = "https://databaas.ee"
# 1. Loo andmebaas
requests.post(f"{base}/api/andmebaasid", json={"name": "minu_python_db"})
# 2. Käivita SQL-skript
script = """
LOO TABEL kasutajad (id TÄISARV PÕHIVÕTI, nimi TEKST);
LISA TABELISSE kasutajad (id, nimi) VÄÄRTUSED (1, 'Mari');
VALI KÕIK TABELIST kasutajad;
"""
resp = requests.post(f"{base}/api/db/minu_python_db/execute", json={"script": script})
data = resp.json()
for r in data["results"]:
if r["ok"] and r.get("type") == "rows":
for row in r["rows"]:
print(row)
Kui su Python-projekt jookseb samas serveris (või sa ei taha HTTP kihti kasutada),
saad DBE mootorit kasutada ka otse teegina, ilma Flaski ja HTTP-ta:
pip install dbe-engine —
pypi.org/project/dbe-engine.
Kerge / keskmine / keeruline päring (tooted tabel)
Sama muster, mida näitab elav paringud.php
demo, töötab identselt igas keeles — ainus erinevus on script muutuja sisu,
mille saadad juba ülalpool näidatud /api/db/<nimi>/execute päringuga.
Kõigepealt tabel ja andmed:
LOO TABEL tooted (id TÄISARV PÕHIVÕTI, nimi TEKST, kategooria TEKST, hind MURDARV, kogus TÄISARV, saadaval TÕEVÄÄRTUS); LISA TABELISSE tooted (id, nimi, kategooria, hind, kogus, saadaval) VÄÄRTUSED (1, 'Kohv', 'Toit', 4.5, 20, TÕENE); LISA TABELISSE tooted (id, nimi, kategooria, hind, kogus, saadaval) VÄÄRTUSED (2, 'Termos', 'Kodu', 12.0, 15, TÕENE); LISA TABELISSE tooted (id, nimi, kategooria, hind, kogus, saadaval) VÄÄRTUSED (3, 'Hiir', 'Elektroonika', 8.5, 30, TÕENE); LISA TABELISSE tooted (id, nimi, kategooria, hind, kogus, saadaval) VÄÄRTUSED (4, 'Klaviatuur', 'Elektroonika', 15.0, 8, TÕENE); LISA TABELISSE tooted (id, nimi, kategooria, hind, kogus, saadaval) VÄÄRTUSED (5, 'Laptopi alus', 'Elektroonika', 18.0, 0, VÄÄR); LISA TABELISSE tooted (id, nimi, kategooria, hind, kogus, saadaval) VÄÄRTUSED (6, 'Kõrvaklapid', 'Elektroonika', 25.0, 5, TÕENE); LISA TABELISSE tooted (id, nimi, kategooria, hind, kogus, saadaval) VÄÄRTUSED (7, 'Vihik', 'Kontor', 1.5, 100, TÕENE); LISA TABELISSE tooted (id, nimi, kategooria, hind, kogus, saadaval) VÄÄRTUSED (8, 'Pastapliiats', 'Kontor', 0.8, 200, TÕENE); LISA TABELISSE tooted (id, nimi, kategooria, hind, kogus, saadaval) VÄÄRTUSED (9, 'Tool', 'Mööbel', 45.0, 3, TÕENE); LISA TABELISSE tooted (id, nimi, kategooria, hind, kogus, saadaval) VÄÄRTUSED (10, 'Laud', 'Mööbel', 90.0, 2, TÕENE);
Ja kolm raskusastet, mida saad panna script muutujasse mistahes ülaltoodud keeles:
| Tase | DBE skript | Tulemus |
|---|---|---|
| Kerge | VALI KÕIK TABELIST tooted; |
Kõik 10 toodet, kõigi veergudega. |
| Keskmine | VALI nimi, hind, kogus TABELIST tooted KUS kategooria = 'Elektroonika' JÄRJESTA hind KASVAVALT; |
4 elektroonikatoodet, odavaim enne. |
| Keeruline | VALI KÕIK TABELIST tooted KUS hind > 5 JA saadaval = TÕENE JA kogus > 10 JÄRJESTA hind KAHANEVALT PIIRA 3; |
Ainult "Termos" ja "Hiir" vastavad kõigile tingimustele. |
Nt Java's asendad lihtsalt script stringi ühega kolmest ülal — ülejäänud
HTTP-kood (create + execute + vastuse parsimine) jääb täpselt samaks, mis PHP, Python ja
Go näidetes. Sama kehtib vastupidi: kui sul on juba PHP näide toimimas, saad selle
loogika 1:1 üle kanda ükskõik millisesse keelde, mis oskab teha HTTP POST-päringuid.
Go
package main
import (
"bytes"
"encoding/json"
"fmt"
"net/http"
)
const base = "https://databaas.ee"
func main() {
// 1. Loo andmebaas
createBody, _ := json.Marshal(map[string]string{"name": "minu_go_db"})
http.Post(base+"/api/andmebaasid", "application/json", bytes.NewReader(createBody))
// 2. Käivita SQL-skript
script := `LOO TABEL kasutajad (id TÄISARV PÕHIVÕTI, nimi TEKST);
LISA TABELISSE kasutajad (id, nimi) VÄÄRTUSED (1, 'Mari');
VALI KÕIK TABELIST kasutajad;`
execBody, _ := json.Marshal(map[string]string{"script": script})
resp, err := http.Post(base+"/api/db/minu_go_db/execute", "application/json", bytes.NewReader(execBody))
if err != nil {
panic(err)
}
defer resp.Body.Close()
var result map[string]interface{}
json.NewDecoder(resp.Body).Decode(&result)
fmt.Println(result["results"])
}