Π’Π΅ΡΡΠΎΠ²ΠΎΠ΅ Π·Π°Π΄Π°Π½ΠΈΠ΅:
1. Simple API
Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ ΠΏΡΠΎΡΡΠ΅ΠΉΡΠΈΠΉ REST API ΠΊΠ»ΠΈΠ΅Π½Ρ Π΄Π΅Π»Π°ΡΡΠΈΠΉ 1 Π·Π°ΠΏΡΠΎΡ, Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΡΠΉ ΡΠ°ΠΊΠΎΠΌΡ:
curl -X POST http://localhost:8000/api/json/v2 -L -d '{"id":0, "jsonrpc":"2.0","method":"systemInfo","params":[]}'
ΠΡΠ΅Π΄ΡΡΠΌΠΎΡΡΠ΅ΡΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ, ΡΠ΅ΡΠ΅Π· ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ Π΄ΡΡΠ³ΠΎΠΉ ΠΌΠ΅ΡΠΎΠ΄, Π½Π΅ systemInfo,
Ρ.Π΅. ΠΡΠ·ΠΎΠ² Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΠΎΡΠΎΡΠΌΠ»Π΅Π½ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ.
ΠΠ»Ρ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ Π‘99. Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ Π·Π°ΠΏΡΡΠΊ ΠΊΡΡΠ»Π° ΠΈΠ·-ΠΏΠΎΠ΄ ΡΠ΅ΡΠ΅Π½ΠΈΡ, Π½ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΅Π³ΠΎ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ.
- libcurl
- libjson-c
$ cd rest_cl
$ mkdir build
$ cd build/
$ cmake ..
$ make
ΠΠ»Ρ Π½Π°ΡΠ°Π»Π° Π·Π°ΠΏΡΡΠΊΠ°Π΅ΠΌ ΡΠ΅ΡΡΠΎΠ²ΡΠΉ ΡΠ΅ΡΠ²Π΅Ρ
$ python3 rest_sv/Server.py
ΠΠ»ΠΈΠ΅Π½Ρ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π·Π°ΠΏΡΡΠ΅Π½ ΡΠΎ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌΠΈ ΠΎΠΏΡΠΈΡΠΌΠΈ.
$ ./Client -h
Usage:
./Client
-h Print usage
-v Verbose
-u [url] Default URL: http://localhost:8000/api/json/v2
-m [method name]
Possible methods:
* systemInfo
* hardwareInfo
Π Π±Π°Π·ΠΎΠ²ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅:
$ ./Client -m systemInfo
Ok!
ΠΠ΄ΠΈΠ½ Π·Π°ΠΏΡΡΠΊ ΠΈΠ½ΠΈΡΠΈΠΈΡΡΠ΅Ρ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄Π½ΠΎΠ³ΠΎ (ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π³ΠΎ) ΠΌΠ΅ΡΠΎΠ΄Π°.
Π Π΅Π·ΡΠ»ΡΠ°Ρ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΠΌΠΎΡΡΠ΅ΡΡ ΡΠ΄Π΅Π»Π°Π² ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ Π²ΡΠ·ΠΎΠ².
$ curl http://localhost:8000/api/json/v2
Content-Type: application/json
{"42": {"systemInfo": {"ramTotal": 16669396992, "ramFree": 1191108608, "procsNumber": 8}, "hardwareInfo": {"Machine": "x86_64"}}}
Π‘Π΅ΡΠ²Π΅Ρ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²Π΅ΡΠ½ΡΡΡ ΠΏΠ΅ΡΠ΅Π΄Π°Π½Π½ΡΠ΅ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠ»ΠΈΠ΅Π½ΡΠ° Π΄Π°Π½Π½ΡΠ΅.
ΠΠ»Ρ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ ΠΌΠ΅ΡΠΎΠ΄Π° Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ Π² ΡΠ°ΠΉΠ»Π΅ methods.c
Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΌΠ΅ΡΠΎΠ΄Π°.
void someMethod(char* result)
{
// Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ
}
Π Π²ΠΊΠ»ΡΡΠΈΡΡ Π΅Π³ΠΎ Π² ΡΠΏΠΈΡΠΎΠΊ methods
.
static method_t methods[] =
{
{ "systemInfo", systemInfo },
{ "hardwareInfo", hardwareInfo },
{ "someMethod", someMethod }
/* other methods */
};