Our 3 software engineers rebuilt back-end API service for a monolithic to service-oriented micorservices to support our existing e-commerce site in this project. The service I built was scaled to meet the demands of production traffic with 8000RPS with < 40ms response time with 0% error rate.
Backend Development: Node.js | Express | Postgres | NGINX
Deployement: Docker | AWS EC2
Testing: Jest | SuperTest | K6 | Loader.io
Retrieves a list of questions for a particular product. This list does not include any reported questions
GET /qa/questions
Query Parameters
| Parameter | Type | Description |
|---|---|---|
| product_id | integer | Required ID of the question for which data should be returned |
| page | integer | Selects the page of results to return. Default 1. |
| count | integer | Specifies how many results per page to return. Default 5 |
Response: Status: 200 OK
Returns answers for a given question. This list does not include any reported answers
GET /qa/questions/:question_id/answers
Query Parameters
| Parameter | Type | Description |
|---|---|---|
| question_id | integer | Required ID of the question for which answers are needed |
Response: Status: 200 OK
Adds a question for the given product
POST /qa/questions
Query Parameters
| Parameter | Type | Description |
|---|---|---|
| body | text | Text of question being asked |
| name | text | Username for question asker |
| text | Email address for question asker | |
| product_id | integer | Required ID of the Product for which the question is posted |
Response: Status: 201 Created
Updates a question to show it was found helpful
PUT /qa/questions/:question_id/helpful
Query Parameters
| Parameter | Type | Description |
|---|---|---|
| question_id | integer | Required ID of the question to update |
Response: Status: 204 NO CONTENT
Updates a question to show it was reported. Note, this action does not delete the question, but the question will not be returned in the above GET request
PUT /qa/questions/:question_id/report
Query Parameters
| Parameter | Type | Description |
|---|---|---|
| question_id | integer | Required ID of the question to update |
Response: Status: 204 NO CONTENT
Updates an answer to show it was found helpful
PUT /qa/answers/:answer_id/helpful
Query Parameters
| Parameter | Type | Description |
|---|---|---|
| answer_id | integer | Required ID of the answer to update |
Response: Status: 204 NO CONTENT
Updates an answer to show it has been reported. Note, this action does not delete the answer, but the answer will not be returned in the above GET request
PUT /qa/answers/:answer_id/helpful
Query Parameters
| Parameter | Type | Description |
|---|---|---|
| answer_id | integer | Required ID of the answer to update |
Response: Status: 204 NO CONTENT
- Run
node db/schema.jsto create tables - Run
node db/importData.jsto import data from csv files (if deployed to cloud, run copyData-AWS-EC2.sql instead) - Run
node db/addIndex.jsto create indexes - After load testing APIs using K6, run
node db/deleteTestData.jsto delete load test data.
- Create database
- Create file named
schema.sqlcopy codes fromdb/awsSchema.sql - Create file name
importData.sqlcopy codes fromdb/awsImportData.sql - Run
psql -h localhost -U your-user-name -d your-cloud-database-name -f \schema.sql - Transfer the CSV files from loacal to cloud server
- Run
psql -h localhost -U your-user-name -d your-cloud-database-name-f \importData.sql`
- In the terminal inside, run
npm run serverto start server - Test by typing
http://localhost:8000/qa/questions?product_id=1in the Postman to see the response.
Please reference other API Services that make up the other part of the e-commerce app API:
-
Product Overviews by Yui Murayama
-
Reviews by Huan Tran






