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
- фигура не может ходить так, как указано в запросе;
Никакие параметры не передаются.
Возвращаемые поля:
game_id
- идентификатор созданной игры
Параметры запроса:
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-координата);
Параметры запроса:
game_id
- идентификатор партии,from
- стартовая клетка в шахматной нотации (E2
)to
- конечная клетка в шахматной нотации (E4
)
payload
ответа пуст, не содержит никаких полей.
- Нельзя ходить из пустой клетки,
- нельзя ходить фигурой другого цвета,
- нельзя при ходе "перескакивать" другие фигуры,
- ножно есть фигуры только другого цвета,
- если после хода король ходившего игрока под угрозой, ход недопустим,
- если одному из игроков поставлен мат, ходы больше невозможны,
- при достижении пешкой противоположного конца доски необходимо совершить ее превращение, в данной версии игры пешка превращается в ферзя,
- баги, связанные с тем, что объекты представляются ссылками на них и клонирование не глубокое,
- необработанные исключения при сфейленном запросе к базе, и другие связанные с этим ошибки,
- неполная проверка и предобработка параметров запроса,
- неудачный ход не должен изменять состояние игры (положение фигур и активный игрок),
- теоретически всегда много проблем, связанных с состоянием гонки, но в рамках шахматной партии такая проблема вряд ли возможна;
Для выявления возможных ошибок есть юнит-тесты (src/tests
) и интеграционные end-to-end тесты (e2e/
).
Здесь, например, не хватает кэширования (memcached или APCu) и нужно больше тестов.