Retrieving A Book By ID - Planning
Refer back to Chapter 6, The Bookstore API Endpoint Specifications, API Endpoint #6: Retrieve a Book Listing section for the API endpoint specifications.
1 - Route Name
Much like how we planned out the URI for retrieving all books, retrieving a single book is not too far off from that. From the specifications, it seems like this will be a GET
request that will fetch a single book by its ID. We can refer back to the sections under chapter 3 for guidelines, specifically the sections Method Verbs and URI Design.
The following URI should suffice.
GET /api/v1/books/:id
2 - Input Request
Similar to retrieving all books, there are none.
3 - Middleware
Similar to retrieving all books, there are none.
4 - Validation
Similar to retrieving all books, there are none.
5 - Domain
Similar to the retrieval of all books, we will be using the same 3 entities to orchestrate our domain logic.
bookModel
bookRepository
bookService
We will definitely use the bookRepository
and get it a method something like getById()
.
In the bookService
, we would want to have a method as well, perhaps, getBookById()
. Also, remember that we want to do some sort of validation to check if the book we are trying to retrieve exists. Recall that we must return a 404 in our response to indicate that a book with the specified ID by the client does not exist.
6 - Events
Similar to retrieving all books, there are none.
7 - Response(s)
There are 2 types of responses that could possibly return from this endpoint.
The first is the book with the specified ID if it does exist in the database.
{
"status": "success",
"code": 200,
"message": "Here is the book with the specified ID."
"data": {
"id": "61f88350745d83158f3c746d",
"title": "Harry Potter and the Goblet of Fire",
"description": "Mint condition, but will negotiate",
"price": 99,
"author": "J.K. Rowling",
"datePublished": "Sun Oct 10 2021 23:56:34 GMT-0400"
},
"errors": null
}
The second is a message indicating to the client that the book with the specified ID does not exist.
{
"status": "error",
"code": 404,
"message": "That book with the specified ID does not exist."
"data": null,
"errors": [
"Book listing not found."
]
}
Last updated