Repository files navigation

Echo Service - Flask Mock Endpoint Creator

Table of Contents

Overview

The Echo Service is a Flask application designed to allow clients to create mock endpoints with pre-defined responses. It offers flexibility in creating, modifying, and deleting these mock endpoints.

Design Choices

  • Framework : I have used the Flask framework due to its simplicity and because it's a lightweight framework.
  • Aws Architecture : For deploying Flask application on AWS , we choose ECS with AWS Fargate.
  • Data Classes: To ensure type safety and better documentation, Python data classes were used to define the data models.
  • Error Handling: Custom error handlers were implemented to provide detailed and user-friendly error messages.
  • Logging: Standard Python logging was implemented for easy troubleshooting and understanding the system flow.
  • Infrastructure-as-Code (IaC): The application is designed to be deployed on AWS using Terraform.
  • Containerization : Docker ensures that the application runs uniformly across different environments by packaging the app and its dependencies together

AWS Architecture Choices

  • I had three main options for deploying my flask application on Aws:
  • 1)AWS Lambda with API Gateway - If you want to minimize maintenance and your traffic is sporadic, AWS Lambda is compelling for its simplicity
  • 2)ECS with AWS Fargate - If you need fine-grained control, predictable scaling and want predictable costs, ECS with Fargate is a strong contender
  • 3)AWS Elastic Beanstalk - For generalized solutions or when starting out, Elastic Beanstalk is a balanced choice

Architecture

  • The application follows the MVC pattern with a slight deviation given Flask's architectural preferences.
  • Model: Defined using Python data classes in models.py.
  • View: All endpoint functions are defined in views.py.
  • Controller: While Flask merges views and controllers, additional business logic can be added in separate controllers/services if needed.
  • Error handling is modularized in errors.py.
  • The application is designed to be stateless, allowing it to scale horizontally if deployed in a cloud environment.

Terraform Architecture

Using Infrastructure as Code (IaC) with Terraform provides a flexible and repeatable deployment process. This application is designed to be deployed on AWS, leveraging various services.

AWS Resources

  • Virtual Private Cloud (VPC): Provides a secure and isolated environment for resources.
  • High Availability with Subnets: By deploying the application across multiple subnets in different availability zones, we ensure that the application remains available even if one of the AWS data centers fails.
  • Internet Gateway: To allow the Flask application to communicate with the external world, for example, to fetch updates or external APIs.
  • ECS with Fargate: Used to run the Flask application in containers, without managing underlying infrastructure.
  • Elastic Load Balancer (ELB): Distributes incoming application traffic across multiple targets.
  • IAM Roles and Policies: Gives permissions to AWS services to operate on your behalf.
  • Security Groups: Acts as a virtual firewall, controlling incoming and outgoing traffic.
  • Auto-Scaling : Automatically adjusts the number of ECS tasks based on defined metrics, ensuring application responsiveness during traffic surges and efficient resource usage during lulls.
  • CloudWatch Logging and Dashboard: Monitors application performance and health, aggregating logs and metrics to offer insights and facilitate troubleshooting

Deployment

  1. Ensure AWS CLI is set up and credentials are configured.
  2. Initialize Terraform: terraform init
  3. Apply the configuration: terraform apply

Cleanup

To prevent unnecessary costs, destroy the resources when done: terraform destroy

Setup and Installation

  1. Unzip the given zip file.
  2. Navigate to the project folder.
  3. Install the required packages: pip install -r requirements.txt.
  4. Run the application locally: python main.py.
  5. For Docker setup:
    • Build the Docker image: docker build -t echo-service ..
    • Run the Docker container: docker run -p 5000:5000 echo-service.
  6. Ensure that you build the Docker image and push it to a container registry (in our case its AWS Elastic Container Registry).
  7. The var.docker_image_url in your Terraform code should then be set to the URL of this pushed image

Usage

Detailed API documentation is provided in the api_docs.md file. The primary endpoints are:

  • POST /endpoints: Create a new mock endpoint.
  • GET /endpoints: List all the created mock endpoints.
  • PATCH /endpoints/:id: Update an existing mock endpoint.
  • DELETE /endpoints/:id: Delete an existing mock endpoint.
  • The created mock endpoints can be accessed via their defined paths and HTTP methods.

Testing

Tests are written using pytest.

  1. Navigate to the root project folder.
  2. Run the tests: pytest.

Future Enhancements

  1. Database Integration: Integrate a database to persistently store the mock endpoints.
  2. Authentication & Authorization: Integrate a complete Auth system.
  3. Multi-Stage-Dockerfile: Multi-stage builds are used in Docker to minimize the final image size, typically by separating the build environment from the run environment. This is especially useful when building binaries from source code, but can also help in Python applications by excluding build tools and other unnecessary files. For a Flask application, the benefit of multi-stage builds can be minimal since Python is an interpreted language and doesn't generate separate binaries, but it still can be useful in specific contexts.Implement rate limiting to prevent abuse of the service.
  4. Queue Service (RabbitMQ): Implement a messaging system like RabbitMQ to handle asynchronous tasks, ensuring the application remains responsive even under high loads.
  5. Caching Mechanism: Integrate caching solutions like Redis or Memcached to boost performance and reduce database load.
  6. Background Workers: Use tools like Celery with RabbitMQ as the message broker to process background jobs, improving response times and offloading non-immediate processing tasks.

About

The Echo Service is a Flask application designed to allow clients to create mock endpoints with pre-defined responses. It offers flexibility in creating, modifying, and deleting these mock endpoints.

Topics

Resources

Stars

2 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

Echo Service - Flask Mock Endpoint Creator

Table of Contents

Overview

The Echo Service is a Flask application designed to allow clients to create mock endpoints with pre-defined responses. It offers flexibility in creating, modifying, and deleting these mock endpoints.

Design Choices

  • Framework : I have used the Flask framework due to its simplicity and because it's a lightweight framework.
  • Aws Architecture : For deploying Flask application on AWS , we choose ECS with AWS Fargate.
  • Data Classes: To ensure type safety and better documentation, Python data classes were used to define the data models.
  • Error Handling: Custom error handlers were implemented to provide detailed and user-friendly error messages.
  • Logging: Standard Python logging was implemented for easy troubleshooting and understanding the system flow.
  • Infrastructure-as-Code (IaC): The application is designed to be deployed on AWS using Terraform.
  • Containerization : Docker ensures that the application runs uniformly across different environments by packaging the app and its dependencies together

AWS Architecture Choices

  • I had three main options for deploying my flask application on Aws:
  • 1)AWS Lambda with API Gateway - If you want to minimize maintenance and your traffic is sporadic, AWS Lambda is compelling for its simplicity
  • 2)ECS with AWS Fargate - If you need fine-grained control, predictable scaling and want predictable costs, ECS with Fargate is a strong contender
  • 3)AWS Elastic Beanstalk - For generalized solutions or when starting out, Elastic Beanstalk is a balanced choice

Architecture

  • The application follows the MVC pattern with a slight deviation given Flask's architectural preferences.
  • Model: Defined using Python data classes in models.py.
  • View: All endpoint functions are defined in views.py.
  • Controller: While Flask merges views and controllers, additional business logic can be added in separate controllers/services if needed.
  • Error handling is modularized in errors.py.
  • The application is designed to be stateless, allowing it to scale horizontally if deployed in a cloud environment.

Terraform Architecture

Using Infrastructure as Code (IaC) with Terraform provides a flexible and repeatable deployment process. This application is designed to be deployed on AWS, leveraging various services.

AWS Resources

  • Virtual Private Cloud (VPC): Provides a secure and isolated environment for resources.
  • High Availability with Subnets: By deploying the application across multiple subnets in different availability zones, we ensure that the application remains available even if one of the AWS data centers fails.
  • Internet Gateway: To allow the Flask application to communicate with the external world, for example, to fetch updates or external APIs.
  • ECS with Fargate: Used to run the Flask application in containers, without managing underlying infrastructure.
  • Elastic Load Balancer (ELB): Distributes incoming application traffic across multiple targets.
  • IAM Roles and Policies: Gives permissions to AWS services to operate on your behalf.
  • Security Groups: Acts as a virtual firewall, controlling incoming and outgoing traffic.
  • Auto-Scaling : Automatically adjusts the number of ECS tasks based on defined metrics, ensuring application responsiveness during traffic surges and efficient resource usage during lulls.
  • CloudWatch Logging and Dashboard: Monitors application performance and health, aggregating logs and metrics to offer insights and facilitate troubleshooting

Deployment

  1. Ensure AWS CLI is set up and credentials are configured.
  2. Initialize Terraform: terraform init
  3. Apply the configuration: terraform apply

Cleanup

To prevent unnecessary costs, destroy the resources when done: terraform destroy

Setup and Installation

  1. Unzip the given zip file.
  2. Navigate to the project folder.
  3. Install the required packages: pip install -r requirements.txt.
  4. Run the application locally: python main.py.
  5. For Docker setup:
    • Build the Docker image: docker build -t echo-service ..
    • Run the Docker container: docker run -p 5000:5000 echo-service.
  6. Ensure that you build the Docker image and push it to a container registry (in our case its AWS Elastic Container Registry).
  7. The var.docker_image_url in your Terraform code should then be set to the URL of this pushed image

Usage

Detailed API documentation is provided in the api_docs.md file. The primary endpoints are:

  • POST /endpoints: Create a new mock endpoint.
  • GET /endpoints: List all the created mock endpoints.
  • PATCH /endpoints/:id: Update an existing mock endpoint.
  • DELETE /endpoints/:id: Delete an existing mock endpoint.
  • The created mock endpoints can be accessed via their defined paths and HTTP methods.

Testing

Tests are written using pytest.

  1. Navigate to the root project folder.
  2. Run the tests: pytest.

Future Enhancements

  1. Database Integration: Integrate a database to persistently store the mock endpoints.
  2. Authentication & Authorization: Integrate a complete Auth system.
  3. Multi-Stage-Dockerfile: Multi-stage builds are used in Docker to minimize the final image size, typically by separating the build environment from the run environment. This is especially useful when building binaries from source code, but can also help in Python applications by excluding build tools and other unnecessary files. For a Flask application, the benefit of multi-stage builds can be minimal since Python is an interpreted language and doesn't generate separate binaries, but it still can be useful in specific contexts.Implement rate limiting to prevent abuse of the service.
  4. Queue Service (RabbitMQ): Implement a messaging system like RabbitMQ to handle asynchronous tasks, ensuring the application remains responsive even under high loads.
  5. Caching Mechanism: Integrate caching solutions like Redis or Memcached to boost performance and reduce database load.
  6. Background Workers: Use tools like Celery with RabbitMQ as the message broker to process background jobs, improving response times and offloading non-immediate processing tasks.

About

The Echo Service is a Flask application designed to allow clients to create mock endpoints with pre-defined responses. It offers flexibility in creating, modifying, and deleting these mock endpoints.

Topics

Resources

Stars

2 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Echo Service - Flask Mock Endpoint Creator

Table of Contents

Overview

The Echo Service is a Flask application designed to allow clients to create mock endpoints with pre-defined responses. It offers flexibility in creating, modifying, and deleting these mock endpoints.

Design Choices

  • Framework : I have used the Flask framework due to its simplicity and because it's a lightweight framework.
  • Aws Architecture : For deploying Flask application on AWS , we choose ECS with AWS Fargate.
  • Data Classes: To ensure type safety and better documentation, Python data classes were used to define the data models.
  • Error Handling: Custom error handlers were implemented to provide detailed and user-friendly error messages.
  • Logging: Standard Python logging was implemented for easy troubleshooting and understanding the system flow.
  • Infrastructure-as-Code (IaC): The application is designed to be deployed on AWS using Terraform.
  • Containerization : Docker ensures that the application runs uniformly across different environments by packaging the app and its dependencies together

AWS Architecture Choices

  • I had three main options for deploying my flask application on Aws:
  • 1)AWS Lambda with API Gateway - If you want to minimize maintenance and your traffic is sporadic, AWS Lambda is compelling for its simplicity
  • 2)ECS with AWS Fargate - If you need fine-grained control, predictable scaling and want predictable costs, ECS with Fargate is a strong contender
  • 3)AWS Elastic Beanstalk - For generalized solutions or when starting out, Elastic Beanstalk is a balanced choice

Architecture

  • The application follows the MVC pattern with a slight deviation given Flask's architectural preferences.
  • Model: Defined using Python data classes in models.py.
  • View: All endpoint functions are defined in views.py.
  • Controller: While Flask merges views and controllers, additional business logic can be added in separate controllers/services if needed.
  • Error handling is modularized in errors.py.
  • The application is designed to be stateless, allowing it to scale horizontally if deployed in a cloud environment.

Terraform Architecture

Using Infrastructure as Code (IaC) with Terraform provides a flexible and repeatable deployment process. This application is designed to be deployed on AWS, leveraging various services.

AWS Resources

  • Virtual Private Cloud (VPC): Provides a secure and isolated environment for resources.
  • High Availability with Subnets: By deploying the application across multiple subnets in different availability zones, we ensure that the application remains available even if one of the AWS data centers fails.
  • Internet Gateway: To allow the Flask application to communicate with the external world, for example, to fetch updates or external APIs.
  • ECS with Fargate: Used to run the Flask application in containers, without managing underlying infrastructure.
  • Elastic Load Balancer (ELB): Distributes incoming application traffic across multiple targets.
  • IAM Roles and Policies: Gives permissions to AWS services to operate on your behalf.
  • Security Groups: Acts as a virtual firewall, controlling incoming and outgoing traffic.
  • Auto-Scaling : Automatically adjusts the number of ECS tasks based on defined metrics, ensuring application responsiveness during traffic surges and efficient resource usage during lulls.
  • CloudWatch Logging and Dashboard: Monitors application performance and health, aggregating logs and metrics to offer insights and facilitate troubleshooting

Deployment

  1. Ensure AWS CLI is set up and credentials are configured.
  2. Initialize Terraform: terraform init
  3. Apply the configuration: terraform apply

Cleanup

To prevent unnecessary costs, destroy the resources when done: terraform destroy

Setup and Installation

  1. Unzip the given zip file.
  2. Navigate to the project folder.
  3. Install the required packages: pip install -r requirements.txt.
  4. Run the application locally: python main.py.
  5. For Docker setup:
    • Build the Docker image: docker build -t echo-service ..
    • Run the Docker container: docker run -p 5000:5000 echo-service.
  6. Ensure that you build the Docker image and push it to a container registry (in our case its AWS Elastic Container Registry).
  7. The var.docker_image_url in your Terraform code should then be set to the URL of this pushed image

Usage

Detailed API documentation is provided in the api_docs.md file. The primary endpoints are:

  • POST /endpoints: Create a new mock endpoint.
  • GET /endpoints: List all the created mock endpoints.
  • PATCH /endpoints/:id: Update an existing mock endpoint.
  • DELETE /endpoints/:id: Delete an existing mock endpoint.
  • The created mock endpoints can be accessed via their defined paths and HTTP methods.

Testing

Tests are written using pytest.

  1. Navigate to the root project folder.
  2. Run the tests: pytest.

Future Enhancements

  1. Database Integration: Integrate a database to persistently store the mock endpoints.
  2. Authentication & Authorization: Integrate a complete Auth system.
  3. Multi-Stage-Dockerfile: Multi-stage builds are used in Docker to minimize the final image size, typically by separating the build environment from the run environment. This is especially useful when building binaries from source code, but can also help in Python applications by excluding build tools and other unnecessary files. For a Flask application, the benefit of multi-stage builds can be minimal since Python is an interpreted language and doesn't generate separate binaries, but it still can be useful in specific contexts.Implement rate limiting to prevent abuse of the service.
  4. Queue Service (RabbitMQ): Implement a messaging system like RabbitMQ to handle asynchronous tasks, ensuring the application remains responsive even under high loads.
  5. Caching Mechanism: Integrate caching solutions like Redis or Memcached to boost performance and reduce database load.
  6. Background Workers: Use tools like Celery with RabbitMQ as the message broker to process background jobs, improving response times and offloading non-immediate processing tasks.

About

The Echo Service is a Flask application designed to allow clients to create mock endpoints with pre-defined responses. It offers flexibility in creating, modifying, and deleting these mock endpoints.

Topics

Resources

Stars

2 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Echo Service - Flask Mock Endpoint Creator

Table of Contents

Overview

The Echo Service is a Flask application designed to allow clients to create mock endpoints with pre-defined responses. It offers flexibility in creating, modifying, and deleting these mock endpoints.

Design Choices

  • Framework : I have used the Flask framework due to its simplicity and because it's a lightweight framework.
  • Aws Architecture : For deploying Flask application on AWS , we choose ECS with AWS Fargate.
  • Data Classes: To ensure type safety and better documentation, Python data classes were used to define the data models.
  • Error Handling: Custom error handlers were implemented to provide detailed and user-friendly error messages.
  • Logging: Standard Python logging was implemented for easy troubleshooting and understanding the system flow.
  • Infrastructure-as-Code (IaC): The application is designed to be deployed on AWS using Terraform.
  • Containerization : Docker ensures that the application runs uniformly across different environments by packaging the app and its dependencies together

AWS Architecture Choices

  • I had three main options for deploying my flask application on Aws:
  • 1)AWS Lambda with API Gateway - If you want to minimize maintenance and your traffic is sporadic, AWS Lambda is compelling for its simplicity
  • 2)ECS with AWS Fargate - If you need fine-grained control, predictable scaling and want predictable costs, ECS with Fargate is a strong contender
  • 3)AWS Elastic Beanstalk - For generalized solutions or when starting out, Elastic Beanstalk is a balanced choice

Architecture

  • The application follows the MVC pattern with a slight deviation given Flask's architectural preferences.
  • Model: Defined using Python data classes in models.py.
  • View: All endpoint functions are defined in views.py.
  • Controller: While Flask merges views and controllers, additional business logic can be added in separate controllers/services if needed.
  • Error handling is modularized in errors.py.
  • The application is designed to be stateless, allowing it to scale horizontally if deployed in a cloud environment.

Terraform Architecture

Using Infrastructure as Code (IaC) with Terraform provides a flexible and repeatable deployment process. This application is designed to be deployed on AWS, leveraging various services.

AWS Resources

  • Virtual Private Cloud (VPC): Provides a secure and isolated environment for resources.
  • High Availability with Subnets: By deploying the application across multiple subnets in different availability zones, we ensure that the application remains available even if one of the AWS data centers fails.
  • Internet Gateway: To allow the Flask application to communicate with the external world, for example, to fetch updates or external APIs.
  • ECS with Fargate: Used to run the Flask application in containers, without managing underlying infrastructure.
  • Elastic Load Balancer (ELB): Distributes incoming application traffic across multiple targets.
  • IAM Roles and Policies: Gives permissions to AWS services to operate on your behalf.
  • Security Groups: Acts as a virtual firewall, controlling incoming and outgoing traffic.
  • Auto-Scaling : Automatically adjusts the number of ECS tasks based on defined metrics, ensuring application responsiveness during traffic surges and efficient resource usage during lulls.
  • CloudWatch Logging and Dashboard: Monitors application performance and health, aggregating logs and metrics to offer insights and facilitate troubleshooting

Deployment

  1. Ensure AWS CLI is set up and credentials are configured.
  2. Initialize Terraform: terraform init
  3. Apply the configuration: terraform apply

Cleanup

To prevent unnecessary costs, destroy the resources when done: terraform destroy

Setup and Installation

  1. Unzip the given zip file.
  2. Navigate to the project folder.
  3. Install the required packages: pip install -r requirements.txt.
  4. Run the application locally: python main.py.
  5. For Docker setup:
    • Build the Docker image: docker build -t echo-service ..
    • Run the Docker container: docker run -p 5000:5000 echo-service.
  6. Ensure that you build the Docker image and push it to a container registry (in our case its AWS Elastic Container Registry).
  7. The var.docker_image_url in your Terraform code should then be set to the URL of this pushed image

Usage

Detailed API documentation is provided in the api_docs.md file. The primary endpoints are:

  • POST /endpoints: Create a new mock endpoint.
  • GET /endpoints: List all the created mock endpoints.
  • PATCH /endpoints/:id: Update an existing mock endpoint.
  • DELETE /endpoints/:id: Delete an existing mock endpoint.
  • The created mock endpoints can be accessed via their defined paths and HTTP methods.

Testing

Tests are written using pytest.

  1. Navigate to the root project folder.
  2. Run the tests: pytest.

Future Enhancements

  1. Database Integration: Integrate a database to persistently store the mock endpoints.
  2. Authentication & Authorization: Integrate a complete Auth system.
  3. Multi-Stage-Dockerfile: Multi-stage builds are used in Docker to minimize the final image size, typically by separating the build environment from the run environment. This is especially useful when building binaries from source code, but can also help in Python applications by excluding build tools and other unnecessary files. For a Flask application, the benefit of multi-stage builds can be minimal since Python is an interpreted language and doesn't generate separate binaries, but it still can be useful in specific contexts.Implement rate limiting to prevent abuse of the service.
  4. Queue Service (RabbitMQ): Implement a messaging system like RabbitMQ to handle asynchronous tasks, ensuring the application remains responsive even under high loads.
  5. Caching Mechanism: Integrate caching solutions like Redis or Memcached to boost performance and reduce database load.
  6. Background Workers: Use tools like Celery with RabbitMQ as the message broker to process background jobs, improving response times and offloading non-immediate processing tasks.

About

The Echo Service is a Flask application designed to allow clients to create mock endpoints with pre-defined responses. It offers flexibility in creating, modifying, and deleting these mock endpoints.

Topics

Resources

Stars

2 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

Echo Service - Flask Mock Endpoint Creator

Table of Contents

Overview

The Echo Service is a Flask application designed to allow clients to create mock endpoints with pre-defined responses. It offers flexibility in creating, modifying, and deleting these mock endpoints.

Design Choices

  • Framework : I have used the Flask framework due to its simplicity and because it's a lightweight framework.
  • Aws Architecture : For deploying Flask application on AWS , we choose ECS with AWS Fargate.
  • Data Classes: To ensure type safety and better documentation, Python data classes were used to define the data models.
  • Error Handling: Custom error handlers were implemented to provide detailed and user-friendly error messages.
  • Logging: Standard Python logging was implemented for easy troubleshooting and understanding the system flow.
  • Infrastructure-as-Code (IaC): The application is designed to be deployed on AWS using Terraform.
  • Containerization : Docker ensures that the application runs uniformly across different environments by packaging the app and its dependencies together

AWS Architecture Choices

  • I had three main options for deploying my flask application on Aws:
  • 1)AWS Lambda with API Gateway - If you want to minimize maintenance and your traffic is sporadic, AWS Lambda is compelling for its simplicity
  • 2)ECS with AWS Fargate - If you need fine-grained control, predictable scaling and want predictable costs, ECS with Fargate is a strong contender
  • 3)AWS Elastic Beanstalk - For generalized solutions or when starting out, Elastic Beanstalk is a balanced choice

Architecture

  • The application follows the MVC pattern with a slight deviation given Flask's architectural preferences.
  • Model: Defined using Python data classes in models.py.
  • View: All endpoint functions are defined in views.py.
  • Controller: While Flask merges views and controllers, additional business logic can be added in separate controllers/services if needed.
  • Error handling is modularized in errors.py.
  • The application is designed to be stateless, allowing it to scale horizontally if deployed in a cloud environment.

Terraform Architecture

Using Infrastructure as Code (IaC) with Terraform provides a flexible and repeatable deployment process. This application is designed to be deployed on AWS, leveraging various services.

AWS Resources

  • Virtual Private Cloud (VPC): Provides a secure and isolated environment for resources.
  • High Availability with Subnets: By deploying the application across multiple subnets in different availability zones, we ensure that the application remains available even if one of the AWS data centers fails.
  • Internet Gateway: To allow the Flask application to communicate with the external world, for example, to fetch updates or external APIs.
  • ECS with Fargate: Used to run the Flask application in containers, without managing underlying infrastructure.
  • Elastic Load Balancer (ELB): Distributes incoming application traffic across multiple targets.
  • IAM Roles and Policies: Gives permissions to AWS services to operate on your behalf.
  • Security Groups: Acts as a virtual firewall, controlling incoming and outgoing traffic.
  • Auto-Scaling : Automatically adjusts the number of ECS tasks based on defined metrics, ensuring application responsiveness during traffic surges and efficient resource usage during lulls.
  • CloudWatch Logging and Dashboard: Monitors application performance and health, aggregating logs and metrics to offer insights and facilitate troubleshooting

Deployment

  1. Ensure AWS CLI is set up and credentials are configured.
  2. Initialize Terraform: terraform init
  3. Apply the configuration: terraform apply

Cleanup

To prevent unnecessary costs, destroy the resources when done: terraform destroy

Setup and Installation

  1. Unzip the given zip file.
  2. Navigate to the project folder.
  3. Install the required packages: pip install -r requirements.txt.
  4. Run the application locally: python main.py.
  5. For Docker setup:
    • Build the Docker image: docker build -t echo-service ..
    • Run the Docker container: docker run -p 5000:5000 echo-service.
  6. Ensure that you build the Docker image and push it to a container registry (in our case its AWS Elastic Container Registry).
  7. The var.docker_image_url in your Terraform code should then be set to the URL of this pushed image

Usage

Detailed API documentation is provided in the api_docs.md file. The primary endpoints are:

  • POST /endpoints: Create a new mock endpoint.
  • GET /endpoints: List all the created mock endpoints.
  • PATCH /endpoints/:id: Update an existing mock endpoint.
  • DELETE /endpoints/:id: Delete an existing mock endpoint.
  • The created mock endpoints can be accessed via their defined paths and HTTP methods.

Testing

Tests are written using pytest.

  1. Navigate to the root project folder.
  2. Run the tests: pytest.

Future Enhancements

  1. Database Integration: Integrate a database to persistently store the mock endpoints.
  2. Authentication & Authorization: Integrate a complete Auth system.
  3. Multi-Stage-Dockerfile: Multi-stage builds are used in Docker to minimize the final image size, typically by separating the build environment from the run environment. This is especially useful when building binaries from source code, but can also help in Python applications by excluding build tools and other unnecessary files. For a Flask application, the benefit of multi-stage builds can be minimal since Python is an interpreted language and doesn't generate separate binaries, but it still can be useful in specific contexts.Implement rate limiting to prevent abuse of the service.
  4. Queue Service (RabbitMQ): Implement a messaging system like RabbitMQ to handle asynchronous tasks, ensuring the application remains responsive even under high loads.
  5. Caching Mechanism: Integrate caching solutions like Redis or Memcached to boost performance and reduce database load.
  6. Background Workers: Use tools like Celery with RabbitMQ as the message broker to process background jobs, improving response times and offloading non-immediate processing tasks.

About

The Echo Service is a Flask application designed to allow clients to create mock endpoints with pre-defined responses. It offers flexibility in creating, modifying, and deleting these mock endpoints.

Topics

Resources

Stars

2 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Echo Service - Flask Mock Endpoint Creator

Table of Contents

Overview

The Echo Service is a Flask application designed to allow clients to create mock endpoints with pre-defined responses. It offers flexibility in creating, modifying, and deleting these mock endpoints.

Design Choices

  • Framework : I have used the Flask framework due to its simplicity and because it's a lightweight framework.
  • Aws Architecture : For deploying Flask application on AWS , we choose ECS with AWS Fargate.
  • Data Classes: To ensure type safety and better documentation, Python data classes were used to define the data models.
  • Error Handling: Custom error handlers were implemented to provide detailed and user-friendly error messages.
  • Logging: Standard Python logging was implemented for easy troubleshooting and understanding the system flow.
  • Infrastructure-as-Code (IaC): The application is designed to be deployed on AWS using Terraform.
  • Containerization : Docker ensures that the application runs uniformly across different environments by packaging the app and its dependencies together

AWS Architecture Choices

  • I had three main options for deploying my flask application on Aws:
  • 1)AWS Lambda with API Gateway - If you want to minimize maintenance and your traffic is sporadic, AWS Lambda is compelling for its simplicity
  • 2)ECS with AWS Fargate - If you need fine-grained control, predictable scaling and want predictable costs, ECS with Fargate is a strong contender
  • 3)AWS Elastic Beanstalk - For generalized solutions or when starting out, Elastic Beanstalk is a balanced choice

Architecture

  • The application follows the MVC pattern with a slight deviation given Flask's architectural preferences.
  • Model: Defined using Python data classes in models.py.
  • View: All endpoint functions are defined in views.py.
  • Controller: While Flask merges views and controllers, additional business logic can be added in separate controllers/services if needed.
  • Error handling is modularized in errors.py.
  • The application is designed to be stateless, allowing it to scale horizontally if deployed in a cloud environment.

Terraform Architecture

Using Infrastructure as Code (IaC) with Terraform provides a flexible and repeatable deployment process. This application is designed to be deployed on AWS, leveraging various services.

AWS Resources

  • Virtual Private Cloud (VPC): Provides a secure and isolated environment for resources.
  • High Availability with Subnets: By deploying the application across multiple subnets in different availability zones, we ensure that the application remains available even if one of the AWS data centers fails.
  • Internet Gateway: To allow the Flask application to communicate with the external world, for example, to fetch updates or external APIs.
  • ECS with Fargate: Used to run the Flask application in containers, without managing underlying infrastructure.
  • Elastic Load Balancer (ELB): Distributes incoming application traffic across multiple targets.
  • IAM Roles and Policies: Gives permissions to AWS services to operate on your behalf.
  • Security Groups: Acts as a virtual firewall, controlling incoming and outgoing traffic.
  • Auto-Scaling : Automatically adjusts the number of ECS tasks based on defined metrics, ensuring application responsiveness during traffic surges and efficient resource usage during lulls.
  • CloudWatch Logging and Dashboard: Monitors application performance and health, aggregating logs and metrics to offer insights and facilitate troubleshooting

Deployment

  1. Ensure AWS CLI is set up and credentials are configured.
  2. Initialize Terraform: terraform init
  3. Apply the configuration: terraform apply

Cleanup

To prevent unnecessary costs, destroy the resources when done: terraform destroy

Setup and Installation

  1. Unzip the given zip file.
  2. Navigate to the project folder.
  3. Install the required packages: pip install -r requirements.txt.
  4. Run the application locally: python main.py.
  5. For Docker setup:
    • Build the Docker image: docker build -t echo-service ..
    • Run the Docker container: docker run -p 5000:5000 echo-service.
  6. Ensure that you build the Docker image and push it to a container registry (in our case its AWS Elastic Container Registry).
  7. The var.docker_image_url in your Terraform code should then be set to the URL of this pushed image

Usage

Detailed API documentation is provided in the api_docs.md file. The primary endpoints are:

  • POST /endpoints: Create a new mock endpoint.
  • GET /endpoints: List all the created mock endpoints.
  • PATCH /endpoints/:id: Update an existing mock endpoint.
  • DELETE /endpoints/:id: Delete an existing mock endpoint.
  • The created mock endpoints can be accessed via their defined paths and HTTP methods.

Testing

Tests are written using pytest.

  1. Navigate to the root project folder.
  2. Run the tests: pytest.

Future Enhancements

  1. Database Integration: Integrate a database to persistently store the mock endpoints.
  2. Authentication & Authorization: Integrate a complete Auth system.
  3. Multi-Stage-Dockerfile: Multi-stage builds are used in Docker to minimize the final image size, typically by separating the build environment from the run environment. This is especially useful when building binaries from source code, but can also help in Python applications by excluding build tools and other unnecessary files. For a Flask application, the benefit of multi-stage builds can be minimal since Python is an interpreted language and doesn't generate separate binaries, but it still can be useful in specific contexts.Implement rate limiting to prevent abuse of the service.
  4. Queue Service (RabbitMQ): Implement a messaging system like RabbitMQ to handle asynchronous tasks, ensuring the application remains responsive even under high loads.
  5. Caching Mechanism: Integrate caching solutions like Redis or Memcached to boost performance and reduce database load.
  6. Background Workers: Use tools like Celery with RabbitMQ as the message broker to process background jobs, improving response times and offloading non-immediate processing tasks.

About

The Echo Service is a Flask application designed to allow clients to create mock endpoints with pre-defined responses. It offers flexibility in creating, modifying, and deleting these mock endpoints.

Topics

Resources

Stars

2 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Echo Service - Flask Mock Endpoint Creator

Table of Contents

Overview

The Echo Service is a Flask application designed to allow clients to create mock endpoints with pre-defined responses. It offers flexibility in creating, modifying, and deleting these mock endpoints.

Design Choices

  • Framework : I have used the Flask framework due to its simplicity and because it's a lightweight framework.
  • Aws Architecture : For deploying Flask application on AWS , we choose ECS with AWS Fargate.
  • Data Classes: To ensure type safety and better documentation, Python data classes were used to define the data models.
  • Error Handling: Custom error handlers were implemented to provide detailed and user-friendly error messages.
  • Logging: Standard Python logging was implemented for easy troubleshooting and understanding the system flow.
  • Infrastructure-as-Code (IaC): The application is designed to be deployed on AWS using Terraform.
  • Containerization : Docker ensures that the application runs uniformly across different environments by packaging the app and its dependencies together

AWS Architecture Choices

  • I had three main options for deploying my flask application on Aws:
  • 1)AWS Lambda with API Gateway - If you want to minimize maintenance and your traffic is sporadic, AWS Lambda is compelling for its simplicity
  • 2)ECS with AWS Fargate - If you need fine-grained control, predictable scaling and want predictable costs, ECS with Fargate is a strong contender
  • 3)AWS Elastic Beanstalk - For generalized solutions or when starting out, Elastic Beanstalk is a balanced choice

Architecture

  • The application follows the MVC pattern with a slight deviation given Flask's architectural preferences.
  • Model: Defined using Python data classes in models.py.
  • View: All endpoint functions are defined in views.py.
  • Controller: While Flask merges views and controllers, additional business logic can be added in separate controllers/services if needed.
  • Error handling is modularized in errors.py.
  • The application is designed to be stateless, allowing it to scale horizontally if deployed in a cloud environment.

Terraform Architecture

Using Infrastructure as Code (IaC) with Terraform provides a flexible and repeatable deployment process. This application is designed to be deployed on AWS, leveraging various services.

AWS Resources

  • Virtual Private Cloud (VPC): Provides a secure and isolated environment for resources.
  • High Availability with Subnets: By deploying the application across multiple subnets in different availability zones, we ensure that the application remains available even if one of the AWS data centers fails.
  • Internet Gateway: To allow the Flask application to communicate with the external world, for example, to fetch updates or external APIs.
  • ECS with Fargate: Used to run the Flask application in containers, without managing underlying infrastructure.
  • Elastic Load Balancer (ELB): Distributes incoming application traffic across multiple targets.
  • IAM Roles and Policies: Gives permissions to AWS services to operate on your behalf.
  • Security Groups: Acts as a virtual firewall, controlling incoming and outgoing traffic.
  • Auto-Scaling : Automatically adjusts the number of ECS tasks based on defined metrics, ensuring application responsiveness during traffic surges and efficient resource usage during lulls.
  • CloudWatch Logging and Dashboard: Monitors application performance and health, aggregating logs and metrics to offer insights and facilitate troubleshooting

Deployment

  1. Ensure AWS CLI is set up and credentials are configured.
  2. Initialize Terraform: terraform init
  3. Apply the configuration: terraform apply

Cleanup

To prevent unnecessary costs, destroy the resources when done: terraform destroy

Setup and Installation

  1. Unzip the given zip file.
  2. Navigate to the project folder.
  3. Install the required packages: pip install -r requirements.txt.
  4. Run the application locally: python main.py.
  5. For Docker setup:
    • Build the Docker image: docker build -t echo-service ..
    • Run the Docker container: docker run -p 5000:5000 echo-service.
  6. Ensure that you build the Docker image and push it to a container registry (in our case its AWS Elastic Container Registry).
  7. The var.docker_image_url in your Terraform code should then be set to the URL of this pushed image

Usage

Detailed API documentation is provided in the api_docs.md file. The primary endpoints are:

  • POST /endpoints: Create a new mock endpoint.
  • GET /endpoints: List all the created mock endpoints.
  • PATCH /endpoints/:id: Update an existing mock endpoint.
  • DELETE /endpoints/:id: Delete an existing mock endpoint.
  • The created mock endpoints can be accessed via their defined paths and HTTP methods.

Testing

Tests are written using pytest.

  1. Navigate to the root project folder.
  2. Run the tests: pytest.

Future Enhancements

  1. Database Integration: Integrate a database to persistently store the mock endpoints.
  2. Authentication & Authorization: Integrate a complete Auth system.
  3. Multi-Stage-Dockerfile: Multi-stage builds are used in Docker to minimize the final image size, typically by separating the build environment from the run environment. This is especially useful when building binaries from source code, but can also help in Python applications by excluding build tools and other unnecessary files. For a Flask application, the benefit of multi-stage builds can be minimal since Python is an interpreted language and doesn't generate separate binaries, but it still can be useful in specific contexts.Implement rate limiting to prevent abuse of the service.
  4. Queue Service (RabbitMQ): Implement a messaging system like RabbitMQ to handle asynchronous tasks, ensuring the application remains responsive even under high loads.
  5. Caching Mechanism: Integrate caching solutions like Redis or Memcached to boost performance and reduce database load.
  6. Background Workers: Use tools like Celery with RabbitMQ as the message broker to process background jobs, improving response times and offloading non-immediate processing tasks.

About

The Echo Service is a Flask application designed to allow clients to create mock endpoints with pre-defined responses. It offers flexibility in creating, modifying, and deleting these mock endpoints.

Topics

Resources

Stars

2 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

Echo Service - Flask Mock Endpoint Creator

Table of Contents

Overview

The Echo Service is a Flask application designed to allow clients to create mock endpoints with pre-defined responses. It offers flexibility in creating, modifying, and deleting these mock endpoints.

Design Choices

  • Framework : I have used the Flask framework due to its simplicity and because it's a lightweight framework.
  • Aws Architecture : For deploying Flask application on AWS , we choose ECS with AWS Fargate.
  • Data Classes: To ensure type safety and better documentation, Python data classes were used to define the data models.
  • Error Handling: Custom error handlers were implemented to provide detailed and user-friendly error messages.
  • Logging: Standard Python logging was implemented for easy troubleshooting and understanding the system flow.
  • Infrastructure-as-Code (IaC): The application is designed to be deployed on AWS using Terraform.
  • Containerization : Docker ensures that the application runs uniformly across different environments by packaging the app and its dependencies together

AWS Architecture Choices

  • I had three main options for deploying my flask application on Aws:
  • 1)AWS Lambda with API Gateway - If you want to minimize maintenance and your traffic is sporadic, AWS Lambda is compelling for its simplicity
  • 2)ECS with AWS Fargate - If you need fine-grained control, predictable scaling and want predictable costs, ECS with Fargate is a strong contender
  • 3)AWS Elastic Beanstalk - For generalized solutions or when starting out, Elastic Beanstalk is a balanced choice

Architecture

  • The application follows the MVC pattern with a slight deviation given Flask's architectural preferences.
  • Model: Defined using Python data classes in models.py.
  • View: All endpoint functions are defined in views.py.
  • Controller: While Flask merges views and controllers, additional business logic can be added in separate controllers/services if needed.
  • Error handling is modularized in errors.py.
  • The application is designed to be stateless, allowing it to scale horizontally if deployed in a cloud environment.

Terraform Architecture

Using Infrastructure as Code (IaC) with Terraform provides a flexible and repeatable deployment process. This application is designed to be deployed on AWS, leveraging various services.

AWS Resources

  • Virtual Private Cloud (VPC): Provides a secure and isolated environment for resources.
  • High Availability with Subnets: By deploying the application across multiple subnets in different availability zones, we ensure that the application remains available even if one of the AWS data centers fails.
  • Internet Gateway: To allow the Flask application to communicate with the external world, for example, to fetch updates or external APIs.
  • ECS with Fargate: Used to run the Flask application in containers, without managing underlying infrastructure.
  • Elastic Load Balancer (ELB): Distributes incoming application traffic across multiple targets.
  • IAM Roles and Policies: Gives permissions to AWS services to operate on your behalf.
  • Security Groups: Acts as a virtual firewall, controlling incoming and outgoing traffic.
  • Auto-Scaling : Automatically adjusts the number of ECS tasks based on defined metrics, ensuring application responsiveness during traffic surges and efficient resource usage during lulls.
  • CloudWatch Logging and Dashboard: Monitors application performance and health, aggregating logs and metrics to offer insights and facilitate troubleshooting

Deployment

  1. Ensure AWS CLI is set up and credentials are configured.
  2. Initialize Terraform: terraform init
  3. Apply the configuration: terraform apply

Cleanup

To prevent unnecessary costs, destroy the resources when done: terraform destroy

Setup and Installation

  1. Unzip the given zip file.
  2. Navigate to the project folder.
  3. Install the required packages: pip install -r requirements.txt.
  4. Run the application locally: python main.py.
  5. For Docker setup:
    • Build the Docker image: docker build -t echo-service ..
    • Run the Docker container: docker run -p 5000:5000 echo-service.
  6. Ensure that you build the Docker image and push it to a container registry (in our case its AWS Elastic Container Registry).
  7. The var.docker_image_url in your Terraform code should then be set to the URL of this pushed image

Usage

Detailed API documentation is provided in the api_docs.md file. The primary endpoints are:

  • POST /endpoints: Create a new mock endpoint.
  • GET /endpoints: List all the created mock endpoints.
  • PATCH /endpoints/:id: Update an existing mock endpoint.
  • DELETE /endpoints/:id: Delete an existing mock endpoint.
  • The created mock endpoints can be accessed via their defined paths and HTTP methods.

Testing

Tests are written using pytest.

  1. Navigate to the root project folder.
  2. Run the tests: pytest.

Future Enhancements

  1. Database Integration: Integrate a database to persistently store the mock endpoints.
  2. Authentication & Authorization: Integrate a complete Auth system.
  3. Multi-Stage-Dockerfile: Multi-stage builds are used in Docker to minimize the final image size, typically by separating the build environment from the run environment. This is especially useful when building binaries from source code, but can also help in Python applications by excluding build tools and other unnecessary files. For a Flask application, the benefit of multi-stage builds can be minimal since Python is an interpreted language and doesn't generate separate binaries, but it still can be useful in specific contexts.Implement rate limiting to prevent abuse of the service.
  4. Queue Service (RabbitMQ): Implement a messaging system like RabbitMQ to handle asynchronous tasks, ensuring the application remains responsive even under high loads.
  5. Caching Mechanism: Integrate caching solutions like Redis or Memcached to boost performance and reduce database load.
  6. Background Workers: Use tools like Celery with RabbitMQ as the message broker to process background jobs, improving response times and offloading non-immediate processing tasks.

About

The Echo Service is a Flask application designed to allow clients to create mock endpoints with pre-defined responses. It offers flexibility in creating, modifying, and deleting these mock endpoints.

Topics

Resources

Stars

2 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages