Geavanceerde data en netwerken
Creator Pro en het technische proefrecht ondersteunen SQLite, geselecteerde bestanden en mappen, uitgebreidere HTTPS-verzoeken, streaming, WebSockets en afzonderlijke ontwikkel-/test-/productieconfiguratie. Deze API’s werken in de desktop-IDE, CLI en ondersteunde gegenereerde native applicaties. De openbare speeltuin kan ze niet uitvoeren; browser- en telefoonhosts hebben geen adapter voor geavanceerde applicaties.
Learner behoudt opgeslagen waarden, begrensde HTTPS GET en basisformulieren via code. Een Pro-editor maakt zijn gewone Core-uitvoer niet afhankelijk van Pro.
Declareren wat het programma nodig heeft
Drie beslissingen blijven gescheiden: de IDE/CLI controleert Pro voor geavanceerd uitvoeren/bouwen, het project declareert zijn vereisten en de uitvoerende gebruiker verleent expliciet toegang. Een licentie geeft nooit automatisch toegang tot bestanden of netwerken.
Gebruik in Bestand → Webtoegang van project het onderdeel Data en integraties · Creator Pro. Vereisten blijven bewerkbaar in Learner. De waarde capabilities in een draagbaar project kan zijn:
{
"schemaVersion": 2,
"httpsOrigins": ["https://api.example.com"],
"advanced": {
"sqlite": true,
"files": ["input"],
"directories": ["reports"],
"httpMethods": ["GET", "POST"],
"streaming": true,
"webSockets": true,
"configKeys": ["region"],
"secretNames": ["api"]
}
}
Dit is één eigenschap van een projectmanifest, geen compleet project. Declareer alleen wat je gebruikt. Versie 1 blijft ondersteund. Slotnamen zijn draagbare namen, geen hostpaden; zet hier geen inloggegevens of licentievlaggen in.
Vóór uitvoering staan toestemmingen uit. Kies bestanden, mappen, configuratie en toegestane origins expliciet. Elke schrijfbare locatie vereist een afzonderlijke keuze. Uitvoeren zonder toegang voert het programma uit, maar geweigerde bewerkingen geven ok: false terug. Stop, intrekken van toestemming en vervangen van het project sluiten actieve verbindingen en handles.
Elk resultaat controleren
Al deze API’s geven een gewone Map terug:
| Sleutel | Betekenis |
|---|---|
ok |
Of de bewerking is geslaagd |
status |
HTTP-status, of nul voor andere bewerkingen |
value |
JSON-compatibele waarde, of Geen |
error |
Stabiele fouttekst; leeg bij succes |
Controleer ok voordat je value gebruikt. Gebruikelijke fouten zijn denied, unavailable, invalid, limit, cancelled en timeout. Een niet-ondersteunde host meldt unavailable. Fouten geven geen geheimen, SQL-tekst of hostpaden prijs.
De voorbeelden hieronder zijn bedoeld voor een desktopproject met passende declaraties en expliciete toestemming. Het zijn geen voorbeelden voor de openbare speeltuin.
SQLite gebruiken
Een project met een vaste app-identiteit krijgt een privédatabase. Broncode kiest nooit een databasepad. Gebruik parameters voor waarden en migraties voor schemawijzigingen:
# language: nl
laat schema = migreerData(1, ["CREATE TABLE scores (name TEXT NOT NULL, points INTEGER NOT NULL)", "CREATE INDEX scores_points ON scores(points)"])
als schema["ok"]:
laat bewaard = voerSQLUit("INSERT INTO scores(name, points) VALUES (?, ?)", ["Nova", 12])
als bewaard["ok"]:
laat rijen = vraagSQL("SELECT name, points FROM scores ORDER BY points DESC LIMIT 10", [])
als rijen["ok"]:
zeg rijen["value"]
anders:
zeg rijen["error"]
anders:
zeg bewaard["error"]
anders:
zeg schema["error"]
voerSQLUit geeft het aantal gewijzigde rijen terug; vraagSQL geeft een lijst van maps. Geef resultaatkolommen unieke namen. SQLite NULL wordt Geen; BLOB-waarden en gehele getallen buiten het exacte 53-bitsbereik zijn niet ondersteund.
Gebruik beginTransactie, bevestigTransactie en herstelTransactie. Een onafgemaakte transactie wordt teruggedraaid wanneer de host sluit.
Migraties beginnen bij 1 en volgen elkaar op. Dezelfde toegepaste versie met identieke stappen slaagt zonder herhaling; gewijzigde stappen geven een fout. Stappen en controlesom worden samen vastgelegd. Een migratie kan niet binnen een open transactie draaien.
Grenzen zijn onder meer 32 MiB databasepagina’s, 16 KiB per SQL-opdracht, 128 parameters/kolommen, 1000 resultaatrijen, 1 MiB waarden/resultaten en 5 seconden per bewerking. Een migratie mag 64 stappen en 64 KiB totale SQL bevatten. Ruwe SQL-transactieopdrachten, PRAGMA, ATTACH, extensies, triggers, virtuele tabellen en interne _pliro_-tabellen zijn geweigerd.
Geselecteerde bestanden lezen
leesBestandsTekst en schrijfBestandsTekst ontvangen een gedeclareerd slot en een relatief pad. Voor een geselecteerd bestand moet dat pad leeg zijn:
# language: nl
laat inhoud = leesBestandsTekst("input", "")
als inhoud["ok"]:
zeg inhoud["value"]
anders:
zeg inhoud["error"]
Gebruik bij een mapslot paden zoals rapport.txt of rapporten/dag1.txt. toonMapBestanden met een leeg pad toont de geselecteerde map. Paden kunnen niet buiten die map komen; absolute paden, schijfnamen en backslashes zijn geweigerd.
Lezen en schrijven gebruikt UTF-8, maximaal 1 MiB. Lijsten bevatten maximaal 256 gesorteerde namen. Alleen lezen is standaard; schrijven vereist apart toestemming. Een schrijfbare map kan gewone bestanden binnen die map aanmaken. Schrijven vervangt en synchroniseert de inhoud; het is geen crash-atomische reservekopie.
Een HTTPS-verzoek doen
httpVerzoek ondersteunt gedeclareerde GET, HEAD, POST, PUT, PATCH, DELETE en OPTIONS. Ook GET via deze functie is geavanceerd; Learner gebruikt haalWebTekst of haalWebJSON.
# language: nl
laat antwoord = httpVerzoek("https://api.example.com/items", {"method": "POST", "body": "{\"name\":\"Nova\"}", "format": "json", "headers": {"Content-Type": "application/json"}, "authorizationSecret": "api"})
als antwoord["ok"]:
zeg antwoord["value"]
anders:
zeg antwoord["status"], antwoord["error"]
Vervang de voorbeeld-origin door je eigen dienst, zowel in de code als in de projectinstellingen. Opties zijn method, tekst body, format (text of json), headers en authorizationSecret. Toegestane headers zijn X-* plus Accept, Content-Type, If-Match, If-None-Match en Idempotency-Key. Rechtstreekse Cookie/Authorization-headers zijn geweigerd; authenticatie gebruikt een door de host gekozen geheimnaam.
Origins moeten gedeclareerd en expliciet toegestaan zijn. TLS-controles, openbare-adresvalidatie, frequentie-/gelijktijdigheidsgrenzen en annulering blijven gelden. Privé-, loopback-, link-local- en metadata-adressen zijn geweigerd. Verzoeken gebruiken geen omgevingsinloggegevens of proxy en volgen geen redirects. Niet-2xx-resultaten tonen de status, niet de antwoordtekst.
Grenzen: 10 seconden per verzoek, 1 MiB voor berichttekst/tekstresultaten, 64 KiB voor JSON-resultaten en 16 KiB voor headers.
Streaming en WebSockets
openHTTPStroom opent een HTTPS-antwoord via alleen GET en geeft een ondoorzichtige handle terug. leesHTTPStroom geeft {"text": ..., "done": ...} in value terug, één UTF-8-regel inclusief regeleinde. Sluit met sluitHTTPStroom. Grenzen: 32 KiB per regel, 1 MiB totaal en twee minuten.
openWebSocket accepteert alleen wss://; declareer en verleen de overeenkomstige https://-origin. stuurWebSocket en ontvangWebSocket wisselen tekst uit. sluitWebSocket geeft de handle vrij. Authenticatie volgt dezelfde regels voor hostgeheimen.
WebSockets staan 64 KiB per bericht, 256 berichten en 1 MiB totaalverkeer toe, met 10 seconden per bericht en twee minuten per verbinding. Compressie staat uit. Een host staat één open stroom/socket toe; gesloten handles zijn niet herbruikbaar.
Configuratie en geheimen op de host kiezen
De uitvoerende gebruiker kiest een afzonderlijk host-JSON-bestand buiten projectbroncode en media:
{
"schemaVersion": 1,
"environments": {
"development": {
"values": {"region": "eu"},
"secrets": {
"api": {
"value": "Bearer vervang-op-de-host",
"origins": ["https://api.example.com"]
}
}
},
"test": {"values": {"region": "test"}, "secrets": {}},
"production": {"values": {"region": "eu"}, "secrets": {}}
}
}
configWaarde leest een gedeclareerde sleutel. configOmgeving geeft development, test of production terug; standaard is development. Elke omgeving staat 32 waarden en 32 geheimen toe. Host-JSON is begrensd op 64 KiB.
De taal kan geheimwaarden niet lezen. De host voegt het genoemde geheim alleen bij zijn toegestane origin toe aan Authorization. Dit is expliciete configuratie via een hostbestand, geen versleutelde sleutelhanger of gehoste kluis. Procesomgevingsvariabelen worden niet impliciet gelezen.
CLI en gegenereerde applicaties
Opties staan vóór het projectpad:
pliro run --allow-database --allow-advanced-network --allow-https https://api.example.com --select-file input=/gekozen/invoer.txt --writable-directory reports=/gekozen/rapporten --configuration /prive/config.json --environment test voorbeeld.bipli
Ook --select-directory en --writable-file zijn beschikbaar. Debugger en profiler accepteren dezelfde toestemmingen.
Ondersteunde native exports bevatten de geavanceerde runtime en vereisen Go 1.25 of nieuwer tijdens het bouwen. Een gegenereerde app bevat geen Pliro-productlicentiecontrole. De gebruiker geeft geavanceerde toestemmingen bij het starten:
mijn-app --pliro-permissions /prive/toestemmingen.json
{
"schemaVersion": 1,
"grants": {
"sqlite": true,
"network": true,
"httpsOrigins": ["https://api.example.com"],
"files": {"input": {"path": "/gekozen/invoer.txt", "write": false}},
"directories": {"reports": {"path": "/gekozen/rapporten", "write": true}},
"environment": "production"
},
"configurationPath": "/prive/config.json"
}
Gebruik passende paden voor de machine van de gebruiker. Dit hostbestand wordt niet in de export opgenomen. Zonder dit bestand is geen geavanceerde toegang verleend. Grafische native apps gebruiken nu ook dit startbestand; een grafische keuzedialoog voor geavanceerde toegang is niet beschikbaar. Core HTTPS GET houdt zijn afzonderlijke --pliro-allow-https of grafische toestemming wanneer beide soorten API’s worden gebruikt. --pliro-third-party-notices toont meegeleverde afhankelijkheidslicenties.
Ontwikkelgereedschap · Bouwen en exporteren · Ingebouwde functies