-
Notifications
You must be signed in to change notification settings - Fork 1
Скрипт:webui
http сервер реализован в src/web/server.lua
В каталоге /api/ сервера находятся ресурсы, к которым можно получить доступ с помощью HTTP REST API.
Ниже $id — id запрашиваемого объекта.
формат ячейки:
метод внутри сервера | http код состояния |
Методы | ||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Путь внутри /api/ | HEAD | GET | POST | LINK | UNLINK | CREATE | DELETE | |||||||
/object/ | search | 200 | search | 200 | 405 | 405 | 405 | 405 | 405 | |||||
/object/$id/ | read | 200,404 | read | 200,404 | update | 200,404,500 | connect | 200,404,500 | disconnect | 200,404,500 | 405 | remove | 204,404,500 | |
/person/ | search | 200 | search | 200 | 405 | 405 | 405 | create | 201,500 | 405 | ||||
/person/$id/ | read | 200,404 | read | 200,404 | update | 200,404,500 | connect | 200,404,500 | disconnect | 200,404,500 | 405 | remove | 204,404,500 | |
/group/ | search | 200 | search | 200 | 405 | 405 | 405 | create | 201,500 | 405 | ||||
/group/$id/ | read | 200,404 | read | 200,404 | update | 200,404,500 | connect | 200,404,500 | disconnect | 200,404,500 | 405 | remove | 204,404,500 | |
/event/ | search | 200 | search | 200 | 405 | 405 | 405 | create | 201,500 | 405 | ||||
/event/$id/ | read | 200,404 | read | 200,404 | update | 200,404,500 | connect | 200,404,500 | disconnect | 200,404,500 | 405 | remove | 204,404,500 |
Метод HEAD эквивалентен методу GET, но ответ сервера не содержит данных.
Сервер присылает ответ в виде json представления объектов. Любой объект обязательно имеет поля "id" и "type", при вызове метода "search" возвращается массив таких объектов (возможно пустой).
В случае ошибки возвращается объект json, содержащий единственное поле "error" с текстовым описанием ошибки.
200 OK Content-Type: application/json Content-Length: ...<здесь длина данных>... [ { "type": "person", "id": "0", "name": "Вася", "surname": "Пупкин", "sex": "MALE", "groups": [ "1" ] }, { "type": "group", "id": "1", "name": "Пупкины" } ]
200 OK Content-Type: application/json Content-Length: ...<здесь длина данных>... { "type": "person", "id": "0", "name": "Вася", "surname": "Пупкин", "sex": "MALE", "groups": [ "1" ] } Далее для краткости приведены только подробности запросов.
Поиск по всем полям всех объектов:
GET /api/object/?q=Пупкин HTTP/1.1
Поиск по конкретному полю объектов групп:
GET /api/group/?name=Пупкины HTTP/1.1
Заголовок запроса:
name=name&value=Vasya
Связать два объекта:
LINK /api/person/0 HTTP/1.1 Location: /api/group/1
Разорвать связь:
UNLINK /api/person/0 HTTP/1.1 Location: /api/group/1
201 Created Content-Type: application/json Content-Length: .... Location: /api/event/2 { "type": "event", "id": "2" }
204 No content
Штатное завершение работы.
shutdown=1 200 OK { "state": "shutting down" }
Сервер запоминает изменения, производимые в объектах. получить все изменения начиная с определенного состояния можно с помощью GET запроса по адресу /api/log/<номер состояния>
Внимание, для корректной работы webUI должен быть установлен пакет luarocks, а также luarock luasocket, который можно установить следующим образом:
luarocks [--local] install luasocket
Используйте опцию --local, чтобы установить пакет внутри домашней директории.
В файле $HOME/.unisched/rc.lua следует указать следующие настройки:
Параметр | Значение | Комментарий |
---|---|---|
local build | /path/to/build | Путь к директории сборки. |
local src | /path/to/src | Путь к директории с проектом. |
config.ui | 'luaui' | Используется LuaUI. |
config.storage | 'SQLITE | SQLite для хранения данных. |
config.modules_path | build .. '/src/modules/storage:' .. build .. '/src/modules/ui' | Пути к модулям. |
config.sqlite_db | /path/to/sqlite/database | Путь к файлу базы данных. |
config.httpd | {} | Содержит в себе несколько параметров, задающих поведение сервера. |
config.httpd.host | '0.0.0.0' | На каком адресе ждать обращений. |
config.httpd.port | 8000 | Порт, на котором ждать обращений. |
config.httpd.api_prefix | '/api/' | Не меняйте, ни в коем случае - виртуальная директория, обращения к которой сервер перехватывает и обрабатывает как запросы к API |
config.httpd.static_dir | src .. '/src/web/static/' | Корневая директория сервера, в ней находятся все скрипты, стили и прочие ресурсы. |
config.script | src .. '/src/web/server.lua' | LuaUI должен использовать скрипт с реализацией сервера. |
Пример конфигурационного файла:
config.ui = 'luaui' -- Possible variants: 'DummyUI', 'CLI', luaui' config.storage = 'SQLITE' -- Possible variants: SQLITE local home = os.getenv('HOME') -- $HOME directory local src = home .. '/code/UniSched' -- repo directory local build = home .. '/code/build' -- build directory config.modules_path = build .. '/src/modules/storage:' .. build .. '/src/modules/ui' -- Path to modules config.sqlite_db = home .. '/.unisched/unisched.db' -- Path to sqlite3 database. config.httpd = { -- web ui settings host = '0.0.0.0', port = 8000, api_prefix = '/api/', -- prefix before api path (must be '/api/') static_dir = src .. '/src/web/static/' -- server '/' directory } config.script = src .. '/src/web/server.lua'
Данный конфигурационный файл предполагает, что директория с репозиторием находится в $HOME/code/UniSched, а директория сборки в $HOME/code/build. Также предполагается, что база данных находится в $HOME/.unisched/unisched.db
Чтобы запустить, переходим в папку, где собирали расписатор и запускаем
./src/raspisator
Запущенный сервер будет ожидать подключений по адресу: http://localhost:8000/