mirror of
https://git.anonymousland.org/anonymousland/synapse-product.git
synced 2024-12-29 08:46:13 -05:00
Flesh out API standards.
This commit is contained in:
parent
cc413be446
commit
898dde8812
@ -132,10 +132,87 @@ Identity
|
|||||||
|
|
||||||
API Standards
|
API Standards
|
||||||
-------------
|
-------------
|
||||||
- All HTTP[S]
|
All communication in Matrix is performed over HTTP[S] using a Content-Type of ``application/json``.
|
||||||
- Uses JSON as HTTP bodies
|
Any errors which occur on the Matrix API level MUST return a "standard error response". This is a
|
||||||
- Standard error response format { errcode: M_WHATEVER, error: "some message" }
|
JSON object which looks like::
|
||||||
- C-S API provides POST for operations, or PUT with txn IDs. Explain txn IDs.
|
|
||||||
|
{
|
||||||
|
"errcode": "<error code>",
|
||||||
|
"error": "<error message>"
|
||||||
|
}
|
||||||
|
|
||||||
|
The ``error`` string will be a human-readable error message, usually a sentence
|
||||||
|
explaining what went wrong. The ``errcode`` string will be a unique string which can be
|
||||||
|
used to handle an error message e.g. ``M_FORBIDDEN``. These error codes should have their
|
||||||
|
namespace first in ALL CAPS, followed by a single _. For example, if there was a custom
|
||||||
|
namespace ``com.mydomain.here``, and a ``FORBIDDEN`` code, the error code should look
|
||||||
|
like ``COM.MYDOMAIN.HERE_FORBIDDEN``. There may be additional keys depending on
|
||||||
|
the error, but the keys ``error`` and ``errcode`` MUST always be present.
|
||||||
|
|
||||||
|
Some standard error codes are below:
|
||||||
|
|
||||||
|
:``M_FORBIDDEN``:
|
||||||
|
Forbidden access, e.g. joining a room without permission, failed login.
|
||||||
|
|
||||||
|
:``M_UNKNOWN_TOKEN``:
|
||||||
|
The access token specified was not recognised.
|
||||||
|
|
||||||
|
:``M_BAD_JSON``:
|
||||||
|
Request contained valid JSON, but it was malformed in some way, e.g. missing
|
||||||
|
required keys, invalid values for keys.
|
||||||
|
|
||||||
|
:``M_NOT_JSON``:
|
||||||
|
Request did not contain valid JSON.
|
||||||
|
|
||||||
|
:``M_NOT_FOUND``:
|
||||||
|
No resource was found for this request.
|
||||||
|
|
||||||
|
Some requests have unique error codes:
|
||||||
|
|
||||||
|
:``M_USER_IN_USE``:
|
||||||
|
Encountered when trying to register a user ID which has been taken.
|
||||||
|
|
||||||
|
:``M_ROOM_IN_USE``:
|
||||||
|
Encountered when trying to create a room which has been taken.
|
||||||
|
|
||||||
|
:``M_BAD_PAGINATION``:
|
||||||
|
Encountered when specifying bad pagination query parameters.
|
||||||
|
|
||||||
|
:``M_LOGIN_EMAIL_URL_NOT_YET``:
|
||||||
|
Encountered when polling for an email link which has not been clicked yet.
|
||||||
|
|
||||||
|
The C-S API typically uses ``HTTP POST`` to submit requests. This means these requests
|
||||||
|
are not idempotent. The C-S API also allows ``HTTP PUT`` to make requests idempotent.
|
||||||
|
In order to use a ``PUT``, paths should be suffixed with ``/{txnId}``. ``{txnId}`` is a
|
||||||
|
client-generated transaction ID which identifies the request. Crucially, it **only**
|
||||||
|
serves to identify new requests from retransmits. After the request has finished, the
|
||||||
|
``{txnId}`` value should be changed (how is not specified, it could be a monotonically
|
||||||
|
increasing integer, etc). It is preferable to use ``HTTP PUT`` to make sure requests to
|
||||||
|
send messages do not get sent more than once should clients need to retransmit requests.
|
||||||
|
|
||||||
|
Valid requests look like::
|
||||||
|
|
||||||
|
POST /some/path/here
|
||||||
|
{
|
||||||
|
"key": "This is a post."
|
||||||
|
}
|
||||||
|
|
||||||
|
PUT /some/path/here/11
|
||||||
|
{
|
||||||
|
"key": "This is a put with a txnId of 11."
|
||||||
|
}
|
||||||
|
|
||||||
|
In contrast, these are invalid requests::
|
||||||
|
|
||||||
|
POST /some/path/here/11
|
||||||
|
{
|
||||||
|
"key": "This is a post, but it has a txnId."
|
||||||
|
}
|
||||||
|
|
||||||
|
PUT /some/path/here
|
||||||
|
{
|
||||||
|
"key": "This is a put but it is missing a txnId."
|
||||||
|
}
|
||||||
|
|
||||||
Receiving live updates on a client
|
Receiving live updates on a client
|
||||||
----------------------------------
|
----------------------------------
|
||||||
|
Loading…
Reference in New Issue
Block a user