Adding documentation for streaming API. Fixing filtering bug
This commit is contained in:
parent
61ce15d94b
commit
aa2fa227e9
|
@ -10,6 +10,7 @@ Index
|
||||||
|
|
||||||
### Using the API
|
### Using the API
|
||||||
- [API documentation](Using-the-API/API.md)
|
- [API documentation](Using-the-API/API.md)
|
||||||
|
- [Streaming API documentation](Using-the-API/Streaming-API.md)
|
||||||
- [Testing the API with cURL](Using-the-API/Testing-with-cURL.md)
|
- [Testing the API with cURL](Using-the-API/Testing-with-cURL.md)
|
||||||
- [OAuth details](Using-the-API/OAuth-details.md)
|
- [OAuth details](Using-the-API/OAuth-details.md)
|
||||||
- [Tips for app developers](Using-the-API/Tips-for-app-developers.md)
|
- [Tips for app developers](Using-the-API/Tips-for-app-developers.md)
|
||||||
|
|
40
docs/Using-the-API/Streaming-API.md
Normal file
40
docs/Using-the-API/Streaming-API.md
Normal file
|
@ -0,0 +1,40 @@
|
||||||
|
Streaming API
|
||||||
|
=============
|
||||||
|
|
||||||
|
Your application can use a server-sent events endpoint to receive updates in real-time. Server-sent events is an incredibly simple transport method that relies entirely on chunked-encoding transfer, i.e. the HTTP connection is kept open and receives new data periodically.
|
||||||
|
|
||||||
|
### Endpoints:
|
||||||
|
|
||||||
|
**GET /api/v1/streaming/user**
|
||||||
|
|
||||||
|
Returns events that are relevant to the authorized user, i.e. home timeline and notifications
|
||||||
|
|
||||||
|
**GET /api/v1/streaming/public**
|
||||||
|
|
||||||
|
Returns all public statuses
|
||||||
|
|
||||||
|
**GET /api/v1/streaming/hashtag**
|
||||||
|
|
||||||
|
Returns all public statuses for a particular hashtag (query param `tag`)
|
||||||
|
|
||||||
|
### Stream contents
|
||||||
|
|
||||||
|
The stream will contain events as well as heartbeat comments. Lines that begin with a colon (`:`) can be ignored by parsers, they are simply there to keep the connection open. Events have this structure:
|
||||||
|
|
||||||
|
```
|
||||||
|
event: name
|
||||||
|
data: payload
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
[See MDN](https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events/Using_server-sent_events#Event_stream_format)
|
||||||
|
|
||||||
|
### Event types
|
||||||
|
|
||||||
|
|Event|Description|What's in the payload|
|
||||||
|
|-----|-----------|---------------------|
|
||||||
|
|`update`|A new status has appeared!|Status|
|
||||||
|
|`notification`|A new notification|Notification|
|
||||||
|
|`delete`|A status has been deleted|ID of the deleted status|
|
||||||
|
|
||||||
|
The payload is JSON-encoded.
|
|
@ -90,7 +90,9 @@ const streamFrom = (id, req, res, needsFiltering = false) => {
|
||||||
redisClient.on('message', (channel, message) => {
|
redisClient.on('message', (channel, message) => {
|
||||||
const { event, payload } = JSON.parse(message)
|
const { event, payload } = JSON.parse(message)
|
||||||
|
|
||||||
if (needsFiltering) {
|
// Only messages that may require filtering are statuses, since notifications
|
||||||
|
// are already personalized and deletes do not matter
|
||||||
|
if (needsFiltering && event === 'update') {
|
||||||
pgPool.connect((err, client, done) => {
|
pgPool.connect((err, client, done) => {
|
||||||
if (err) {
|
if (err) {
|
||||||
log.error(err)
|
log.error(err)
|
||||||
|
|
Reference in a new issue