Commit 248791e2 authored by Pavel Vainerman's avatar Pavel Vainerman Committed by Pavel Vainerman

[http api]: update docs, help refactoring

parent c807fc98
...@@ -2,10 +2,29 @@ ...@@ -2,10 +2,29 @@
В библиотеке предусмотрен REST API. Есть два "уровня" доступа к REST API. В библиотеке предусмотрен REST API. Есть два "уровня" доступа к REST API.
Первый - это встроенный в UniSetActivator http-сервер. Первый - это встроенный в UniSetActivator http-сервер.
\ref sec_SM_REST_API \sa \ref sec_SM_REST_API
\sa \ref sec_act_HttpAPI
Второй уровень. Это функция apiRequest(query) которую можно вызывать у каждого Второй уровень. Это функция 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 С точки зрения надёжности функционирования системы наличие запущенного \warning С точки зрения надёжности функционирования системы наличие запущенного
http-сервера, а так же наличие функций \b getInfo(userparam) и \b apiRequest(query) http-сервера, а так же наличие функций \b getInfo(userparam) и \b apiRequest(query)
...@@ -13,4 +32,4 @@ ...@@ -13,4 +32,4 @@
реализации не контролируется. И при помощи больших запросов можно вызвать переполнение памяти реализации не контролируется. И при помощи больших запросов можно вызвать переполнение памяти
или крах процессов. На текущий момент контроль оставлен на разработчика конкретной реализации или крах процессов. На текущий момент контроль оставлен на разработчика конкретной реализации
getInfo() или apiRequest(). getInfo() или apiRequest().
*/ */
\ No newline at end of file
...@@ -214,6 +214,11 @@ namespace uniset ...@@ -214,6 +214,11 @@ namespace uniset
послать команду SystemMessage::Reconfigure или воспользоваться HTTP API, где можно указать файл из послать команду SystemMessage::Reconfigure или воспользоваться HTTP API, где можно указать файл из
которого произвести загрузку (см. \ref sec_MBTCP_REST_API). которого произвести загрузку (см. \ref sec_MBTCP_REST_API).
Послать команду можно при помощи утилиты uniset2-admin
\code
uniset2-admin --configure ObjectID
\endcode
При этом процесс приостанавливает обмен и перезагружает конфигурационный файл с которым был запущен. При этом процесс приостанавливает обмен и перезагружает конфигурационный файл с которым был запущен.
Переконфигурировать можно регистры, список устройств, адреса и любые свойства. В том числе возможно Переконфигурировать можно регистры, список устройств, адреса и любые свойства. В том числе возможно
добавление новых регистров в список или уменьшение списка существующих. добавление новых регистров в список или уменьшение списка существующих.
......
...@@ -188,6 +188,7 @@ class UObject_SK: ...@@ -188,6 +188,7 @@ class UObject_SK:
virtual Poco::JSON::Object::Ptr httpDumpIO(); virtual Poco::JSON::Object::Ptr httpDumpIO();
virtual Poco::JSON::Object::Ptr httpRequestLog( const Poco::URI::QueryParameters& p ); 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_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 #endif
// Выполнение очередного шага программы // Выполнение очередного шага программы
......
...@@ -754,6 +754,45 @@ Poco::JSON::Object::Ptr UObject_SK::request_params_set( const std::string& req, ...@@ -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") ); jret->set("Result", (jupdated->size() > 0 ? "OK" : "FAIL") );
return jret; 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 #endif
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
......
...@@ -34,11 +34,11 @@ static void init_test() ...@@ -34,11 +34,11 @@ static void init_test()
CHECK( aid != DefaultObjectId ); CHECK( aid != DefaultObjectId );
} }
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
TEST_CASE("[REST API: conf]", "[restapi][conf]") TEST_CASE("[REST API: conf]", "[restapi][configure]")
{ {
init_test(); init_test();
std::string s = shm->apiRequest("/conf/get?2,Input5_S&params=iotype"); std::string s = shm->apiRequest("/configure/get?2,Input5_S&params=iotype");
Poco::JSON::Parser parser; Poco::JSON::Parser parser;
auto result = parser.parse(s); auto result = parser.parse(s);
......
...@@ -28,7 +28,7 @@ ...@@ -28,7 +28,7 @@
#include "ujson.h" #include "ujson.h"
#include "DebugStream.h" #include "DebugStream.h"
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
/*! \page UHttpServer HTTP API (базовая реализация) /*! \page pg_UHttpServer HTTP API (базовая реализация)
* *
* Формат запроса: /api/version/xxx * Формат запроса: /api/version/xxx
* *
...@@ -46,20 +46,32 @@ ...@@ -46,20 +46,32 @@
* HELP FORMAT: * HELP FORMAT:
* myname { * myname {
* help [ * help [
* {"command": * {
* {"desc": "text"}, * "name": "command1",
* {"params": [ * "desc": "text",
* {"p1","desc of p1"}, * "parameters": [
* {"p2","desc of p2"}, * {
* {"p3","desc of p3"} * "name": "p1",
* "desc": " description of p1"
* },
* {
* "name": "p2",
* "desc": " description of p2"
* },
* {
* "name": "p3",
* "desc": " description of p3"
* }
* ]} * ]}
* }, * },
* {"command2": * {
* {"desc": "text"}, * "name": "command2",
* {"params": [ * "desc": "text",
* {"p1","desc of p1"}, * "parameters": [
* {"p2","desc of p2"}, * {
* {"p3","desc of p3"} * "name": "p1",
* "desc": " description of p1"
* }
* ]} * ]}
* }, * },
* ... * ...
...@@ -67,6 +79,7 @@ ...@@ -67,6 +79,7 @@
* } * }
*\endcode *\endcode
* *
* \sa \ref act_HttpAPI
* \todo подумать над /api/version/tree - получение "дерева" объектов (древовидный список с учётом подчинения Manager/Objects) * \todo подумать над /api/version/tree - получение "дерева" объектов (древовидный список с учётом подчинения Manager/Objects)
*/ */
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
......
...@@ -34,6 +34,24 @@ ...@@ -34,6 +34,24 @@
//---------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------
namespace uniset 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; class UniSetActivator;
typedef std::shared_ptr<UniSetActivator> UniSetActivatorPtr; typedef std::shared_ptr<UniSetActivator> UniSetActivatorPtr;
...@@ -49,14 +67,6 @@ namespace uniset ...@@ -49,14 +67,6 @@ namespace uniset
... ...
\endcode \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: class UniSetActivator:
public UniSetManager public UniSetManager
......
...@@ -486,7 +486,7 @@ namespace uniset ...@@ -486,7 +486,7 @@ namespace uniset
throw uniset::SystemError(err.str()); throw uniset::SystemError(err.str());
} }
// ------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------
// обработка запроса вида: /conf/get?[ID|NAME]&props=testname,name] from configure.xml // обработка запроса вида: /configure/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 UniSetObject::request_configure_get( const std::string& req, const Poco::URI::QueryParameters& params )
{ {
Poco::JSON::Object::Ptr json = new Poco::JSON::Object(); Poco::JSON::Object::Ptr json = new Poco::JSON::Object();
......
...@@ -44,7 +44,8 @@ namespace uniset ...@@ -44,7 +44,8 @@ namespace uniset
json::help::item::item( const std::string& cmd, const std::string& description ) json::help::item::item( const std::string& cmd, const std::string& description )
{ {
root = new Poco::JSON::Object(); 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) void json::help::item::param(const std::string& name, const std::string& description)
...@@ -55,7 +56,7 @@ namespace uniset ...@@ -55,7 +56,7 @@ namespace uniset
root->set("parameters", params); 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() Poco::JSON::Object::Ptr json::help::item::get()
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment