Для такой простой игры, как шахматы, речь идет о определении медиатипа.
Вот пример того, что, вероятно, является упрощенным медиатипом для моделирования шахматной игры.
Я собираюсь пропустить управление несколькими играми, которые могут выполняться на одном сервере, и просто смоделировать уже запущенную игру.
Первым шагом обычно является определение индекса для приложения.
index
Точка входа в игру. Получить это, чтобы узнать информацию об игре.
Полезная нагрузка может выглядеть примерно так:
{
"links": {
"self": "http://my-chess-game.host/games/123",
"player": "http://my-chess-game.host/players/1",
"player": "http://my-chess-game.host/players/2",
"me": "http://my-chess-game.host/players/1",
...
}
"board": [
{
"x": 0,
"y": 1,
"piece": null,
"rel": "space",
"href": "http://my-chess-game/.../boards/123/0/1/something-random-to-discourage-uri-construction"
},
{
"x": 1,
"y": 2,
"rel": "space",
"href": "...",
"piece": {
"player": "http://my-chess-game/.../players/1",
"type": "http://my-chess-game/pieces/Bishop",
"rel": "piece",
"href": "http://my-chess-game/games/123/pieces/player1/Bishop/1",
"links": [
{ "rel": "move": "href": "http://my-chess-game/.../boards/123/..." },
...
]
}
},
...
]
}
move
POST - полезная нагрузка JSON для ссылок, помеченных rel
из move
для перемещения элемента. ДОЛЖНЫ быть включены следующие поля:
- location: URI пространства для перемещения на
Успешные ответы имеют код состояния 200 и будут содержать сущность, совпадающую с полезной нагрузкой index
с обновленным состоянием игры.
400, если пользователю не разрешено перемещать свою фигуру туда, или если это не его ход.
player
ПОЛУЧИТЬ описание игрока.
В ответе ДОЛЖНЫ быть следующие поля:
- username: имя пользователя проигрывателя
- href: URI, идентифицирующий игрока в этой игре.
piece
Кусочки встроены в полезную нагрузку index
, но МОГУТ существовать самостоятельно. Каждый piece
ДОЛЖЕН иметь следующие поля:
- type: URI, идентифицирующий тип произведения. НАПРИМЕР. Епископ, Ладья, Король. Получение этого URI МОЖЕТ предоставить информацию о том, как эта часть работает в игре в шахматы.
- href: URI, идентифицирующий фактическую фигуру на этой доске. GET запросы на этот URI МОГУТ предоставить информацию об этом конкретном фрагменте.
Каждый элемент ДОЛЖЕН иметь move
ссылку.
Альтернативное дизайнерское решение, которое я мог бы принять, заключалось в том, чтобы предоставить индивидуальную ссылку для каждого действительного движения. Для этого могут быть веские причины, но я хотел продемонстрировать, что это не обязательно. Вероятно, есть несколько других ресурсов, которые вы хотели бы включить, чтобы справиться с такими вещами, как помощь клиенту в определении чьей очереди и чего еще.
Для более сложных игр, таких как Civilization, RTS, FPS или MMOG и тому подобное, это может быть не очень практичным IMO.