mirror of
https://github.com/RetroShare/RetroShare.git
synced 2024-12-12 17:34:32 -05:00
ad1bc7f3b8
git-svn-id: http://svn.code.sf.net/p/retroshare/code/trunk@8047 b45a01b8-16f6-495d-af2f-9b41ad6348cc
68 lines
2.1 KiB
Markdown
68 lines
2.1 KiB
Markdown
New programming interface for Retroshare
|
|
========================================
|
|
|
|
* access to libretroshare for webinterfaces, QML and scripting
|
|
* client - server architecture.
|
|
* network friendly: transport messages over high latency and low bandwidth networks
|
|
* multiple clients: can use scripting and webinterface at the same time
|
|
* simple packet format: no special serialiser required
|
|
* simple protocol: one request creates one response. A requets does not depend on a previous request.
|
|
* automatic state change propagation: if a resource on the server changes, the clients will get notified
|
|
* no shared state: Client and server don't have to track what they send each other.
|
|
* works with all programming languages
|
|
|
|
How does it work?
|
|
-----------------
|
|
|
|
- Client sends a request: adress of a resource and optional parameters encoded as JSON
|
|
{
|
|
"method": "get",
|
|
"resource": ["peers"],
|
|
}
|
|
- Server sends a Response:
|
|
{
|
|
"returncode": "ok",
|
|
"statetoken": "ASDF",
|
|
"data": [...]
|
|
}
|
|
|
|
- Client asks if data is still valid
|
|
{
|
|
"method": "exec",
|
|
"resource": "statetokenservice"
|
|
"data": ["ASDF", "GHJK"]
|
|
}
|
|
- Server answers Client that statetoken "ASDF" expired
|
|
{
|
|
"returncode": "ok",
|
|
"data": ["ASDF"]
|
|
}
|
|
|
|
Transport
|
|
---------
|
|
|
|
A transport protocol transports requests and responses between client and server.
|
|
|
|
* tracks message boundaries, so messages don't get merged
|
|
* may be able to handle concurrent requests with out of order delivery of responses
|
|
* knows to which request a response belongs to
|
|
|
|
Transport could do encryption and authentication with a standardized protocol like SSH or TLS.
|
|
|
|
Ideas:
|
|
|
|
* request id + length + request data -> SSH -> TCP -> ...
|
|
* Websockets
|
|
* Retroshare Items
|
|
* Unix domain sockets
|
|
|
|
Currently only unencrypted http is implemented. libmicrohttpd (short MHD) is used as http server.
|
|
Can use a proxy to add TLS encryption.
|
|
|
|
Message encoding
|
|
----------------
|
|
|
|
Currently JSON, because it is already available in JavaScript and QML.
|
|
Other key-value encodings could be used as well.
|
|
Read more about basic data types of different languages (JavaScript, QML, Lua, C++) in ./ApiServer.cpp.
|