news-server
An API centric news server. Uses Sequelize and mariaDB by default.
This server is available via docker hub at krgamestudios/news-server.
Setup
There are multiple ways to run this app - it can run on it's own via npm start
(for production) or npm run dev
(for development). it can also run inside docker using docker-compose up --build
- run node configure-script.js
to generate docker-compose.yml and startup.sql.
To generate an authorization token, use auth-server. A public-facing development auth-server is available here (tokens are valid for 10 minutes):
POST https://dev-auth.krgamestudios.com/auth/login HTTP/1.1
Content-Type: application/json
{
"email": "example@example.com",
"password": "helloworld"
}
API
//NOTE: GET will return an empty array if a specific article can't be found
//NOTE: you can add a "limit" query parameter to change the default limit
GET /news?limit=10
###
//DOCS: get latest news, up to a default limit, or specify the index "id"
GET /news/:id
###
//DOCS: get the news starting from the beginning, up to a default limit, or specify the index "id"
GET /news/archive/:id
//DOCS: result (if only a single article is specified, returns just that article rather than an array):
[
{
"index": index, //absolute index of the result
"title": title, //title of the article
"author": author, //author of the aricle
"body": body, //body of the article
"rendered": rendered //body rendered as HTML
"edits": edits //number of times this article has been edited
"createdAt": createdAt //time created
"updatedAt": updatedAt //time updated
},
...
]
###
//DOCS: get the latest metadata, up to a default limit, or specify the index "id"
GET /news/metadata/:id
###
//DOCS: get the metadata starting from the beginning, up to a default limit, or specify the index "id"
GET /news/archive/metadata/:id
//DOCS: result (if only a single article is specified, returns just that article rather than an array):
[
{
"index": index, //absolute index of the result
"title": title, //title of the article
"author": author //author of the article
"edits": edits //number of times this article has been edited
"createdAt": createdAt //time created
"updatedAt": updatedAt //time updated
},
...
]
###
//DOCS: send a formatted JSON object, returns new index on success, or error on failure
POST /news
Authorization: Bearer XXX
{
"title": title //title of the article
"author": author //author of the article
"body": body //body of the article
}
//DOCS: result (status 200 on success, otherwise an error status):
{
"index": index //new index of the article
}
###
//DOCS: similar to `POST /news`, but allows overwriting an existing article
PATCH /news/:id
Authorization: Bearer XXX
{
"title": title //title of the article, optional
"author": author //author of the article, optional
"body": body //body of the article, optional
}
//DOCS: result: status 200 on success, otherwise an error status
###
//DOCS: remove an article from the news feed
DELETE /news/:id
Authorization: Bearer XXX
//DOCS: result: status 200 on success, otherwise an error status
###