Schnellstart
Von null zu einem ausliefernden Endpunkt, in sieben Schritten. Jede Ausgabe hier ist aus einem echten Lauf kopiert, nicht aus dem Gedachtnis geschrieben. Gultig fur FoxServer 0.9.38.
Bevor Sie anfangen
- Visual FoxPro 9 SP2. Es ist Ihr Code, der veröffentlicht wird: FoxServer übersetzt nichts.
- FoxServer 0.9.38 installiert und lizenziert. Der Installer legt
bin\(den Host),cli\(die Kommandozeile) undide\(die Werkstatt) ab. Siehe Installation. - Eine erhöhte Konsole, und nur für Schritt 4. Ohne sie endet dieser Befehl mit 17 und fasst nichts an.
curl, das Windows bereits mitbringt, oder ein beliebiger HTTP-Client.
Wenn Sie die CLI einer Installation benutzen, müssen Sie nichts konfigurieren: sie findet Werkstatt und Host, indem sie sich die eigenen Fusse ansieht (<Wurzel>\ide\providers\web und <Wurzel>\bin\), wo die Wurzel auch liegt. Bei einer einzelnen CLI setzen Sie FOXSERVER_TOOLING einmal.
Zwei Dinge, die man vorher verstanden haben sollte
Ihr Code bleibt Ihrer. Er wird nur veröffentlicht.
Eine PROCEDURE einer VFP-Klasse wird zu einem HTTP-Endpunkt, indem man eine HELP-Klausel deklariert. Es gibt kein Framework zu lernen und keine Architektur zu ändern.
PROCEDURE pHola(req, res) HELP "GET: hola public"
RETURN THIS.Ok(THIS.NewObject("mensaje"))
ENDPROCDie Route existiert nicht, bis Sie kompilieren.
Die Route entsteht in dieser HELP-Klausel und erreicht den Server erst, wenn der Hook sie beim Build extrahiert. Das ist die Ursache Nummer eins für "ich habe den Endpunkt hinzugefügt und bekomme 404". Wenn eine Route nicht auftaucht: es fehlt das Kompilieren.
1. Das Projekt anlegen
Die CLI liegt in cli\foxserver.exe der Installation. Dieser Befehl legt den Ordnerbaum, die .pjx und das Server-Manifest in build\ an.
foxserver init --name Almacen --path C:\proyectos\almacen --port 8099 --format json{
"created": true,
"name": "Almacen",
"path": "C:\\proyectos\\almacen\\"
}Beachten Sie: das Manifest existiert bevor irgendetwas kompiliert wurde. Deshalb funktionieren die Abfragebefehle schon ab hier.
2. Einen Controller hinzufügen
Es schreibt die .prg und verknupft sie mit der .pjx. Es ist idempotent: bei einem vorhandenen endet es mit 0 und einer Warnung, ohne den Inhalt zu überschreiben.
foxserver controller-add --project C:\proyectos\almacen --name Articulos --format json{
"created": true,
"controller": "Articulos",
"file": "C:\\proyectos\\almacen\\src\\controllers\\Articulos.prg"
}Wird die Datei erzeugt, aber nicht verknupft, endet es mit 14: ein Controller, der nicht im Projekt ist, existiert für den Server nicht.
3. Einen Endpunkt hinzufügen
Das schreibt in die Quelle eine Prozedur mit ihrer HELP-Klausel, und die erzeugt die Route. Öffnen Sie sie: darin ist eine VFP-Klasse, die von ApiController erbt.
foxserver endpoint-add --project C:\proyectos\almacen --controller Articulos `
--method get --route articulos --proc pArticulos --public --format json{
"created": true,
"controller": "Articulos",
"method": "GET",
"route": "articulos",
"proc": "pArticulos",
"public": true
}DEFINE CLASS ArticulosController AS ApiController OLEPUBLIC
PROCEDURE pArticulos(req, res) HELP "GET: articulos public"
LOCAL loRes
loRes = THIS.NewObject("status,data,message")
loRes.status = "ok"
loRes.data = NULL
loRes.message = "ok"
res.status(200).json(THIS.ToJson(loRes))
ENDPROC
ENDDEFINEDie HELP-Klausel liest sich so: "<VERB>: <Route> [public]". Mit public braucht der Endpunkt kein Token. Und eine Warnung, die einen Nachmittag spart: die HELP-Klausel darf 255 Zeichen nicht uberschreiten. Bei 256 kompiliert VFP nicht, und der Fehler erwahnt die Lange nirgends.
4. Kompilieren - die einzige Wand
foxserver build --project C:\proyectos\almacen --format jsonAus einer normalen Konsole wird das nicht funktionieren, und das mit Absicht. Das kommt dabei heraus:
foxserver: hace falta una consola ELEVADA para compilar.
BUILD MTDLL registra la coclase en COM al terminar, y sin
permisos falla con el error 1640 dejando una DLL sin type
library. Compila, pesa una decima parte y el motor no puede
activar nada de ella.
No se ha tocado nada. Abre una consola como administrador y
repite el comando.Exit 17, und es wurde nichts angefasst. Öffnen Sie PowerShell als Administrator und wiederholen Sie es. Eine Warnung build.register am Ende ist kein Fehler: die DLL ist kompiliert und der Exit-Code ist 0.
Jetzt existiert der Endpunkt für den Server:
foxserver endpoint-list --project C:\proyectos\almacen --format json5. Ausliefern
Es startet und kehrt zurück und gibt Ihnen die pid. Es blockiert nicht, außer Sie übergeben --attach. Zum Stoppen beenden Sie diese PID.
foxserver serve --project C:\proyectos\almacen --format json6. Ausprobieren
curl http://127.0.0.1:8099/articulos7. Und wenn es Teil der Installation werden soll
serve liefert aus dem Projekt aus: es startet den Host mit Blick auf den Ordner build\ des Projekts und fasst nichts an der Installation an. Zum Testen gut, aber verify.cmd sieht diesen Server nicht und der Windows-Dienst startet ihn nicht, denn beide schauen in das config\servers\ der Wurzel.
foxserver deploy --project C:\proyectos\almacenDesplegado Almacen en la instalacion:
C:\Program Files\FoxServer\config\servers\ALMACEN.json
clave: 127.0.0.1:8099:Vor dem Schreiben wird geprüft, dass kein anderes Manifest denselben Schlüssel Host:Port:Präfix hat: gibt es eines, endet es mit 11 und nennt es, denn der Host wurde eines starten und das andere mit einer Warnung überspringen, die nur im Log sichtbar ist. --force überspringt die Prüfung.
ide\ ablegt und die mit foxforge.cmd in der Visual-FoxPro-9-IDE geoffnet wird: Menu Neu › Webdienst / REST-API. Sie macht dasselbe wie init, controller-add und endpoint-add, mit Formularen statt Befehlen. Dazu gibt es ein Schritt-für-Schritt-Tutorial aus der IDE. Prüfen, ohne etwas zu starten
Diese funktionieren ab Schritt 1, mit unkompiliertem Projekt:
foxserver doctor --project C:\proyectos\almacen # que le falta y por donde se expone
foxserver validate --project C:\proyectos\almacen # exit 11 si hay errores
foxserver info --project C:\proyectos\almacen --format json
foxserver openapi --project C:\proyectos\almacen # el contrato, sin levantar el servidor
foxserver middleware-list --project C:\proyectos\almacen # auth, logging, status, sse...Wenn etwas schiefgeht
| Exit | Was passiert ist | Was zu tun ist |
|---|---|---|
2 | Ein Pflichtargument fehlt, oder ein Aufzahlungswert ist ungültig | foxserver describe liefert das exakte Schema |
10 | Es gibt kein Manifest in build\ | Dieser Ordner ist kein FoxServer-Projekt. Es heißt nicht "nicht kompiliert": das Manifest legt init an |
11 | Das Projekt hat Validierungsfehler | foxserver validate listet sie mit ihrer Schwere auf |
12 | Das FoxForge-Tooling fehlt | Die CLI einer Installation benutzen, oder FOXSERVER_TOOLING setzen |
13 | vfp9.exe nicht gefunden | --vfp <Pfad> oder FOXSERVER_VFP |
14 | Das Schreiben schlug fehl | Prüfen, ob die .prg mit der .pjx verknupft wurde |
16 | FoxServer.Host.exe nicht gefunden | Die CLI einer Installation benutzen, oder --host <Pfad> |
17 | build ohne erhöhte Konsole | Eine als Administrator öffnen |
18 | Die Kompilierung schlug fehl | Die Fehler kommen auf stderr, mit Datei und Zeile, aus der .ERR von VFP. Gab es eine frühere MTDLL, steht sie noch: der Server wurde den alten Code ausliefern |