This is a simple task management application with JSON-based REST API. The project is written in Frege language and relevant stuffs, so you would be able to use it as a basic example of web application construction:
- Chinook: Lightweight web application framework
- Sirocco: JDBC wrapper for Frege
- frege.data.JSON: Standard library for JSON (de)serialization
I hope that this work helps you to enjoy heppy Frege coding!
The project is commited with Gradle wrapper in the repository, so what you have to do is execute:
git clone https://github.com/y-taka-23/restful-todo.git
cd restful-todo
./gradlew run
Then check http://localhost:4567/api/v1/tasks
, and you should see the empty JSON []
. Let's start with POST /api/v1/tasks
in the following.
Note that if you terminate the process (by for example Ctrl + C), the stored data will be lost. It is bacause that the application uses the in-memory mode of H2 database by default. To make your data persistent, revise src/main/frege/restfultodo/dataaccess/Connection.fr
from:
private dbUrl = "jdbc:h2:mem:restfultodo"
to:
private dbUrl = "jdbc:h2:PATH/TO/DUMPFILE"
Shows a list of registered tasks. You can also filter (un)completed tasks by the query parameter completed={true,false}
.
curl -X GET http://localhost:4567/api/v1/tasks
curl -X GET http://localhost:4567/api/v1/tasks?completed=false
HTTP/1.1 200 OK
Date: Sat, 07 May 2016 13:05:33 GMT
Content-Type: application/json
Transfer-Encoding: chunked
Server: Jetty(9.3.2.v20150730)
[
{
"id": 1,
"task": {
"title": "Iron the dishes",
"completed": true
}
},
{
"id": 2,
"task": {
"title": "Dust the dog",
"completed": false
}
},
{
"id": 3,
"task": {
"title": "Take salad out of the oven",
"completed": false
}
}
]
Creates a new task. Both of title
and completed
fields are required.
curl -X POST -H "Content-type: application/json" -d "{ \"title\": \"Iron the dishes\", \"completed\": false }" http://localhost:4567/api/v1/tasks
HTTP/1.1 201 Created
Date: Sat, 07 May 2016 13:03:57 GMT
Content-Type: application/json
Transfer-Encoding: chunked
Server: Jetty(9.3.2.v20150730)
{
"id": 1,
"task": {
"title": "Iron the dishes",
"completed": false
}
}
Shows the task of specified id
.
curl -X GET http://localhost:4567/api/v1/tasks/1
HTTP/1.1 200 OK
Date: Sat, 07 May 2016 12:59:21 GMT
Content-Type: application/json
Transfer-Encoding: chunked
Server: Jetty(9.3.2.v20150730)
{
"id": 1,
"task": {
"title": "Iron the dishes",
"completed": false
}
}
Updates the task of specified id
. The JSON format in request bodies is same as POST /api/v1/tasks
.
curl -X PUT -H "Content-type: application/json" -d "{ \"title\": \"Iron the dishes\", \"completed\": true }" http://localhost:4567/api/v1/tasks/1
Same as GET /api/v1/tasks/:id
.
Deletes the task of specified id
.
curl -X DELETE http://localhost:4567/api/v1/tasks/1
HTTP/1.1 204 No Content
Date: Sat, 07 May 2016 13:07:42 GMT
Content-Type: application/json
Server: Jetty(9.3.2.v20150730)
This project is released under the MIT license. For more details, see LICENSE file.