I worked with another software engineer to rebuild back-end API service from a monolithic to service-oriented microservices to support our existing e-commerce application in this project. The service I built was scaled to meet the demands of production traffic which is 1000rps with < 1s response time with 0% error rate.
Backend Development: Node.js, Express, Postgres, NGINX
Deployment: Docker, AWS EC2
Testing: Jest, SuperTest, K6, Loader.io, New Relic
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 schema.sql
- Run copyData.sql (if deployed to cloud, run copyData-AWS-EC2.sql instead)
- Run setPrimarykeySequence.sql
- Run createIndex.sql
- After load testing APIs using K6, run deleteK6TestData.sql to delete load test data.
- In the terminal inside, run
npm run start
to start server - Test by typing
http://localhost:3000/qa/questions
in the Postman to see the response.
Please reference Product Overviews API Services that make up the other part of the e-commerce app API:
- Product Overviews by Xinxin Li