This is a follow-on to the V4 Motivation and and Goals article.
The V4 architecture will have a group of services providing support for a reference game app implementation and other auxiliary functions such as website status pages. A modular architecture should facilitate building and testing V4 capabilities, as well as making it possible to scale as needed or swap out implementations without disturbing the system as a whole.
Several services will support user account management, notification, browsing and searching a game library, finding games, and managing game state.
All services will meet the following requirements:
- Every service will have a JSON REST API
- Every service will be rate limited
- Every service will support pagination for any endpoints likely to return much data
A user management service provides a way for users to register and manage their accounts.
If we are providing authentication, we need to support:
- registration, including confirmation by email
- password recovery
We need to support:
- user avatar
- user nickname (need not be the same as account name?)
A notification service provides access to messages. Messages have individual users as recipients.
A game library service provides access to a collection of available game modules. For each game module, metadata, a URL for a game box image, and a URL for the game module file should be provided.
A game management service provides access to a collection of ongoing games. Games must be searchable by user, name of game, name of game instance, ctime, mtime, whether they are public or private, whether active/completed/inactive. The game management service should provide access to game metadata and a URI for retrieving game state or joining an active game, as well as the ability to register new games.
A game service provides access to the state of an ongoing game. A game service can load a game log and send and receive game state changes. In cases where no trusted third party is required, one of the players may host the game service.
A player app interfaces with the various services to display game information and accept moves.
The player should have an interface for browsing and searching game libraries and downloading modules, with the possibility of connecting to multiple library providers.
An editor app facilitates creation and editing of game modules.