Matrix Prototype in Go to test the energy efficiency
# API
## Begriffserklärung
Persisted Data Unit (PDU): Are transmitted between homerservers of one room. Part of the history (persisted). reply needed. (mostly events)
Ephemeral Data Unit (EDU): Are transmitted between 2 homeservers. Not part of the history (not persisted). No reply needed. (for example user presence, typing notification, etc.)
Transaction: Collection of up to 50 PDUs and 100 EDUs
Query: HTTP GET Request. Not persisted
## Client-Server
### Users
Check Username Availability: GET /_matrix/client/r0/register/available
Register: POST /_matrix/client/r0/register
Login: POST /_matrix/client/r0/login
Logout: POST /_matrix/client/r0/logout
Deactivate: POST /_matrix/client/r0/account/deactivate
Change Password: POST /_matrix/client/r0/account/password
Sync (After Login): GET /_matrix/client/r0/sync
### Rooms
Create Room: POST /_matrix/client/r0/createRoom
Get Room Members: GET /_matrix/client/r0/rooms/{roomId}/members /
GET /_matrix/client/r0/rooms/{roomId}/joined_members
Join Room: POST /_matrix/client/r0/rooms/{roomId}/join
Leave Room: POST /_matrix/client/r0/rooms/{roomId}/leave
### Events
Create Event: PUT /_matrix/client/r0/rooms/{roomId}/send/{eventType}/{txnId}
Create State Event: PUT /_matrix/client/r0/rooms/{roomId}/state/{eventType}/{stateKey}
Change Event: PUT /_matrix/client/r0/rooms/{roomId}/redact/{eventId}/{txnId}
Get Events: GET /_matrix/client/r0/rooms/{roomId}/messages
Get State Events: GET /_matrix/client/r0/rooms/{roomId}/state
Get Event: GET /_matrix/client/r0/rooms/{roomId}/event/{eventId}
Get State Event: GET /_matrix/client/r0/rooms/{roomId}/state/{eventType}/{stateKey}
## Server-Server
### General
Resolve Server Name: GET /.well-known/matrix/server
Get Server Implementation: GET /_matrix/federation/v1/version
### Keys
Get Signing Key: GET /_matrix/key/v2/server/{keyId}
Get Signing Key from another Server: GET /_matrix/key/v2/query/{serverName}/{keyId}
Get Signing Keys from multiple Servers: POST /_matrix/key/v2/query
### Rooms
Get Prep Information for Join: GET /_matrix/federation/v1/make_join/{roomId}/{userId}
Join Room: PUT /_matrix/federation/v2/send_join/{roomId}/{eventId}
Get Prep Information for Leave: GET /_matrix/federation/v1/make_leave/{roomId}/{userId}
Leave Room: PUT /_matrix/federation/v2/send_leave/{roomId}/{eventId}
### Events
Get State: GET /_matrix/federation/v1/state/{roomId} /
GET /_matrix/federation/v1/state_ids/{roomId}
Get Event: GET /_matrix/federation/v1/event/{eventId}
Sync Events (trough transactions with multiple events): PUT /_matrix/federation/v1/send/{txnId}
Backfill: GET /_matrix/federation/v1/backfill/{roomId} /
POST /_matrix/federation/v1/get_missing_events/{roomId}