This repository has been archived on 2026-05-31. You can view files and clone it, but cannot push or open issues or pull requests.
powersync-core/doc/jsonrpc.qdoc
2019-04-08 13:55:15 +02:00

99 lines
4.6 KiB
Plaintext

/*!
\page jsonrpc.html
\title JSON-RPC API
\ingroup jsonrpc
\brief The JSON RPC interface represents a socket connection using plaintext string communication.
\chapter Description
The JSON RPC interface represents a socket connection using plaintext string communication.
Messages are exchanged using the JSON format. Please note that this is not a REST API as the
transport channel is not based on HTTP. It is an internal RPC mechanism to allow communication
between the guh Server and the main controller interface. This communication socket is not meant
to be exported to the outside of the of the system as it allows arbitrary commands to manipulate
the system.
The JSON message protocol communicates by exchanging JSON Objects with the following properties:
\list
\li \code "id": integer \endcode
The id should be a unique identifier for the message. Any server response will contain the
same id allowing to match responses to requests/commands. This parameter is mandatory.
\li \code "method": string \endcode
The method field holds the method to be executed. Methods are grouped into namespaces. The
method string consists of two parts, the namespace and the method name, separated by a dot.
This parameter is mandatory.
(Example: \c"JSONRPC.Introspect")
\li \code "params": object \endcode
The params contains any JSON object. This parameter is optional and differs according to
the requested method.
\endlist
\chapter Handshake
Once connected to the socket, the server will send immediatly a handshake message. The handshake message
is a JSON object and contains all relevant information about the server and the API in order to start
communicationg with the server.
Here is an example of the handshare:
\code
{
"id": 0,
"name": "guh",
"protocol version": "1.2",
"authenticationRequired": false,
"initialSetupRequired": false,
"pushButtonAuthAvailable": false,
"server": "guhIO",
"language": "de_DE",
"uuid": "{42842b0f-a7bb-4a94-b624-a55f31c5603e}",
"version": "0.8.3"
}
\endcode
\list
\li \code "id": int \endcode
The id in the handshake has always the value 0. This is the first message during connection.
\li \code "name": string \endcode
This field represents the name of the server you are connected to. This name is user defined an can be changed.
(Example: \c"JSONRPC.Introspect")
\li \code "protocol version": string \endcode
The field represents the API version of the server you are connected to. This should be used for API compatibility checks
\li \code "authenticationRequired": bool \endcode
If this property is true, a client must perform the authentication process before beeing able to interact with the API. See section \l{Authentication} for more information.
\li \code "initialSetupRequired": bool \endcode
This property indicates if the server was set up already. A server is set up if a user has been created. If the \tt authenticationRequired property is \tt{false}, this field can be ignored.
\li \code "pushButtonAuthAvailable": bool \endcode
This property indicates if the server has a running push-button agent and therefore the push-button authentication available. If the \tt authenticationRequired property is \tt{false}, this field can be ignored.
\li \code "server": string \endcode
This property holds the name of the server. This name can not be changed.
\li \code "language": string \endcode
This property holds the language of the server. The language can be changed in the settings.
\li \code "uuid": string \endcode
This property holds the UUID of the server and can be used as a unique identifier.
\li \code "version": string \endcode
This property holds the build version of the server.
\endlist
\chapter Authentication
The API has an authentication mechanism, which makes sure that no unauthorized network participent can perform actions or get information from the server. For using the authentication the \tt authenticationRequired property in the \l{Handshake}{handshake} must be \tt{true}.
\section2 Create a user
\section2 Authenticate
\chapter API
\include jsonrpc-api.qdoc
\section1 Newest JSON-RPC API
\quotefile tests/auto/api.json
*/