Exhibition-RestServer: Unterschied zwischen den Versionen
Zur Navigation springen
Zur Suche springen
Zeile 86: | Zeile 86: | ||
* Adapt the configuration in /etc/$PROJECT | * Adapt the configuration in /etc/$PROJECT | ||
* Than restart the service | * Than restart the service | ||
<source lang="bash">systemctl restart $PROJECT | <source lang="bash"> | ||
PROJECT=exhibition | |||
systemctl restart $PROJECT | |||
</source> | </source> |
Aktuelle Version vom 17. August 2021, 05:24 Uhr
Links[Bearbeiten]
Introduction[Bearbeiten]
The rest_server is a sub project of the dev-app implementing a backend for managing the data storage in a MySql database.
Features[Bearbeiten]
- The communication between the dev-app (as a client) and rest_server is done via HTTP in the REpresentational State Transfer design pattern.
- The program of the rest_server is a static piece of software written in Dart, the customizing is done with configuration in some files. This sub project does not have dependencies on Flutter.
- The server is a multithreaded HTTP server, the number of threads (Dart isolates) may be configured.
- The Sql statements must be specified with "named parameters". But the dart module mysqldb cannot handle named parameters. Therefore the statements will be converted into "positional parameters" automatically.
Configuration[Bearbeiten]
Main Configuration[Bearbeiten]
The main configuration is done by a yaml file:
--- # Example configuration file for the rest server. Created by rest_server. service: address: 0.0.0.0 port: 58031 dataDirectory: /tmp/unittest/data sqlDirectory: ${path.dirname(sqlFile)} threads: 1 watchDogPause: 60 # logFile: /var/log/local/exhibition.log trace: answerLength: 200 db: db: dbtest user: dbtest code: "TopSecret" host: localhost port: 3306 primaryTable: persons timeout: 30 traceDataLength: 200 clientSessionTimeout: 900
Sql Configuration[Bearbeiten]
The SQL statements for each module must be specified in a yaml file.
Note: Normally this file is generated by the meta_tool from the metadata.
--- # SQL statements of the module "Persons": module: Persons list: type: list parameters: [] sql: select * from persons; byId: type: record parameters: [ ":id" ] sql: "select * from persons where person_id=:id;" update: type: update parameters: [":id", ":name", ":email", ":changedby"] sql: "UPDATE persons SET person_name=:name, person_email=:email, person_changed=NOW(), person_changedby=:changedby WHERE person_id=:id;" insert: type: insert parameters: [":name", ":email", ":createdby"] sql: "INSERT INTO persons(person_name, person_email, person_created, person_createdby) VALUES(:name, :email, NOW(), :createdby);" delete: type: delete parameters: [':id'] sql: "DELETE FROM persons WHERE person_id=:id;"
Installation[Bearbeiten]
The rest_server must be installed on a backend server. During development that can be localhost.
Preparation[Bearbeiten]
tools/PackRestServer
- The script creates two files: InstallRestServer and rest_server.tgz
- Put that to the backend server, e.g. into the /tmp directory
cd /tmp
./InstallRestServer
- Note: $PROJECT is the name of the project
- The script creates the directories /usr/share/$PROJECT and /etc/$PROJECT
- Adapt the configuration in /etc/$PROJECT
- Than restart the service
PROJECT=exhibition
systemctl restart $PROJECT