Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
U
uniset2
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
1
Issues
1
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
UniSet project repositories
uniset2
Commits
248791e2
Commit
248791e2
authored
Jan 06, 2021
by
Pavel Vainerman
Committed by
Pavel Vainerman
Jan 07, 2021
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[http api]: update docs, help refactoring
parent
c807fc98
Show whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
116 additions
and
28 deletions
+116
-28
REST_API.dox
docs/DocPages/REST_API.dox
+21
-2
MBTCPMaster.h
extensions/ModbusMaster/MBTCPMaster.h
+5
-0
UObject_SK.h
extensions/include/UObject_SK.h
+1
-0
UObject_SK.cc
extensions/lib/UObject_SK.cc
+39
-0
test_restapi_uniset.cc
extensions/tests/test_restapi_uniset.cc
+2
-2
UHttpRequestHandler.h
include/UHttpRequestHandler.h
+26
-13
UniSetActivator.h
include/UniSetActivator.h
+18
-8
UniSetObject.cc
src/Core/UniSetObject.cc
+1
-1
ujson.cc
src/Various/ujson.cc
+3
-2
No files found.
docs/DocPages/REST_API.dox
View file @
248791e2
...
...
@@ -2,10 +2,29 @@
В библиотеке предусмотрен REST API. Есть два "уровня" доступа к REST API.
Первый - это встроенный в UniSetActivator http-сервер.
\ref sec_SM_REST_API
\sa \ref sec_SM_REST_API
\sa \ref sec_act_HttpAPI
Второй уровень. Это функция apiRequest(query) которую можно вызывать у каждого
объекта посредством RPC. Её вызов не требует наличия запущенного http-сервера.
объекта посредством RPC. Её вызов \b не \b требует наличия запущенного http-сервера.
Из консоли вызов можно делать при помощи утилиты uniset2-admin.
<br>Например так можно получить свойство "textname" для датчика ID=100
\code
uniset2-admin --apiRequest ObjectName "/api/v01/configure/get?100&props=textname"
\endcode
<br>А так можно посмотреть текущие параметры для объекта MyProcess
\code
uniset2-admin --apiRequest MyProcess "/api/v01/params/get"
\endcode
<br>Разные процессы могут расширять список базовых поддерживаемых команд.
Для того, чтобы узнать какие объект поддерживает команды, можно вызвать команду help
\code
uniset2-admin --apiRequest MyProcess "/api/v01/help"
\endcode
\warning С точки зрения надёжности функционирования системы наличие запущенного
http-сервера, а так же наличие функций \b getInfo(userparam) и \b apiRequest(query)
...
...
extensions/ModbusMaster/MBTCPMaster.h
View file @
248791e2
...
...
@@ -214,6 +214,11 @@ namespace uniset
послать команду SystemMessage::Reconfigure или воспользоваться HTTP API, где можно указать файл из
которого произвести загрузку (см. \ref sec_MBTCP_REST_API).
Послать команду можно при помощи утилиты uniset2-admin
\code
uniset2-admin --configure ObjectID
\endcode
При этом процесс приостанавливает обмен и перезагружает конфигурационный файл с которым был запущен.
Переконфигурировать можно регистры, список устройств, адреса и любые свойства. В том числе возможно
добавление новых регистров в список или уменьшение списка существующих.
...
...
extensions/include/UObject_SK.h
View file @
248791e2
...
...
@@ -188,6 +188,7 @@ class UObject_SK:
virtual
Poco
::
JSON
::
Object
::
Ptr
httpDumpIO
();
virtual
Poco
::
JSON
::
Object
::
Ptr
httpRequestLog
(
const
Poco
::
URI
::
QueryParameters
&
p
);
virtual
Poco
::
JSON
::
Object
::
Ptr
request_params_set
(
const
std
::
string
&
req
,
const
Poco
::
URI
::
QueryParameters
&
p
)
override
;
virtual
Poco
::
JSON
::
Object
::
Ptr
request_params_get
(
const
std
::
string
&
req
,
const
Poco
::
URI
::
QueryParameters
&
p
)
override
;
#endif
// Выполнение очередного шага программы
...
...
extensions/lib/UObject_SK.cc
View file @
248791e2
...
...
@@ -754,6 +754,45 @@ Poco::JSON::Object::Ptr UObject_SK::request_params_set( const std::string& req,
jret
->
set
(
"Result"
,
(
jupdated
->
size
()
>
0
?
"OK"
:
"FAIL"
)
);
return
jret
;
}
// -----------------------------------------------------------------------------
Poco
::
JSON
::
Object
::
Ptr
UObject_SK
::
request_params_get
(
const
std
::
string
&
req
,
const
Poco
::
URI
::
QueryParameters
&
params
)
{
Poco
::
JSON
::
Object
::
Ptr
jret
=
new
Poco
::
JSON
::
Object
();
if
(
params
.
empty
()
)
{
jret
->
set
(
"sleep_msec"
,
sleep_msec
);
jret
->
set
(
"resetMsgTime"
,
resetMsgTime
);
jret
->
set
(
"forceOut"
,
forceOut
);
return
jret
;
}
for
(
const
auto
&
p
:
params
)
{
if
(
p
.
first
==
"sleep_msec"
)
{
jret
->
set
(
p
.
first
,
sleep_msec
);
continue
;
}
if
(
p
.
first
==
"resetMsgTime"
)
{
jret
->
set
(
p
.
first
,
resetMsgTime
);
continue
;
}
if
(
p
.
first
==
"forceOut"
)
{
jret
->
set
(
p
.
first
,
forceOut
);
continue
;
}
}
return
jret
;
}
#endif
// -----------------------------------------------------------------------------
...
...
extensions/tests/test_restapi_uniset.cc
View file @
248791e2
...
...
@@ -34,11 +34,11 @@ static void init_test()
CHECK
(
aid
!=
DefaultObjectId
);
}
// -----------------------------------------------------------------------------
TEST_CASE
(
"[REST API: conf]"
,
"[restapi][conf]"
)
TEST_CASE
(
"[REST API: conf]"
,
"[restapi][conf
igure
]"
)
{
init_test
();
std
::
string
s
=
shm
->
apiRequest
(
"/conf
/get?2,Input5_S¶ms=iotype"
);
std
::
string
s
=
shm
->
apiRequest
(
"/configure
/get?2,Input5_S¶ms=iotype"
);
Poco
::
JSON
::
Parser
parser
;
auto
result
=
parser
.
parse
(
s
);
...
...
include/UHttpRequestHandler.h
View file @
248791e2
...
...
@@ -28,7 +28,7 @@
#include "ujson.h"
#include "DebugStream.h"
// -------------------------------------------------------------------------
/*! \page UHttpServer HTTP API (базовая реализация)
/*! \page
pg_
UHttpServer HTTP API (базовая реализация)
*
* Формат запроса: /api/version/xxx
*
...
...
@@ -46,20 +46,32 @@
* HELP FORMAT:
* myname {
* help [
* {"command":
* {"desc": "text"},
* {"params": [
* {"p1","desc of p1"},
* {"p2","desc of p2"},
* {"p3","desc of p3"}
* {
* "name": "command1",
* "desc": "text",
* "parameters": [
* {
* "name": "p1",
* "desc": " description of p1"
* },
* {
* "name": "p2",
* "desc": " description of p2"
* },
* {
* "name": "p3",
* "desc": " description of p3"
* }
* ]}
* },
* {"command2":
* {"desc": "text"},
* {"params": [
* {"p1","desc of p1"},
* {"p2","desc of p2"},
* {"p3","desc of p3"}
* {
* "name": "command2",
* "desc": "text",
* "parameters": [
* {
* "name": "p1",
* "desc": " description of p1"
* }
* ]}
* },
* ...
...
...
@@ -67,6 +79,7 @@
* }
*\endcode
*
* \sa \ref act_HttpAPI
* \todo подумать над /api/version/tree - получение "дерева" объектов (древовидный список с учётом подчинения Manager/Objects)
*/
// -------------------------------------------------------------------------
...
...
include/UniSetActivator.h
View file @
248791e2
...
...
@@ -34,6 +34,24 @@
//----------------------------------------------------------------------------------------
namespace
uniset
{
/*! \page pg_Act Активтор объектов
*
* Активатор объектов предназначен для запуска, после которого объекты становятся доступны для удалённого
* вызова.
*
* \section sec_act_HttpAPI Activator HTTP API
* UniSetActivator выступает в роли http-сервера и реализует первичную обработку запросов
* и перенаправление их указанным объектам. Помимо этого UniSetActivator реализует обработку команд
* \code
* /api/VERSION/configure/get?[ID|NAME]&props=testname,name]
* \endcode
* Для запуска http-сервера необходимо в аргументах командной строки указать --activator-run-httpserver
* Помимо этого можно задать параметры --activator-httpserver-host и --activator-httpserver-port.
* --activator-httpserver-cors-allow addr - (CORS): Access-Control-Allow-Origin. Default: *.
*
* \sa \ref pg_UHttpServer
*
**/
//----------------------------------------------------------------------------------------
class
UniSetActivator
;
typedef
std
::
shared_ptr
<
UniSetActivator
>
UniSetActivatorPtr
;
...
...
@@ -49,14 +67,6 @@ namespace uniset
...
\endcode
* Активатор в свою очередь сам является менеджером(и объектом) и обладает всеми его свойствами
*
* \section act_HttpAPI REST API
* UniSetActivator выступает в роли http-сервера и реализует первичную обработку запросов
* и перенаправление их указанным объектам. Помимо этого UniSetActivator реализует обработку команд /configure/..
* Для запуска http-сервера необходимо в аргументах командной строки указать --activator-run-httpserver
* Помимо этого можно задать параметры --activator-httpserver-host и --activator-httpserver-port.
* --activator-httpserver-cors-allow addr - (CORS): Access-Control-Allow-Origin. Default: *.
*
*/
class
UniSetActivator
:
public
UniSetManager
...
...
src/Core/UniSetObject.cc
View file @
248791e2
...
...
@@ -486,7 +486,7 @@ namespace uniset
throw
uniset
::
SystemError
(
err
.
str
());
}
// ------------------------------------------------------------------------------------------
// обработка запроса вида: /conf/get?[ID|NAME]&props=testname,name] from configure.xml
// обработка запроса вида: /conf
igure
/get?[ID|NAME]&props=testname,name] from configure.xml
Poco
::
JSON
::
Object
::
Ptr
UniSetObject
::
request_configure_get
(
const
std
::
string
&
req
,
const
Poco
::
URI
::
QueryParameters
&
params
)
{
Poco
::
JSON
::
Object
::
Ptr
json
=
new
Poco
::
JSON
::
Object
();
...
...
src/Various/ujson.cc
View file @
248791e2
...
...
@@ -44,7 +44,8 @@ namespace uniset
json
::
help
::
item
::
item
(
const
std
::
string
&
cmd
,
const
std
::
string
&
description
)
{
root
=
new
Poco
::
JSON
::
Object
();
root
->
set
(
cmd
,
description
);
root
->
set
(
"name"
,
cmd
);
root
->
set
(
"desc"
,
description
);
}
// --------------------------------------------------------------------------
void
json
::
help
::
item
::
param
(
const
std
::
string
&
name
,
const
std
::
string
&
description
)
...
...
@@ -55,7 +56,7 @@ namespace uniset
root
->
set
(
"parameters"
,
params
);
}
params
->
add
(
uniset
::
json
::
make_object
(
name
,
description
)
);
params
->
add
(
item
(
name
,
description
)
);
}
// --------------------------------------------------------------------------
Poco
::
JSON
::
Object
::
Ptr
json
::
help
::
item
::
get
()
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment