Overview
The Trivia API integration provides a client for interacting with the Open Trivia Database (OpenTDB) API. It handles fetching trivia questions with various parameters and retrieving available categories. Base URL:https://opentdb.com
Package: internal/trivia_api/trivia_api.go
TriviaClient
Creating a Client
API Methods
GetQuestions
Fetches trivia questions from the Open Trivia Database API.Number of questions to fetch
Category ID for the questions (use GetCategories to retrieve valid IDs)
Question entities with shuffled answer options
Implementation Details:
- Constructs API URL:
{baseURL}/api.php?amount={amount}&type=multiple&category={category} - Only fetches multiple-choice questions
- Automatically shuffles answer options to randomize correct answer position
- Converts API response format to internal
Questionentities
GetCategories
Retrieves all available trivia categories from the API.Category objects containing ID and Name
Implementation Details:
- Endpoint:
{baseURL}/api_category.php - Returns structured list of all available categories
- Categories can be used as parameters for GetQuestions
API Response Structures
Trivia Question Response
The API returns questions in the following format:Question type (e.g., “multiple”)
Difficulty level (easy, medium, hard)
Category name
The question text
The correct answer
Array of incorrect answer options
Category Response
Array of category objects with Id and Name fields
Error Handling
APIError
Custom error type for Open Trivia Database API errors. Source:internal/trivia_api/error.go
0: Success- Non-zero: API error (check OpenTDB documentation for specific codes)
Error Handling Pattern
Data Conversion
ConvertToQuestion
Converts API response format to internal Question entity.- Extracts question text, correct answer, and incorrect answers
- Combines all answers into a single options array
- Shuffles options to randomize answer positions
- Creates and returns a Question entity
Implementation Notes
- HTTP client uses standard
net/httppackage - Response validation checks for HTTP 200 status code
- JSON decoding uses
encoding/jsonpackage - Answer shuffling uses
math/randwith time-based seed for randomization - All requests are synchronous and blocking