Skip to content

admarkov/PHPChess

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

42 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Backend шахматной партии на PHP

http:https://chess.admarkov.com/api/

картинка

Формат запросов и ответов

Формат запросов стандартный. ПараметрыGET запросов передаются в url, параметры POST запросов передаются в теле в формате application/x-www-form-urlencoded.

В ответ возвращается json вида

{
    'status': 'ok',
    'payload': {
        ...
    }
}

если запрос завершился успешно и

{
    'status': oneof ['server_error', 'client_error'],
    'error': {
        'error_code': ...,
        'details': ...
    }
}

иначе.

Коды возвращаемых ошибок

  • wrong_method - неверный метод запроса,
  • missing_field - отсутствует обязательное поле,
  • pg_request_failed - сфейлился запрос к базе данных,
  • game_not_found - указанная партия не найдена,
  • bad_params - параметры запроса некорректны;

Ошибки, связанные с невозможностью совершить ход:

  • empty_cell - указанная в запросе стартовая клетка пуста,
  • wrong_color - попытка переместить фигуру игрока, который сейчас не ходит,
  • cell_not_empty - клетка, в которую совершается ход, не пуста,
  • check - ход завершается шахом активному игроку,
  • game_finished - игра уже окончена,
  • forbidden_move - фигура не может ходить так, как указано в запросе;

Методы

1. POST /api/start.php

Никакие параметры не передаются.

Возвращаемые поля:

  • game_id - идентификатор созданной игры
2. GET /api/status.php

Параметры запроса:

  • game_id - идентификатор требуемой партии

Возвращаемые поля:

  • game_status - статус партии,
  • active_player - цвет фигур игрока, ход которого ожидается (black | white),
  • pieces - массив фигур на доске;

Возможные статусы партии:

  • regular - обычное состояние, ожидание хода,
  • check_white | check_black - шах белым/черным,
  • checkmate_white | checkmate_black - мат белым/черным;

Каждая фигура описывается следующими полями:

  • color - цвет фигуры, black или white,
  • type - тип фигуры, один из king, queen, bishop, knight, rook, pawn,
  • coordinate - расположение на доске в шахматной нотации (как E2: первый символ -- буква x-координата, второй -- цифра y-координата);
3. POST /api/move.php

Параметры запроса:

  • game_id - идентификатор партии,
  • from - стартовая клетка в шахматной нотации (E2)
  • to - конечная клетка в шахматной нотации (E4)

payload ответа пуст, не содержит никаких полей.

Некоторые возможные ошибки:

  • Нельзя ходить из пустой клетки,
  • нельзя ходить фигурой другого цвета,
  • нельзя при ходе "перескакивать" другие фигуры,
  • ножно есть фигуры только другого цвета,
  • если после хода король ходившего игрока под угрозой, ход недопустим,
  • если одному из игроков поставлен мат, ходы больше невозможны,
  • при достижении пешкой противоположного конца доски необходимо совершить ее превращение, в данной версии игры пешка превращается в ферзя,
  • баги, связанные с тем, что объекты представляются ссылками на них и клонирование не глубокое,
  • необработанные исключения при сфейленном запросе к базе, и другие связанные с этим ошибки,
  • неполная проверка и предобработка параметров запроса,
  • неудачный ход не должен изменять состояние игры (положение фигур и активный игрок),
  • теоретически всегда много проблем, связанных с состоянием гонки, но в рамках шахматной партии такая проблема вряд ли возможна;

Для выявления возможных ошибок есть юнит-тесты (src/tests) и интеграционные end-to-end тесты (e2e/).

Это прототип, а не бэкенд, готовый к использованию в продакшн

Здесь, например, не хватает кэширования (memcached или APCu) и нужно больше тестов.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published