top of page
Abstract Shapes

Career

Assignment: Building a Concurrent Web Service in Go

Scenario:

You are working on a project that requires building a high-performance web service in Go. The service will accept incoming HTTP requests, process data concurrently, and store it in a database. The application should be scalable, maintainable, and well-tested.

Requirements:

  • Step 1: Setup and Basic HTTP Server

  • Set up a basic HTTP server using the standard Go net/http package. Create endpoints for handling POST and GET requests. Implement basic request/response handling.

  • Step 2: Data Model and Persistence

  • Define a data model for the application. For example, you can create a simple "Task" model with attributes like ID, Title, Description, and Status. Set up a database connection (e.g., PostgreSQL, MySQL) using a Go database library (e.g., database/sql). Implement CRUD operations (Create, Read, Update, Delete) for the data model.

  •  Step 3: Concurrent Processing

  • Modify your HTTP handlers to process incoming requests concurrently using Goroutines. Implement a worker pool or a concurrent mechanism to handle concurrent requests efficiently. Ensure proper synchronization and error handling.

  • Step 4: Validation and Error Handling

  • Implement request validation to ensure that incoming data is in the correct format and meets the required criteria. Handle errors gracefully and provide meaningful error messages to clients.

  • Step 5: API Documentation

  • Create clear and concise documentation for your API. You can use tools like Swagger or GoDoc to generate API documentation.

  • Step 6: Testing

  • Write unit tests and integration tests for your application. Use testing libraries like testing and httptest to test your HTTP handlers and database operations. Ensure good test coverage.

  •  Step 7: Logging and Monitoring

  • Implement logging to record important events and errors in your application. Optionally, set up monitoring and metrics collection using tools like Prometheus and Grafana.

  • Step 8: Security

  • Implement basic security measures such as input validation, authentication, and authorization. Ensure your application is protected against common web security vulnerabilities (e.g., SQL injection, CSRF).

  • Step 9: Deployment

  • Prepare your application for deployment in a production environment. Document the deployment process.

  • Step 10: Bonus (Optional)

  • Implement pagination for listing endpoints. Add authentication using OAuth2 or JWT. Secure sensitive data (e.g., database credentials, API keys). Implement rate limiting to protect against abuse.

bottom of page