Assimiliating Go application patterns
This little practice follows the book, Let's Go Further by @alexedwards
- Introduction
- 1.1. Prerequisites
- Getting Started
- 2.1. Project Setup and Skeleton Structure
- 2.2. A Basic HTTP Server
- 2.3. API Endpoints and RESTful Routing
- Sending JSON Responses
- 3.1. Fixed-Format JSON
- 3.2. JSON Encoding
- 3.3. Encoding Structs
- 3.4. Formatting and Enveloping Responses
- 3.5. Advanced JSON Customization
- 3.6. Sending Error Messages
- Parsing JSON Requests
- 4.1. JSON Decoding
- 4.2. Managing Bad Requests
- 4.3. Restricting Inputs
- 4.4. Custom JSON Decoding
- 4.5. Validating JSON Input
- Database Setup and Configuration
- 5.1. Setting up PostgreSQL
- 5.2. Connecting to PostgreSQL
- 5.3. Configuring the Database Connection Pool
- SQL Migrations
- 6.1. An Overview of SQL Migrations
- 6.2. Working with SQL Migrations
- CRUD Operations
- 7.1. Setting up the Movie Model
- 7.2. Creating a New Movie
- 7.3. Fetching a Movie
- 7.4. Updating a Movie
- 7.5. Deleting a Movie
- Advanced CRUD Operations
- 8.1. Handling Partial Updates
- 8.2. Optimistic Concurrency Control
- 8.3. Managing SQL Query Timeouts
- Filtering, Sorting, and Pagination
- 9.1. Parsing Query String Parameters
- 9.2. Validating Query String Parameters
- 9.3. Listing Data
- 9.4. Filtering Lists
- 9.5. Full-Text Search
- 9.6. Sorting Lists
- 9.7. Paginating Lists
- 9.8. Returning Pagination Metadata
- Rate Limiting
- 10.1. Global Rate Limiting
- 10.2. IP-based Rate Limiting
- 10.3. Configuring the Rate Limiters
- Graceful Shutdown
- 11.1. Sending Shutdown Signals
- 11.2. Intercepting Shutdown Signals
- 11.3. Executing the Shutdown
- User Model Setup and Registration
- 12.1. Setting up the Users Database Table
- 12.2. Setting up the Users Model
- 12.3. Registering a User
- Sending Emails
- 13.1. SMTP Server Setup
- 13.2. Creating Email Templates
- 13.3. Sending a Welcome Email
- 13.4. Sending Background Emails
- 13.5. Graceful Shutdown of Background Tasks
- User Activation
- 14.1. Setting up the Tokens Database Table
- 14.2. Creating Secure Activation Tokens
- 14.3. Sending Activation Tokens
- 14.4. Activating a User
- Authentication
- 15.1. Authentication Options
- 15.2. Generating Authentication Tokens
- 15.3. Authenticating Requests
- Permission-based Authorization
- 16.1. Requiring User Activation
- 16.2. Setting up the Permissions Database Table
- 16.3. Setting up the Permissions Model
- 16.4. Checking Permissions
- 16.5. Granting Permissions
- Cross Origin Requests
- 17.1. An Overview of CORS
- 17.2. Demonstrating the Same-Origin Policy
- 17.3. Simple CORS Requests
- 17.4. Preflight CORS Requests
- Metrics
- 18.1. Exposing Metrics with Expvar
- 18.2. Creating Custom Metrics
- 18.3. Request-level Metrics
- 18.4. Recording HTTP Status Codes
- Building, Versioning and Quality Control
- 19.1. Creating and Using Makefiles
- 19.2. Managing Environment Variables
- 19.3. Quality Controlling Code
- 19.4. Module Proxies and Vendoring
- 19.5. Building Binaries
- 19.6. Managing and Automating Version Numbers
- Deployment and Hosting
- 20.1. Creating a Digital Ocean Droplet
- 20.2. Server Configuration and Installing Software
- 20.3. Deployment and Executing Migrations
- 20.4. Running the API as a Background Service
- 20.5. Using Caddy as a Reverse Proxy
- Appendices
- 21.1. Managing Password Resets
- 21.2. Creating Additional Activation Tokens
- 21.3. Authentication with JSON Web Tokens
- 21.4. JSON Encoding Nuances
- 21.5. JSON Decoding Nuances
- 21.6. Request Context Timeouts
- Feedback