summaryrefslogtreecommitdiff
path: root/docs/api/channels-messages.md
diff options
context:
space:
mode:
Diffstat (limited to 'docs/api/channels-messages.md')
-rw-r--r--docs/api/channels-messages.md68
1 files changed, 60 insertions, 8 deletions
diff --git a/docs/api/channels-messages.md b/docs/api/channels-messages.md
index d032ac1..9ef4e66 100644
--- a/docs/api/channels-messages.md
+++ b/docs/api/channels-messages.md
@@ -8,7 +8,7 @@ stateDiagram-v2
[*] --> Active : POST /api/channels
Active --> Deleted : DELETE /api/channels/C1234
Active --> Deleted : Expiry
- Deleted --> [*]
+ Deleted --> [*] : Purge
```
```mermaid
@@ -19,14 +19,31 @@ stateDiagram-v2
[*] --> Sent : POST /api/channels/C1234
Sent --> Deleted : DELETE /api/messages/Mabcd
Sent --> Deleted : Expiry
- Deleted --> [*]
+ Deleted --> [*] : Purge
```
Messages allow logins to communicate with one another. Channels are the conversations to which those messages are sent.
Every channel has a unique name, chosen when the channel is created.
-Both channels and messages expire after a time, to prevent the service from consuming unlimited amounts of storage. Messages expire 90 days after being sent. Channels expire 90 days after the last message sent to them, or after creation if no messages are sent in that time.
+
+## Names
+
+<!-- This prose is duplicated in authentication.md. If you change it here, consider changing it there, too. -->
+The service handles channel names using two separate forms.
+
+The first form is as given in the request used to create the channel. This form of the channel name is used throughout the API, and the service will preserve the name as entered (other than applying normalization), so that users' preferences around capitalization and accent marks are preserved.
+
+The second form is a "canonical" form, used internally by the service to control uniqueness and match names to channels. The canonical form is both case-folded and normalized.
+
+The canonical form is not available to API clients, but its use has practical consequences. Names that differ only by case or only by code point sequence are treated as the same name. If the name is in use, changing the capitalization or changing the sequence of combining marks will not allow the creation of a second "identical" channel.
+
+
+## Expiry and purging
+
+Both channels and messages expire after a time. Messages expire 90 days after being sent. Channels expire 90 days after the last message sent to them, or after creation if no messages are sent in that time.
+
+Deleted channels and messages, including those that have expired, are temporarily retained by the service, to allow clients that are not connected to receive the corresponding deletion [events](./events.md). To limit storage growth, deleted channels and messages are purged from the service seven days after they were deleted.
## `POST /api/channels`
@@ -49,12 +66,12 @@ The request must have the following fields:
### Success
-This endpoint will respond with a status of `200 Okay` when successful. The body of the response will be a JSON object describing the new channel:
+This endpoint will respond with a status of `202 Accepted` when successful. The body of the response will be a JSON object describing the new channel:
```json
{
- "name": "a unique channel name",
"id": "C9876cyyz"
+ "name": "a unique channel name",
}
```
@@ -62,8 +79,12 @@ The response will have the following fields:
| Field | Type | Description |
|:-------|:-------|:--|
+| `id` | string | A unique identifier for the channel. This can be used to associate the channel with events, or to make API calls targeting the channel. |
| `name` | string | The channel's name. |
-| `id` | string | A unique identifier for the channel. This can be used to associate the channel with other events, or to make API calls targeting the channel. |
+
+The returned name may not be identical to the name requested, as the name will be converted to [normalization form C](http://www.unicode.org/reports/tr15/) automatically. The returned name will include this normalization; the service will use the normalized name elsewhere, and does not store the originally requested name.
+
+When completed, the service will emit a [channel created](events.md#channel-created) event with the channel's ID.
### Duplicate channel name
@@ -96,7 +117,31 @@ The request must have the following fields:
### Success
-This endpoint will respond with a status of `202 Accepted` when successful. The response will not include a body.
+This endpoint will respond with a status of `202 Accepted` when successful. The body of the response will be a JSON object describing the newly-sent message:
+
+```json
+{
+ "at": "2024-10-19T04:37:09.467325Z",
+ "channel": "Cfqdn1234",
+ "sender": "Labcd1234",
+ "id": "Mgh98yp75",
+ "body": "an elaborate example message"
+}
+```
+
+The response will have the following fields:
+
+| Field | Type | Description |
+|:----------|:----------|:--|
+| `at` | timestamp | The moment the message was sent. |
+| `channel` | string | The ID of the channel the message was sent to. |
+| `sender` | string | The ID of the login that sent the message. |
+| `id` | string | A unique identifier for the message. This can be used to associate the message with events, or to make API calls targeting the message. |
+| `body` | string | The message's body. |
+
+The returned message body may not be identical to the body as sent, as the body will be converted to [normalization form C](http://www.unicode.org/reports/tr15/) automatically. The returned body will include this normalization; the service will use the normalized body elsewhere, and does not store the originally submitted body.
+
+When completed, the service will emit a [message sent](events.md#message-sent) event with the message's ID.
### Invalid channel ID
@@ -105,7 +150,9 @@ This endpoint will respond with a status of `404 Not Found` if the channel ID is
## `DELETE /api/channels/:id`
-Deletes a channel (and all messages in it).
+Deletes a channel.
+
+Deleting a channel prevents it from receiving any further messages, and deletes the messages it contains at that point.
This endpoint requires the following path parameter:
@@ -117,6 +164,9 @@ This endpoint requires the following path parameter:
This endpoint will respond with a status of `202 Accepted` when successful. The response will not include a body.
+When completed, the service will emit a [channel deleted](events.md#channel-deleted) event with the channel's ID. In addition, the service will emit a [message deleted](events.md#message-deleted) event for each message deleted.
+
+
### Invalid channel ID
This endpoint will respond with a status of `404 Not Found` if the channel ID is not valid.
@@ -136,6 +186,8 @@ This endpoint requires the following path parameter:
This endpoint will respond with a status of `202 Accepted` when successful. The response will not include a body.
+When completed, the service will emit a [message deleted](events.md#message-deleted) event with the channel's ID.
+
### Invalid message ID
This endpoint will respond with a status of `404 Not Found` if the message ID is not valid.