restful-ecommerce
Restful Ecommerce
Overview
A simple minimalistic ecommerce REST API built with Node.js and Express.js, showcasing three major functionalities:
- Authentication
- Products listing
- Order placements
- Access restrictions
Demo Users
Password
Access
admin@example.com
secret
Admin Access
user@example.com
secret
User Access
Database Schema Design
- Overview
- 1. 🚀 Getting Started
- 2. 🔒 Authentication
- 3. 🔖 API Versioning
- 3. 💚 HTTP Response Codes
- 4. 📝 License
1. 🚀 Getting Started
1.1 Prerequisites
To get started, ensure that you have the following installed on your local machine:
1.2. Run locally
-
Clone repository or clone your own fork
git clone https://github.com/devdbrandy/restful-ecommerce.git
-
Make a duplicate of
.env.example
and rename to.env
, then configure your credentials.
NB: After creating.env
file, ensure that you setAPP_PKEY
to any secret phrase you want. -
Install dependencies by running
npm i
ornpm install
on your terminal. -
Run migration:
npm run db:migrate
-
(Optional) Seed dummy data
npm run db:seed
-
Two npm scripts are availiable to spin up the app server:
-
npm run start
spin up the server without watching for any file changes (Requiresnpm run build
) -
npm run serve
watches for any file changes and reloads the server
-
1.3. Test Locally
To test or consume api locally, you can make use of Postman or Insomnia
1.4. Running Test
Test specs are implemented using jest.
Two npm scripts are available to run the test suite:
-
npm t
ornpm test
– Performs a single full test suite run, including jest code coverage reporting. Summary coverage reports are written to stdout, and detailed HTML reports are available in/coverage/lcov-report/index.html
-
npm run test:watch
– This watches for any file changes and runs the full test suite.
2. 🔒 Authentication
Access to restricted API endpoints requires an access token. To obtain your access token, make a request along with any dummy username
and password
credentials to /login
.
Sample Response:
POST http://localhost:3000/login HTTP/1.1 Accept: application/json HTTP/1.1 200 OK Content-Type: application/json { "success": true, "data": { "token": "...", } }
3. 🔖 API Versioning
The second part of the URI specifies the API version you wish to access in the format v{version_number}
.
For example, version 1 of the API (most current) is accessible via:
http://localhost:3000/api/v1
3. 💚 HTTP Response Codes
Each response will be returned with one of the following HTTP status codes:
-
200
OK
The request was successful -
400
Bad Request
There was a problem with the request (security, malformed) -
401
Unauthorized
The supplied API credentials are invalid -
403
Forbidden
The credentials provided do not have permissions to access the requested resource -
404
Not Found
An attempt was made to access a resource that does not exist in the API -
500
Server Error
An error on the server occurred
4. 📝 License
This project is open-sourced software licensed under the MIT license.