GET all the todos in JSON format

How to complete the challenge GET /api/todos JSON (200) to successfully GET all the todos in JSON format.

GET /api/todos JSON (200)

Issue a GET request on the /api/todos end point with an Accept header of application/json to receive results in JSON format

  • GET request will receive a response with all the todo items
    • e.g. GET /api/todos to get all the todo items
  • 200 is a success code, in this case it means the end point exists and the todo items were returned
  • Accept means that an Accept header was added to specify that the todos should be returned in JSON format
  • add the X-CHALLENGER header to track progress

Basic Instructions

  • Issue a GET request to end point "/api/todos"
    • if running locally that endpoint would be
      • https://apichallenges.com/api/todos
  • The request should have an Accept header specifying JSON format by using a value of application/json
  • The request should have an X-CHALLENGER header to track challenge completion
  • The response status code should be 200 when all the details are valid.
  • Check the body of the message has JSON format data
  • Check the content-type header in the response has application/json

Try it now

GET /api/todos with Accept: application/json to request JSON

Example Request

> GET /api/todos HTTP/1.1
> Host: apichallenges.com
> User-Agent: rest-client
> X-CHALLENGER: x-challenger-guid
> Accept: application/json

Example Response

< HTTP/1.1 200 OK
< Connection: close
< Date: Sun, 09 May 2021 11:07:48 GMT
< Content-Type: application/json
< 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:

{
    "todos": [
        {
            "id": 16,
            "title": "process payroll",
            "doneStatus": false,
            "description": ""
        },
        {
            "id": 15,
            "title": "pay invoices",
            "doneStatus": false,
            "description": ""
        }
    ]
}

Overview Video

Watch on YouTube: "Solution to GET todos in JSON format"

Patreon ad free version

Lessons Learned

  • Accept: application/json is an explicit request for JSON, not just acceptance of the server default.
  • Content-Type should confirm the negotiated response, but the body should still be parsed as JSON.
  • +json media types describe JSON-shaped bodies; they still need explicit server support.

Suggested Experiments

  • Compare Accept: application/json with Accept: */*; */* means any response format is acceptable, so check whether the server chooses JSON as the default.
  • Try Accept: application/*+json to ask for any structured +json media type, then compare the status code and Content-Type with the standard application/json response.
  • Try a specific +json media type such as application/problem+json or application/vnd.api+json; these still describe JSON bodies, but the API may reject them if it does not support that representation.
  • Send Accept: application/json, application/xml;q=0.5 and confirm that JSON is preferred over XML when both formats are acceptable.
Experiment with this endpoint