mirror of
https://github.com/GothenburgBitFactory/taskwarrior.git
synced 2025-06-26 10:54:26 +02:00
221 lines
5.8 KiB
Markdown
221 lines
5.8 KiB
Markdown
---
|
||
title: "Taskwarrior - Request"
|
||
---
|
||
|
||
|
||
# Taskserver Message Format
|
||
|
||
The Taskserver accepts and emits only messages. These messages look somewhat
|
||
like email, as defined in [RFC821](https://tools.ietf.org/html/rfc821),
|
||
[RFC2822](https://tools.ietf.org/html/rfc2822).
|
||
|
||
The message format allows for data, metadata, and extensibility. This
|
||
combination allows the Taskserver to accommodate current and future needs. This
|
||
document describes the message format, and the supported message types.
|
||
|
||
|
||
## Requirements
|
||
|
||
In this document, we adopt the convention discussed in Section 1.3.2 of
|
||
[RFC1122](https://tools.ietf.org/html/rfc1122#page-16) of using the capitalized
|
||
words MUST, REQUIRED, SHOULD, RECOMMENDED, MAY, and OPTIONAL to define the
|
||
significance of each particular requirement specified in this document.
|
||
|
||
In brief: \"MUST\" (or \"REQUIRED\") means that the item is an absolute
|
||
requirement of the specification; \"SHOULD\" (or \"RECOMMENDED\") means there
|
||
may exist valid reasons for ignoring this item, but the full implications should
|
||
be understood before doing so; and \"MAY\" (or \"OPTIONAL\") means that this
|
||
item is optional, and may be omitted without careful consideration.
|
||
|
||
|
||
## Encoding
|
||
|
||
All messages are UTF8-encoded text.
|
||
|
||
|
||
## Message Format
|
||
|
||
This format is based on [RFC2822](https://tools.ietf.org/html/rfc2822),
|
||
\'Internet Message Format\'. Here is an example of the format:
|
||
|
||
<SIZE>
|
||
name: value
|
||
name2: value2
|
||
|
||
payload
|
||
|
||
There are three sections. The first is the size, which is a 4-byte, big- Endian,
|
||
binary byte count of the length of the message, including the 4 bytes for the
|
||
size.
|
||
|
||
The header section is a set of name/value pairs separated by newline characters
|
||
(U+000D). The name is separated from the value by \': \' (colon U+003A, space
|
||
U+0020) The header section is terminated by two consecutive newline (U+000D)
|
||
characters. All text is UTF8-encoded.
|
||
|
||
The payload section is arbitrary, and message type-specific. However, it is
|
||
still UTF8-encoded text.
|
||
|
||
|
||
## Message Requirements
|
||
|
||
Messages SHALL contain particular headers. Those are:
|
||
|
||
- type
|
||
- protocol
|
||
- client
|
||
|
||
The \'type\' value is what determines the interpretation of the payload.
|
||
|
||
The \'protocol\' value should be \'v1\', or any subsequently published protocol
|
||
version.
|
||
|
||
The \'client\' represent the client identifier, so that any special cases can be
|
||
handled. For example, an emergency fix that is client version-specific could be
|
||
released, to support users that have not updated their client, or perhaps the
|
||
client has not released a fix. The form of the \'version\' value is:
|
||
|
||
<product identifier> <version number>
|
||
|
||
As an example:
|
||
|
||
taskwarrior 2.3.0
|
||
|
||
DO NOT spoof any other software using this client value. If another client is
|
||
spoofed, then patches addressing protocol errors may break working software.
|
||
|
||
|
||
## Auth Data
|
||
|
||
Every request from the client SHALL contain \"auth\" information, which involves
|
||
these header entries:
|
||
|
||
org: <organization>
|
||
user: <user>
|
||
key: <key>
|
||
|
||
The user and org fields uniquely identify a user.
|
||
|
||
The key field is generated when a new server account is set up. It is a shared
|
||
secret, equivalent to a password, and should be protected.
|
||
|
||
Authentication failure can result in these errors:
|
||
|
||
- 430 Authentication failed
|
||
- 431 Account suspended
|
||
|
||
|
||
## Status Data
|
||
|
||
Every response from the Taskserver SHALL contain status data:
|
||
|
||
code: <code>
|
||
status: <status text>
|
||
|
||
The code is a numeric status indicator defined in the [Sync
|
||
Protocol](/docs/design/protocol).
|
||
|
||
|
||
## Payload Data
|
||
|
||
Payload data is optional, arbitrary and message type dependent. It is always
|
||
UTF8-encoded text.
|
||
|
||
|
||
## Message Types
|
||
|
||
The Taskserver supports several message types, thus providing a set of
|
||
primitives for use by clients.
|
||
|
||
It is expected that the number of supported ticket types will increase over
|
||
time.
|
||
|
||
|
||
## Sync Message
|
||
|
||
The \"sync\" message always originates from the client, but the response will
|
||
contain data from the server. A sync is therefore a single request with a single
|
||
response.
|
||
|
||
The \"sync\" message type MUST contain the following headers:
|
||
|
||
- type
|
||
- org
|
||
- user
|
||
- key
|
||
- client
|
||
- protocol
|
||
|
||
The \"sync\" message payload has this format:
|
||
|
||
<uuid>
|
||
<JSON task 1>
|
||
<JSON task 2>
|
||
...
|
||
<JSON task N>
|
||
|
||
Here is an example of a sync message:
|
||
|
||
<size>type: sync
|
||
org: <organization>
|
||
user: <user>
|
||
key: <key>
|
||
client: task 2.3.0
|
||
protocol: v1
|
||
|
||
2e4685f8-34bc-4f9b-b7ed-399388e182e1
|
||
{"description":"Test data","entry":"20130602T002341Z","status":"pending"}
|
||
|
||
The request contains the proper auth section, and the body contains the current
|
||
sync key followed by a newline characters (U+000D), then a list of
|
||
JSON-formatted tasks \[2\] each separated by a newline character (U+000D).
|
||
|
||
An example response message might be:
|
||
|
||
<size>type: response
|
||
client: taskd 1.0.0
|
||
protocol: v1
|
||
code: 200
|
||
status: Ok
|
||
|
||
45da7110-1bcc-4318-d33e-12267a774e0f
|
||
|
||
The status indicates success, and the payload contains zero remote task
|
||
modifications, followed by a sync key.
|
||
|
||
|
||
## Statistics Message
|
||
|
||
The message format іs simply:
|
||
|
||
<size>type: statistics
|
||
org: <Organization>
|
||
user: <User>
|
||
key: <Key>
|
||
client: taskd 1.0.0
|
||
protocol: v1
|
||
|
||
There is no payload. An example response message might be:
|
||
|
||
<size>type: response
|
||
client: taskd 1.0.0
|
||
protocol: v1
|
||
code: 200
|
||
status: Ok
|
||
average request bytes: 0
|
||
average response bytes: 0
|
||
average response time: 0.000000
|
||
errors: 0
|
||
idle: 1.000000
|
||
maximum response time: 0.000000
|
||
total bytes in: 0
|
||
total bytes out: 0
|
||
tps: 0.000000
|
||
transactions: 1
|
||
uptime: 28
|
||
|
||
There is no payload, and the results are in the header variables.
|
||
|
||
Note that the statistics gathered by the server are growing, which means new
|
||
values are occasionally added to the response message. Existing values will not
|
||
be removed.
|