mirror of
https://github.com/matrix-org/matrix-spec
synced 2026-02-01 12:03:43 +01:00
Tweaks to intro, start using swagger APIs in the CS API section.
This commit is contained in:
parent
1cfe4f784f
commit
e561a663d3
|
|
@ -99,23 +99,23 @@ Architecture
|
||||||
------------
|
------------
|
||||||
|
|
||||||
Matrix defines APIs for synchronising extensible JSON objects known as
|
Matrix defines APIs for synchronising extensible JSON objects known as
|
||||||
``events`` between compatible clients, servers and services. Clients are
|
"events" between compatible clients, servers and services. Clients are
|
||||||
typically messaging/VoIP applications or IoT devices/hubs and communicate by
|
typically messaging/VoIP applications or IoT devices/hubs and communicate by
|
||||||
synchronising communication history with their ``homeserver`` using the
|
synchronising communication history with their "homeserver" using the
|
||||||
``Client-Server API``. Each homeserver stores the communication history and
|
"Client-Server API". Each homeserver stores the communication history and
|
||||||
account information for all of its clients, and shares data with the wider
|
account information for all of its clients, and shares data with the wider
|
||||||
Matrix ecosystem by synchronising communication history with other homeservers
|
Matrix ecosystem by synchronising communication history with other homeservers
|
||||||
and their clients.
|
and their clients.
|
||||||
|
|
||||||
Clients typically communicate with each other by emitting events in the
|
Clients typically communicate with each other by emitting events in the
|
||||||
context of a virtual ``room``. Room data is replicated across *all of the
|
context of a virtual "room". Room data is replicated across *all of the
|
||||||
homeservers* whose users are participating in a given room. As such, *no
|
homeservers* whose users are participating in a given room. As such, *no
|
||||||
single homeserver has control or ownership over a given room*. Homeservers
|
single homeserver has control or ownership over a given room*. Homeservers
|
||||||
model communication history as a partially ordered graph of events known as
|
model communication history as a partially ordered graph of events known as
|
||||||
the room's ``event graph``, which is synchronised with eventual consistency
|
the room's "event graph", which is synchronised with eventual consistency
|
||||||
between the participating servers using the ``Server-Server API``. This process
|
between the participating servers using the "Server-Server API". This process
|
||||||
of synchronising shared conversation history between homeservers run by
|
of synchronising shared conversation history between homeservers run by
|
||||||
different parties is called ``Federation``. Matrix optimises for the the
|
different parties is called "Federation". Matrix optimises for the the
|
||||||
Availability and Partitioned properties of CAP theorem at
|
Availability and Partitioned properties of CAP theorem at
|
||||||
the expense of Consistency.
|
the expense of Consistency.
|
||||||
|
|
||||||
|
|
@ -151,13 +151,13 @@ Users
|
||||||
~~~~~
|
~~~~~
|
||||||
|
|
||||||
Each client is associated with a user account, which is identified in Matrix
|
Each client is associated with a user account, which is identified in Matrix
|
||||||
using a unique "User ID". This ID is namespaced to the home server which
|
using a unique "User ID". This ID is namespaced to the homeserver which
|
||||||
allocated the account and has the form::
|
allocated the account and has the form::
|
||||||
|
|
||||||
@localpart:domain
|
@localpart:domain
|
||||||
|
|
||||||
The ``localpart`` of a user ID may be a user name, or an opaque ID identifying
|
The ``localpart`` of a user ID may be a user name, or an opaque ID identifying
|
||||||
this user. They are case-insensitive.
|
this user. The ``domain`` of a user ID is the domain of the homeserver.
|
||||||
|
|
||||||
.. TODO-spec
|
.. TODO-spec
|
||||||
- Need to specify precise grammar for Matrix IDs
|
- Need to specify precise grammar for Matrix IDs
|
||||||
|
|
@ -183,9 +183,9 @@ Event Graphs
|
||||||
.. _sect:event-graph:
|
.. _sect:event-graph:
|
||||||
|
|
||||||
Events exchanged in the context of a room are stored in a directed acyclic graph
|
Events exchanged in the context of a room are stored in a directed acyclic graph
|
||||||
(DAG) called an ``event graph``. The partial ordering of this graph gives the
|
(DAG) called an "event graph". The partial ordering of this graph gives the
|
||||||
chronological ordering of events within the room. Each event in the graph has a
|
chronological ordering of events within the room. Each event in the graph has a
|
||||||
list of zero or more ``parent`` events, which refer to any preceding events
|
list of zero or more "parent" events, which refer to any preceding events
|
||||||
which have no chronological successor from the perspective of the homeserver
|
which have no chronological successor from the perspective of the homeserver
|
||||||
which created the event.
|
which created the event.
|
||||||
|
|
||||||
|
|
@ -292,11 +292,10 @@ Each room can also have multiple "Room Aliases", which look like::
|
||||||
|
|
||||||
A room alias "points" to a room ID and is the human-readable label by which
|
A room alias "points" to a room ID and is the human-readable label by which
|
||||||
rooms are publicised and discovered. The room ID the alias is pointing to can
|
rooms are publicised and discovered. The room ID the alias is pointing to can
|
||||||
be obtained by visiting the domain specified. They are case-insensitive. Note
|
be obtained by visiting the domain specified. Note that the mapping from a room
|
||||||
that the mapping from a room alias to a room ID is not fixed, and may change
|
alias to a room ID is not fixed, and may change over time to point to a
|
||||||
over time to point to a different room ID. For this reason, Clients SHOULD
|
different room ID. For this reason, Clients SHOULD resolve the room alias to a
|
||||||
resolve the room alias to a room ID once and then use that ID on subsequent
|
room ID once and then use that ID on subsequent requests.
|
||||||
requests.
|
|
||||||
|
|
||||||
When resolving a room alias the server will also respond with a list of servers
|
When resolving a room alias the server will also respond with a list of servers
|
||||||
that are in the room that can be used to join via.
|
that are in the room that can be used to join via.
|
||||||
|
|
@ -339,12 +338,9 @@ Profiles
|
||||||
~~~~~~~~
|
~~~~~~~~
|
||||||
|
|
||||||
Users may publish arbitrary key/value data associated with their account - such
|
Users may publish arbitrary key/value data associated with their account - such
|
||||||
as a human readable ``display name``, a profile photo URL, contact information
|
as a human readable display name, a profile photo URL, contact information
|
||||||
(email address, phone numbers, website URLs etc).
|
(email address, phone numbers, website URLs etc).
|
||||||
|
|
||||||
In Client-Server API v2, profile data is typed using namespaced keys for
|
|
||||||
interoperability, much like events - e.g. ``m.profile.display_name``.
|
|
||||||
|
|
||||||
.. TODO
|
.. TODO
|
||||||
Actually specify the different types of data - e.g. what format are display
|
Actually specify the different types of data - e.g. what format are display
|
||||||
names allowed to be?
|
names allowed to be?
|
||||||
|
|
@ -431,13 +427,11 @@ Some requests have unique error codes:
|
||||||
:``M_BAD_PAGINATION``:
|
:``M_BAD_PAGINATION``:
|
||||||
Encountered when specifying bad pagination query parameters.
|
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
|
The Client-Server API typically uses ``HTTP POST`` to submit requests. This
|
||||||
requests are not idempotent. The C-S API also allows ``HTTP PUT`` to make
|
means these requests are not idempotent. The C-S API also allows ``HTTP PUT`` to
|
||||||
requests idempotent. In order to use a ``PUT``, paths should be suffixed with
|
make requests idempotent. In order to use a ``PUT``, paths should be suffixed
|
||||||
``/{txnId}``. ``{txnId}`` is a unique client-generated transaction ID which
|
with ``/{txnId}``. ``{txnId}`` is a unique client-generated transaction ID which
|
||||||
identifies the request, and is scoped to a given Client (identified by that
|
identifies the request, and is scoped to a given Client (identified by that
|
||||||
client's ``access_token``). Crucially, it **only** serves to identify new
|
client's ``access_token``). Crucially, it **only** serves to identify new
|
||||||
requests from retransmits. After the request has finished, the ``{txnId}``
|
requests from retransmits. After the request has finished, the ``{txnId}``
|
||||||
|
|
|
||||||
|
|
@ -528,7 +528,7 @@ Room events are split into two categories:
|
||||||
:Message events:
|
:Message events:
|
||||||
These are events which describe transient "once-off" activity in a room:
|
These are events which describe transient "once-off" activity in a room:
|
||||||
typically communication such as sending an instant message or setting up a
|
typically communication such as sending an instant message or setting up a
|
||||||
VoIP call. These used to be called 'non-state' events.
|
VoIP call.
|
||||||
|
|
||||||
This specification outlines several events, all with the event type prefix
|
This specification outlines several events, all with the event type prefix
|
||||||
``m.``. However, applications may wish to add their own type of event, and this
|
``m.``. However, applications may wish to add their own type of event, and this
|
||||||
|
|
@ -600,9 +600,6 @@ See `Room Events`_ for the ``m.`` event specification.
|
||||||
Syncing rooms
|
Syncing rooms
|
||||||
~~~~~~~~~~~~~
|
~~~~~~~~~~~~~
|
||||||
|
|
||||||
.. NOTE::
|
|
||||||
This section is a work in progress.
|
|
||||||
|
|
||||||
When a client logs in, they may have a list of rooms which they have already
|
When a client logs in, they may have a list of rooms which they have already
|
||||||
joined. These rooms may also have a list of events associated with them. The
|
joined. These rooms may also have a list of events associated with them. The
|
||||||
purpose of 'syncing' is to present the current room and event information in a
|
purpose of 'syncing' is to present the current room and event information in a
|
||||||
|
|
@ -620,45 +617,8 @@ presence events will also be returned. A single syncing API is provided:
|
||||||
onwards. The event stream cannot do this for a single room currently.
|
onwards. The event stream cannot do this for a single room currently.
|
||||||
As a result, commenting room-scoped initial sync at this time.
|
As a result, commenting room-scoped initial sync at this time.
|
||||||
|
|
||||||
The |initialSync|_ API contains the following keys:
|
|
||||||
|
|
||||||
``presence``
|
{{sync_http_api}}
|
||||||
Description:
|
|
||||||
Contains a list of presence information for users the client is interested
|
|
||||||
in.
|
|
||||||
Format:
|
|
||||||
A JSON array of ``m.presence`` events.
|
|
||||||
|
|
||||||
``end``
|
|
||||||
Description:
|
|
||||||
Contains an event stream token which can be used with the `Event Stream`_.
|
|
||||||
Format:
|
|
||||||
A string containing the event stream token.
|
|
||||||
|
|
||||||
``rooms``
|
|
||||||
Description:
|
|
||||||
Contains a list of room information for all rooms the client has joined,
|
|
||||||
and limited room information on rooms the client has been invited to.
|
|
||||||
Format:
|
|
||||||
A JSON array containing Room Information JSON objects.
|
|
||||||
|
|
||||||
Room Information:
|
|
||||||
Description:
|
|
||||||
Contains all state events for the room, along with a limited amount of
|
|
||||||
the most recent events, configured via the ``limit`` query
|
|
||||||
parameter. Also contains additional keys with room metadata, such as the
|
|
||||||
``room_id`` and the client's ``membership`` to the room.
|
|
||||||
Format:
|
|
||||||
A JSON object with the following keys:
|
|
||||||
``room_id``
|
|
||||||
A string containing the ID of the room being described.
|
|
||||||
``membership``
|
|
||||||
A string representing the client's membership status in this room.
|
|
||||||
``messages``
|
|
||||||
An event stream JSON object containing a ``chunk`` of recent
|
|
||||||
events (both state events and non-state events), along with an ``end`` token.
|
|
||||||
``state``
|
|
||||||
A JSON array containing all the current state events for this room.
|
|
||||||
|
|
||||||
Getting events for a room
|
Getting events for a room
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue