This post and video shows how to complete the challenge POST /todos JSON to send a POST request to create a todo item with body and response in JSON format.
What are the API Challenges?
Our API Challenges Application has a fully functional cloud hosted API, and a set of challenges to work through.
POST /todos JSON
To create and amend items in a REST API we usually use a POST request. POST requests are defined as ‘partial’ requests in that they don’t need to have all the fields, but they need to have enough fields to be valid for the request.
Issue a POST request on the
/todosend point to create a todo using Content-Typeapplication/json, and Accepting only JSON ie. Accept header ofapplication/json
For this challenge we issue a request with an accept header specifying JSON and we will send the message as JSON so we set the content-type header as well.
POSTrequest means we will send information in the body of the message- e.g.
POST /todossends to the todos endpoint
- e.g.
create a todomeans that we will not include a todoid, so a new todo is createdContent-Typeapplication/jsonmeans set thecontent-typeheader toapplication/jsonbecause we are sending a JSON formatted messageAccept headerofapplication/jsonmeans set theacceptheader toapplication/jsonso the response is formatted as JSON- the body of the message will have to be a valid todo item, and we can see the format in the documentation, or by issuing a
GETrequest on the/todosendpoint - add the
X-CHALLENGERheader to track progress - we know it has been created when we receive a
201response - the body of the response should contain the full details of the
todocreated in JSON format
Basic Instructions
- First issue a
GETrequest on “/todos” with anacceptheader ofapplication/jsonto see the format of a todo in JSON format- or read the documentation at apichallenges.herokuapp.com/docs
- copy a todo from the response to edit as payload for the
POSTmessage
- Issue a
POSTrequest to end point “/todos”- if running locally that endpoint would be
http://localhost:4567/todos
- if running in the cloud that endpoint would be
https://apichallenges.herokuapp.com/todos
- if running locally that endpoint would be
- The request should have an
Acceptheader with the valueapplication/jsonbecause we want the response to be in JSON - The request should have an
Content-Typeheader with the valueapplication/jsonbecause our payload in the message is in JSON format - Use the
todothat you copied from theGETrequest, remembering to remove theidbecause when we create a todo, it will be issued with anidautomatically
We only need to use the minimum details, but could add a description if we wanted.
{
"title": "create todo process payroll",
"doneStatus": true,
"description": ""
}
- The request should have an
X-CHALLENGERheader to track challenge completion - The response status code should be
201when all the details are valid. - Check the body of the response has JSON formatted ’todo’ response
- this will contain the full details of the todo we created
- Check the
content-typeheader in the response hasapplication/jsonmatching the requested accept format
Extras:
- you might want to experiment with removing fields like ‘description’, what happens if you miss out fields?
- check the
Locationheader has the endpoint we can use to retrieve the todo, issue aGETon that endpoint to retrieve the details of the todo
Details
> POST /todos HTTP/1.1
> Host: apichallenges.herokuapp.com
> User-Agent: insomnia/2021.2.2
> X-CHALLENGER: x-challenger-guid
> Content-Type: application/json
> Accept: */*
> Content-Length: 106
| {
| "title": "create todo process payroll",
| "doneStatus": true,
| "description": ""
| }
< HTTP/1.1 201 Created
< Connection: close
< Date: Sat, 17 Jul 2021 13:34:23 GMT
< Content-Type: application/json
< Location: todos/237
< Access-Control-Allow-Origin: *
< Access-Control-Allow-Headers: *
< X-Challenger: x-challenger-guid
< Server: Jetty(9.4.z-SNAPSHOT)
< Via: 1.1 vegur
Example Response body:
{
"id": 237,
"title": "create todo process payroll",
"doneStatus": true,
"description": ""
}


