From e7c776a8fdb1bc435175eeb0192cdf8c6b499ef1 Mon Sep 17 00:00:00 2001 From: Ground0 Date: Fri, 13 Nov 2020 10:32:09 +0100 Subject: [PATCH] Dokumentation erstellt. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Falsch benante Prozedur gändert: MapStringToJSONString -> MapToJSONString --- README.md | 135 +++++++++++++++++++++++++++++++++++++++++++++- lweb.pbi | 2 +- lweb_header.pbi | 2 +- server_example.pb | 6 +-- 4 files changed, 139 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 565d3e5..4196d2f 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,136 @@ # lweb -LiHaSo Webserver Modul \ No newline at end of file +LiHaSo Webserver Modul + +## Öffentliche Funktionen: + +### Konfiguration des Server Moduls: + +Mögliche Parameter: +``` +lweb::#conf_port ;Hörender Port, z.B. "80" +lweb::#conf_binding ;Interface Binding z.B. nur Lokalhost mit "127.0.0.1" +lweb::#conf_defaultfile ;Standard wenn keine Datei (Extension angegeben ist) z.B. "index.php" +lweb::#conf_basedir ;Standard Verzeichnis z.B. "/srv/www/htdocs/" +lweb::#conf_error400 ;TODO:error400 bearbeitung +lweb::#conf_max_clients ;Maximale Clientconnections (Memory beachten) +lweb::#conf_server_type ;Derzeit ohne Funktion (Später z.B. HTTPS und HTTP oder HTTP/2 usw.) +lweb::#conf_cache_enable ;Bei wert auf 1 Setzen um zu Aktivieren diese Funktion ist aber derzeit mit Vorsicht zu geniessen!!!! +``` + +#### Funktionen +`lweb::set_config(parameter.i=#conf_defaultfile, setting.s="index.html")` + +Dass setting ist immer ein String. + +Rückgabewert ist `#True` oder `#False.` + + +`lweb::get_config(parameter.i=#conf_defaultfile)` + +Der Rückgabewert ist immer einen String. + +### Starten des Servers +`lweb::start_server()` + +Rückgabewert ist `#True` oder `#False.` + +### Verschiedene arten des Handlers Registrieren & Proceduren: + +`lweb::register_client_handler(Route.s, Callback.i, AppPrototype.i = #handler_proto_get, RouteType.i = #handler_sub)` + +Rückgabewerte ist immer ein JSONString! + +AppPrototype Möglichkeiten: +``` +lweb::#handler_proto_universal ;Für HTTP POST und GET Requests Nimmt Optional einen String entgegen. +lweb::#handler_proto_post ;Nur für HTTP POST Requests Nimmt Zwingend einen String entgegen. +lweb::#handler_proto_get ;Nur für HTTP GET Requests Nimmt keinen String entgegen. +``` + +RouteType Möglichkeiten: +``` +lweb::#handler_only ;Reagiert nur auf die Url (Bsp. /rest/v1/test aber nicht auf /rest/v1/test/sub) +lweb::#handler_sub ;Reagiert auf eine ganze Url die begint. (Bsp. /rest/v1/test sowie auch auf /rest/v1/test/sub) +lweb::#handler_type ;Reagiert auf datentypen (zb. *.php = "php") +``` + +Map für Antwort ist eine einfache Stringmap: +`NewMap Response.s()` + +Wobei folgende werte entsprechend gesetzt werden müssen: +* `lweb::#cha_R_ResponseType = "ResponseType"` ;Element ResponseType,Mimetype mit `lweb::mimetype("html")` z.B. Setzen. +* `lweb::#cha_R_ResponseContentType = "ResponseContentType"` ;Element ResponseContentType, `lweb::#response_string` oder `lweb::#response_Memory` +* `lweb::#cha_R_MemoryAdress = "MemoryAdress"` ;Element MemoryAdress, Konvertieren zu String `Str(Adresse)` wird mit `Val()` zurückkonvertiert. Und nach dem Bearbeiten wieder freigegeben! +* `lweb::#cha_R_MemorySize = "MemorySize"` ;Element MemorySize, Konvertieren zu String `Str(Grösse)` wird mit `Val()` zurückkonvertiert. +* `lweb::#cha_R_StringBase64 = "StringBase64"` ;Element StringBase64, Base64 Encoded String +* `lweb::#cha_R_http_head_status = "HeaderStatus"` ;`"200 OK"`, `"300 Error"`, `"500 Server Error"` usw. + +Zu beachten ist das entweder ein Base64 encodierter String oder ein MemoryBlock zurückgegeben werden muss! + +Komplettes Beispiel: +``` +Procedure.s Sample_Header(Map Header.s()) + Define *Text + Define.s Encoded, ZumSenden, TBD + NewMap Response.s() + TBD="

Header


"+#CRLF$ + ResetMap(Header()) + While NextMapElement(Header()) + TBD = TBD+"
"+MapKey(Header())+" : "+Header()+"

"+#CRLF$ + Wend + + *Text = UTF8("
Alle Client Headers
"+TBD+"") + Encoded = Base64Encoder(*Text, MemorySize(*Text)) + Debug "Encoded: " + Encoded + Response(lhs_web::#cha_R_ResponseContentType) = lhs_web::#response_string + Response(lhs_web::#cha_R_StringBase64) = Encoded + Response(lhs_web::#cha_R_ResponseType) = lhs_web::mimetype("html") + Response(lhs_web::#cha_R_http_head_status) = "200 OK" + ZumSenden = lhs_web::MapToJSONString(Response()) + Debug "ZumSenden: " + ZumSenden + ProcedureReturn ZumSenden +EndProcedure + +lhs_web::register_client_handler("/server/show_client_headers", @Sample_Header(),lhs_web::#handler_proto_get, lhs_web::#handler_sub) +``` + +### Einen Mimetype eines Fileextensions: +`lweb::mimetype(file.s)` + +Gibt einen String zurück. + +Konvertiert z.B. `lweb::mimetype("html")` zu `"text/html"` + +### Eine Map in einen JSONString Konvertieren (z.B. in Interaktion mit einer Spiderbasic App) +`lweb::MapToJSONString(Map ConvertMap.s())` + +Gibt einen String zurück. + +Beispiel: +``` + Response(lhs_web::#cha_R_ResponseContentType) = lhs_web::#response_string + Response(lhs_web::#cha_R_StringBase64) = Encoded + Response(lhs_web::#cha_R_ResponseType) = lhs_web::mimetype("html") + Response(lhs_web::#cha_R_http_head_status) = "200 OK" + ZumSenden = lhs_web::MapToJSONString(Response()) +``` + +Ergib anschliessend einen String der wieder Zurückkonvertiert werden kann von der Hauptbearbeitungsprozedur (Client Thread in lweb.pbi). + +### Verifizierung ob es eine Gültige IP Adresse ist (IPv6 und IPv4) +`lweb::IsIPStringValid(Adress.s)` + +Beispiel: +``` +setting = "192.168.256.12" +If lweb::IsIPStringValid(setting) + conf_binding = setting +Else + ; Fehler + conf_binding = "127.0.0.1" +EndIf +``` +ergibt einen Fehler und wird die Standard IP Setzen. + +Rückgabewert ist `#True` oder `#False.` diff --git a/lweb.pbi b/lweb.pbi index 1382ed3..53ea530 100644 --- a/lweb.pbi +++ b/lweb.pbi @@ -1000,7 +1000,7 @@ Module lhs_web ProcedureReturn 0 EndProcedure - Procedure.s MapStringToJSONString(Map ConvertMap.s()) + Procedure.s MapToJSONString(Map ConvertMap.s()) Protected MyJSON Protected.s Response MyJSON = CreateJSON(#PB_Any) diff --git a/lweb_header.pbi b/lweb_header.pbi index 8475b21..64ac3dd 100644 --- a/lweb_header.pbi +++ b/lweb_header.pbi @@ -83,7 +83,7 @@ DeclareModule lhs_web Declare start_server() Declare.s register_client_handler(Route.s, Callback.i, AppPrototype.i = #handler_proto_get, RouteType.i = #handler_sub) Declare.s mimetype(file.s) - Declare.s MapStringToJSONString(Map ConvertMap.s()) + Declare.s MapToJSONString(Map ConvertMap.s()) Declare IsIPStringValid(Adress.s) EndDeclareModule \ No newline at end of file diff --git a/server_example.pb b/server_example.pb index ec41563..7bb36ab 100644 --- a/server_example.pb +++ b/server_example.pb @@ -50,7 +50,7 @@ Procedure.s Sample_Header(Map Header.s()) Response(lhs_web::#cha_R_StringBase64) = Encoded Response(lhs_web::#cha_R_ResponseType) = lhs_web::mimetype("html") Response(lhs_web::#cha_R_http_head_status) = "200 OK" - ZumSenden = lhs_web::MapStringToJSONString(Response()) + ZumSenden = lhs_web::MapToJSONString(Response()) Debug "ZumSenden: " + ZumSenden ProcedureReturn ZumSenden EndProcedure @@ -74,7 +74,7 @@ Procedure.s Formular_Test(Map Header.s(), ContentData.s) Response(lhs_web::#cha_R_StringBase64) = Encoded Response(lhs_web::#cha_R_ResponseType) = lhs_web::mimetype("html") Response(lhs_web::#cha_R_http_head_status) = "200 OK" - ZumSenden = lhs_web::MapStringToJSONString(Response()) + ZumSenden = lhs_web::MapToJSONString(Response()) Debug "ZumSenden: " + ZumSenden ProcedureReturn ZumSenden @@ -105,7 +105,7 @@ Procedure.s Php_Test(Map Header.s(), ContentData.s) Response(lhs_web::#cha_R_StringBase64) = Encoded Response(lhs_web::#cha_R_ResponseType) = lhs_web::mimetype("html") Response(lhs_web::#cha_R_http_head_status) = "200 OK" - ZumSenden = lhs_web::MapStringToJSONString(Response()) + ZumSenden = lhs_web::MapToJSONString(Response()) Debug "ZumSenden: " + ZumSenden ProcedureReturn ZumSenden EndProcedure