Erste Schritte
In weniger als 5 Minuten haben Sie einen HTTP-Server, der in VFP lauft und auf REST-Anfragen antwortet.
Voraussetzungen
- FoxServer installiert und lizenziert
- VFP 9 SP2 oder hoher installiert
- WinFx installiert (visueller Projektgenerator, optional aber empfohlen)
1. Projekt erstellen
Offnen Sie WinFx und erstellen Sie ein neues API-Projekt. Dadurch wird automatisch die Ordnerstruktur und die Konfigurationsdatei generiert.
Alternativ konnen Sie manuell eine .prg-Datei mit dem Controller erstellen:
2. Controller definieren
Der Controller ist eine VFP-Klasse, die von ApiController erbt. Jede offentliche Methode mit einem HELP-Kommentar ist ein Endpunkt:
* HelloController.prg
DEFINE CLASS HelloController AS ApiController OLEPUBLIC
PROCEDURE GetHello(req, res) HELP "GET: hello public"
LOCAL loResp
loResp = THIS.newObject("status,message")
loResp.status = "success"
loResp.message = "Hello from FoxServer!"
res.status(200).json(THIS.ToJson(loResp))
ENDPROC
PROCEDURE GetVersion(req, res) HELP "GET: hello/version public"
LOCAL loResp
loResp = THIS.newObject("version,server")
loResp.version = "1.0.0"
loResp.server = "FoxServer"
res.status(200).json(THIS.ToJson(loResp))
ENDPROC
ENDDEFINE | Element | Beschreibung |
|---|---|
ApiController | FoxServer-Basisklasse — stellt Request, Response und JSON-Dienstprogramme bereit |
HELP "GET: hello public" | Deklariert den Endpunkt: HTTP-Methode + Route + Sichtbarkeit (public = kein JWT) |
req | Objekt mit allen Informationen uber die eingehende Anfrage |
res | Objekt zum Erstellen und Senden der HTTP-Antwort |
THIS.newObject(Felder) | Erstellt ein dynamisches VFP-Objekt mit den angegebenen Eigenschaften |
THIS.ToJson(obj) | Serialisiert ein VFP-Objekt in einen JSON-String |
res.status(200).json(json) | Sendet Antwort mit HTTP-Code 200 und JSON-Body |
3. Projekt kompilieren
Kompilieren Sie aus WinFx oder aus VFP heraus. Der Compiler generiert eine Interop-DLL-Datei, die FoxServer ladt.
4. Server starten
Starten Sie FoxServer und verweisen Sie auf Ihr kompiliertes Projekt. Wenn Sie den Windows-Dienstmodus verwenden, lesen Sie den Abschnitt Erweiterte Funktionen.
FoxServer.exe --project "C:\MiProyecto\config\myapi.json" 5. Endpunkt testen
Wenn der Server auf Port 8080 lauft, testen Sie mit curl, Postman oder dem Browser:
# GET /api/hello
curl http://localhost:8080/api/hello
# Response:
# {"status":"success","message":"Hello from FoxServer!"} URL-Parameter hinzufugen
Parameter werden in geschweiften Klammern in der Route deklariert und uber req.params abgerufen:
PROCEDURE GetUser(req, res) HELP "GET: users/{id} public"
LOCAL lcId, loResp
lcId = req.params.id && "123" from /api/users/123
loResp = THIS.newObject("id,found")
loResp.id = lcId
loResp.found = .T.
res.status(200).json(THIS.ToJson(loResp))
ENDPROC curl http://localhost:8080/api/users/123
# {"id":"123","found":true} Body lesen (POST)
Fur POST-Anfragen mit JSON-Body verwenden Sie req.json:
PROCEDURE PostProduct(req, res) HELP "POST: products public"
LOCAL loBody, loResp
&& Body: {"name":"Widget","price":9.99}
IF ISNULL(req.json) OR EMPTY(req.json.name)
res.status(400).json('{"error":"name is required"}')
RETURN
ENDIF
loResp = THIS.newObject("status,name,price")
loResp.status = "created"
loResp.name = req.json.name
loResp.price = req.json.price
res.status(201).json(THIS.ToJson(loResp))
ENDPROC curl -X POST http://localhost:8080/api/products \
-H "Content-Type: application/json" \
-d '{"name":"Widget","price":9.99}'
# {"status":"created","name":"Widget","price":9.99}