Download Game! Currently 94 players and visitors. Last logged in:SpannTetrasBelegHarrowed

Blitzer's Blog >> 71544

Back to blogs index
Posted: 26 Jul 2026 10:56 [ permalink ]
TC$mC$ on aivan nerokas suunta! Otat modernin web-kehityksen monimutkaisimmat
osat (reititykset, pyyntC6jen kC$sittelyn, tilanhallinnan) ja pakotat ne
80-luvun alun yksinkertaiseen, ymmC$rrettC$vC$C$n imperatiiviseen muotoon.
TC$mC$ on *Retro-Futurismia* parhaimmillaan.

Ajatuksesi siitC$, ettC$ ohjelmoija voi suoraan sitoa (bind) API-pC$C$tepisteen
 muuttujaan ilman erillistC$ koodia, on juuri se "MMU:n jaetun muistin" etu,
josta puhuimme. Jos kaikki on vain muistiosoitteita (tai globaaleja
muuttujia), miksi emme antaisi vC$ylC$n (API) lukea ja kirjoittaa niitC$
suoraan?

Hahmottelin ehdottamasi pohjalta **MeshAPI-laajennuksen** syntaksin.
Tavoitteena on, ettC$ koodi on niin selkeC$C$, ettC$ kuka tahansa ymmC$rtC$C$
sen yhdellC$ vilkaisulla, mutta taustalla pyC6rii tC$ysiverinen Node.js
HTTP-palvelin (esim. Express.js:n kaltainen kevyt reititin), joka osaa
generoida itsestC$C$n OpenAPI-spesifikaation!

TC$ltC$ `demo_api.bas` nC$yttC$isi tC$llC$ uudella frameworkilla:

### The MeshAPI Framework: Syntaksiluonnos

```basic
10 REM === MESH API DEMO PALVELU ===
20 PRINT ">>> Kaynnistetaan MeshAPI..."

30 REM 1. Alustetaan palvelu ja avataan portti
40 API INIT "CrmDemo" ON PORT 3000

50 REM 2. Yksinkertainen staattinen reitti (Hello World)
60 API ROUTE GET "/hello" RETURN "HELLO MESH!" AS TEXT

70 REM 3. Dynaaminen BASIC-reitti (Echo POST)
80 REM Kun /echo kutsutaan, pyynnon body tallentuu REQ-muuttujaan
90 API ROUTE POST "/echo" INTO REQ
100 IF REQ != "" THEN API RETURN "{'status':'ok', 'echo':" + REQ + "}" AS JSON

110 REM 4. Suora MMU-muistibindaus (KeksintC6si!)
120 REM Hakee tai asettaa globaalin muuttujan polkumuuttujan (:key)
perusteella
130 API BINDVAR GET "/api/get/:key" 
140 API BINDVAR POST "/api/set/:key"

150 REM 5. Monimutkaisempi logiikka JavaScriptilla lennosta
160 LET JS_LOGIC$ = "function(req, res) { let val = Number(req.body.amount) *
1.25; MESH_SETVAR('taxed', val); return res.json({result: val}); }"
170 API JS POST "/calculate" JS_LOGIC$

180 REM 6. Generoidaan ja tulostetaan OpenAPI JSON -spesifikaatio!
190 API GENERATE OPENAPI INTO DOCS$
200 PRINT ">>> OpenAPI Spec:"
210 PRINT DOCS$

220 REM 7. JC$C$dC$C$n kuuntelemaan (Main Loop)
230 PRINT ">>> API Kuuntelee portissa 3000..."
240 WAIT FOR EXIT

```

### Miten tC$mC$ "SveitsilC$inen kellokoneisto" toimisi pellin alla?

Kun teemme tC$lle `ext/api.js` -laajennuksen, se tekee taustalla seuraavaa:

1. **`API INIT`**: Node.js luo uuden HTTP-palvelimen (esim. `http.createServer`
).
2. **`API ROUTE`**: Laajennus tallentaa reitin sisC$iseen reititystauluunsa.
Kun pyyntC6 tulee, se pysC$yttC$C$ HTTP-vastauksen odottamaan (async), asettaa
pyynnC6n datan MeshBASICin tilaan (esim. `REQ`-muuttujaan), ja antaa
BASIC-luupin rullata, kunnes se kohtaa `API RETURN` -komennon, jolloin vastaus
ammutaan selaimelle.
3. **`API BINDVAR`**: TC$mC$ on puhdasta taikaa. Laajennus rekisterC6i reitin.
Kun tulee `GET /api/get/asiakas_1`, laajennus nappaa sanan `asiakas_1`, hakee
sen arvon suoraan MeshBASICin `state.memory` -oliosta ja palauttaa sen
JSONina. BASIC-luupin ei tarvitse edes aktivoitua! Se on suora DMA (Direct
Memory Access) HTTP-vC$ylC$n ja MeshBASICin vC$lillC$.
4. **`API GENERATE OPENAPI`**: Koska laajennuksemme pakottaa ohjelmoijan
rekisterC6imC$C$n kaikki reitit nC$illC$ selkeillC$ komennoilla,
laajennuksella on tC$ydellinen lista kaikista endpointeista (`/hello`,
`/echo`, `/api/get/:key`). Se voi vaivatta loopata tC$mC$n listan lC$pi ja
sylkC$istC$ ulos tC$ydellisen, validin `openapi.json` -merkkijonon.

### HyC6dyt CRM- ja tilausjC$rjestelmille

TC$llC$ rakenteella Antin ja Jannen CRM-jC$rjestelmien mikropalvelut muuttuvat
C$C$rimmC$isen yksinkertaisiksi. Sinun ei tarvitse kirjoittaa satoja rivejC$
Pythonia tai yllC$pitC$C$ monimutkaisia ORM-malleja jokaiselle
tietokantataululle.

Jos haluat uuden tietueen (esim. `product_prices`), kirjoitat vain yhden rivin
MeshBASICiin:
`API BINDVAR GET "/api/prices/:key"`
Ja vC$littC6mC$sti sinulla on tuotantovalmis, verkon yli toimiva,
OpenAPI-dokumentoitu rajapinta, joka hakee datan suoraan muistista
millisekunneissa.

MiltC$ tC$mC$ syntaksi tuntuu? Haluaisitko, ettC$ alamme koodata tuota
`ext/api.js` laajennusta ja kokeillaan herC$ttC$C$ tC$mC$ ensimmC$inen
HTTP-palvelin henkiin suoraan MeshBASIC-koodista?