A professional demonstration of RESTful API design using Java, Dropwizard, and enterprise-grade architecture patterns. This project showcases backend engineering skills through the development of a fully functional multiplayer game server system with proper role-based access control, session management, and authentication logic. Still plan on adding features
Note: Frontend not included. This is a backend-only REST API demo implemented in Java (Dropwizard), featuring Python auto-launchers for automated testing, endpoint verification, and orchestration.
This repository demonstrates my expertise in building scalable, production-ready REST APIs. While themed around a game platform for engagement, it exemplifies real-world backend development practices including authentication, data modeling, API design, and system architecture that apply to any enterprise application.
- Language: Java 8
- Framework: Dropwizard 2.0 (enterprise-grade REST framework)
- Build Tool: Maven
- API Type: RESTful API with JSON responses
- Backend is 100% Java - All the source code in java-rest-api/src/main/java/
- REST Endpoints - 25+ RESTful endpoints following HTTP standards: - GET, POST, PUT, DELETE methods - JSON request/response format - Proper HTTP status codes
- Dropwizard Framework - Production-ready Java framework for building REST APIs
- run_halo_server.py and run_server.py are only used to start the Java server
- They execute: java -jar gameauth-0.0.1-SNAPSHOT.jar server config.yml
- The actual server and all business logic is Java
- Controllers - Handle HTTP requests (HaloGameResource.java, GameUserRESTController.java)
- Services - Business logic (HaloGameService.java, WeaponDatabase.java)
- DAOs - Data access (CustomMapDAO.java, HaloStatsDAO.java)
- Models - Data structures (PlayerStats.java, Weapon.java, MatchResult.java)
- Auth - Security (GameAuthenticator.java, GameAuthorizer.java)
# 1. Clone and setup git clone https://github.com/jguida941/REST_API_Game_Demo.git cd REST_API_Game_Demo ./setup.sh # 2. Choose your server: # OPTION A: Full Halo Game Server (Recommended) cd java-rest-api python3 run_halo_server.py # OPTION B: Basic GameAuth Demo cd java-rest-api python3 run_server.py # 3. Test it works (new terminal) cd demos ./quick-demo.sh
- 28 Halo Weapons - Complete weapon database with stats
- Player Statistics - K/D ratios, medals, match history
- Matchmaking System - Skill-based matching with queues
- 10 Custom Maps - Including Blood Gulch Redux, Lockout Classic
- Leaderboards - Sort by kills, K/D, wins, accuracy
- Match History - 6 pre-loaded sample matches
- Authentication System - HTTP Basic Auth
- Role-Based Access - Admin, Player, User, Guest
- User Management - CRUD operations
- Security Demo - Shows authentication patterns
Role | Username | Password | Access Level |
---|---|---|---|
Admin | admin | password | Full access |
Player | player | password | Game features |
User | user | password | Read/Update |
Guest | guest | password | Read only |
GET http://localhost:8080/halo/weapons # All 28 weapons GET http://localhost:8080/halo/weapons/assault_rifle # Specific weapon GET http://localhost:8080/halo/weapons/type/KINETIC # By damage type GET http://localhost:8080/halo/weapons/power # Power weapons only
GET http://localhost:8080/halo/player/985752863/stats # Player statistics GET http://localhost:8080/halo/player/985752863/matches # Match history POST http://localhost:8080/halo/player/stats/update # Update after match
GET http://localhost:8080/halo/leaderboard/kills # Kill leaders GET http://localhost:8080/halo/leaderboard/kdRatio # K/D leaders GET http://localhost:8080/halo/leaderboard/wins # Win leaders GET http://localhost:8080/halo/leaderboard/accuracy # Accuracy leaders
GET http://localhost:8080/halo/maps/browse # All custom maps GET http://localhost:8080/halo/maps/{id}/download # Download map POST http://localhost:8080/halo/maps/upload # Upload new map POST http://localhost:8080/halo/maps/{id}/rate # Rate a map
POST http://localhost:8080/halo/matchmaking/queue # Join queue GET http://localhost:8080/halo/matchmaking/status # Check status DELETE http://localhost:8080/halo/matchmaking/queue # Leave queue POST http://localhost:8080/halo/match/complete # End match
GET http://localhost:8080/gameusers # List users GET http://localhost:8080/gameusers/{id} # Get user POST http://localhost:8080/gameusers # Create user PUT http://localhost:8080/gameusers/{id} # Update user DELETE http://localhost:8080/gameusers/{id} # Delete user GET http://localhost:8080/status # API status
cd demos # Fast API test ./quick-demo.sh # Full feature showcase ./showcase.sh # Run ALL 29 demos ./run-all-demos.sh
# Authentication & permissions ./auth/demo-auth.sh # Player statistics ./stats/demo-stats.sh # Matchmaking system ./matchmaking/demo-matchmaking.sh # Custom maps ./maps/demo-maps.sh # Leaderboards ./leaderboard/demo-leaderboard.sh # Performance testing ./performance/demo-performance.sh # Integration tests ./integration/demo-integration.sh
cd demos/advanced # AI matchmaking simulation ./demo-ai-matchmaking.sh # Weapon meta analysis ./demo-weapon-meta.sh # Stress testing - Runs load tests (has minor timing bug but works) ./demo-performance-stress.sh # Security testing ./demo-security-auth.sh # Full gameplay session ./demo-full-session.sh # Forge workshop ./demo-forge-workshop.sh # Intelligence engine ./demo-intelligence-engine.sh
REST_API_Game_Demo/ ├── README.md # This file ├── LICENSE # MIT License ├── setup.sh # First-time setup script ├── .gitignore # Git ignore rules │ ├── java-rest-api/ # Backend server │ ├── README.md # Server-specific readme │ ├── run_halo_server.py # Full game server launcher │ ├── run_server.py # Basic auth server launcher │ ├── pom.xml # Maven configuration │ ├── config.yml # Server configuration │ ├── target/ │ │ └── gameauth-0.0.1-SNAPSHOT.jar # Pre-built server JAR │ └── src/ │ └── main/java/com/gamingroom/gameauth/ │ ├── GameAuthApplication.java # Main application │ ├── GameAuthConfiguration.java # Configuration │ ├── auth/ # Authentication system │ │ ├── GameAuthenticator.java │ │ ├── GameAuthorizer.java │ │ └── GameUser.java │ ├── controller/ # REST endpoints │ │ ├── GameUserRESTController.java │ │ └── RESTClientController.java │ ├── dao/ # Data access │ │ └── GameUserDB.java │ ├── healthcheck/ # Health monitoring │ │ ├── AppHealthCheck.java │ │ └── HealthCheckController.java │ ├── representations/ # DTOs │ │ └── GameUserInfo.java │ └── halo/ # Game features │ ├── controller/ │ │ └── HaloGameResource.java │ ├── dao/ │ │ ├── CustomMapDAO.java │ │ ├── HaloStatsDAO.java │ │ └── MatchHistoryDAO.java │ ├── models/ │ │ ├── BaseMapType.java │ │ ├── CustomMap.java │ │ ├── GameMode.java │ │ ├── MatchResult.java │ │ ├── MatchmakingTicket.java │ │ ├── PlayerStats.java │ │ ├── Weapon.java │ │ └── WeaponStats.java │ └── service/ │ ├── HaloGameService.java │ └── WeaponDatabase.java │ ├── demos/ # Demo scripts │ ├── quick-demo.sh # Quick API test │ ├── showcase.sh # Full feature tour │ ├── run-all-demos.sh # Run everything │ ├── demo.sh # One-liner demo │ ├── auth/ # Authentication demos │ │ └── demo-auth.sh │ ├── stats/ # Statistics demos │ │ └── demo-stats.sh │ ├── matchmaking/ # Matchmaking demos │ │ └── demo-matchmaking.sh │ ├── maps/ # Map/Forge demos │ │ └── demo-maps.sh │ ├── leaderboard/ # Leaderboard demos │ │ └── demo-leaderboard.sh │ ├── performance/ # Performance demos │ │ └── demo-performance.sh │ ├── integration/ # Integration demos │ │ └── demo-integration.sh │ └── advanced/ # Advanced demos │ ├── demo-ai-matchmaking.sh │ ├── demo-forge-workshop.sh │ ├── demo-full-session.sh │ ├── demo-intelligence-engine.sh │ ├── demo-performance-stress.sh │ ├── demo-security-auth.sh │ └── demo-weapon-meta.sh │ └── demo-showcase/ # Unity integration example └── DemoScripts/ ├── UnityRestClient.cs # Unity C# API client └── DemoController.cs # Demo UI controller
cd java-rest-api mvn clean package
# 1. Test setup script ./setup.sh # 2. Test Halo server cd java-rest-api python3 run_halo_server.py # Ctrl+C to stop # 3. Test GameAuth server python3 run_server.py # Ctrl+C to stop # 4. Test quick demo (start server first) cd ../demos ./quick-demo.sh # 5. Test a specific endpoint curl -u player:password http://localhost:8080/halo/weapons
- Enterprise Architecture - Clean separation of concerns
- RESTful API Design - 25+ well-designed endpoints
- Authentication & Security - Role-based access control
- Data Modeling - Complex game data relationships
- Performance - Efficient algorithms and caching
- Testing - Comprehensive demo suite
- Weapon System - 28 balanced weapons
- Player Progression - Stats, medals, rankings
- Matchmaking - Skill-based matching
- User Content - Custom map support
- Social Features - Leaderboards and history
Default configuration runs on port 8080. Both servers use the same JAR.
- Update
config.yml
with production database - Set environment variables for ports
- Enable HTTPS in configuration
- Use proper secrets management
Problem | Solution |
---|---|
Port already in use | lsof -i :8080 then kill <PID> |
Java not found | Install Java 8+ or check JAVA_HOME |
Permission denied | chmod +x on scripts |
Server won't start | Check java-rest-api/server.log |
Demos fail | Ensure server is running first |
- Java 8 - Core programming language
- Dropwizard 2.0 - Production-ready REST framework
- Maven - Build automation
- JUnit - Unit testing framework
- HTTP Basic Auth - Security implementation
- In-Memory Database - Fast development iteration
Justin Guida - Full Stack Developer
This project was created to demonstrate enterprise-level backend development skills. While the theme is gaming-related for engagement, the patterns and practices shown here apply directly to real-world applications in finance, healthcare, e-commerce, and other industries.
Creative Commons Attribution-NonCommercial 4.0 International
This work is licensed under the Creative Commons Attribution-NonCommercial 4.0 International License. To view a copy of this license, visit https://creativecommons.org/licenses/by-nc/4.0/
You are free to:
✔️ Share — copy and redistribute the material in any medium or format
✔️ Adapt — remix, transform, and build upon the material
Under the following terms:
Attribution — You must give appropriate credit, provide a link to the license, and indicate if changes were made.
NonCommercial — You may not use the material for commercial purposes.
To see it in action:
cd java-rest-api && python3 run_halo_server.py
Then visit http://localhost:8080/halo/weapons in your browser.