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)
......
...@@ -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