Junior Backend
Developer
Assignment
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.