Develop a REST API that allows you to reserve a book. This API should be fully founctional with SQL calls to Neon Database.
The API should mirror the funtionality available at:
https://simple-books-api.glitch.me
Deploy your REST API is available on Vercel.
Note: Study Steps 11, 12, and 13 to learn how to build APIs. Note middleware (Step 13) should be used to implement authentication.
GET /status
Returns the status of the API.
GET /books
Returns a list of books.
Optional query parameters:
- type: fiction or non-fiction
- limit: a number between 1 and 20.
GET /books/:bookId
Retrieve detailed information about a book.
POST /orders
Allows you to submit a new order. Requires authentication.
The request body needs to be in JSON format and include the following properties:
bookId
- Integer - RequiredcustomerName
- String - Required
Example
POST /orders/
Authorization: Bearer <YOUR TOKEN>
{
"bookId": 1,
"customerName": "John"
}
The response body will contain the order Id.
GET /orders
Allows you to view all orders. Requires authentication.
GET /orders/:orderId
Allows you to view an existing order. Requires authentication.
PATCH /orders/:orderId
Update an existing order. Requires authentication.
The request body needs to be in JSON format and allows you to update the following properties:
customerName
- String
Example
PATCH /orders/PF6MflPDcuhWobZcgmJy5
Authorization: Bearer <YOUR TOKEN>
{
"customerName": "John"
}
DELETE /orders/:orderId
Delete an existing order. Requires authentication.
The request body needs to be empty.
Example
DELETE /orders/PF6MflPDcuhWobZcgmJy5
Authorization: Bearer <YOUR TOKEN>
To submit or view an order, you need to register your API client.
POST /api-clients/
The request body needs to be in JSON format and include the following properties:
clientName
- StringclientEmail
- String
Example
{
"clientName": "Postman",
"clientEmail": "valentin@example.com"
}
The response body will contain the access token. The access token is valid for 7 days.
Possible errors
Status code 409 - "API client already registered." Try changing the values for clientEmail
and clientName
to something else.