The API Mystery - это увлекательная детективная игра, в которой вам предстоит раскрыть преступления и тренироваться в работе с Web API, RPC и GraphQL.
В игре вы будете использовать эти технологии для взаимодействия с различными сервисами и программами, а также для получения необходимой информации для расследования. Вы будете отправлять запросы к Web API, использовать RPC для удаленного вызова процедур и работать с GraphQL для получения данных.
Приветствую всех! С самого начала, когда я увидел The SQL Murder Mystery, я не мог поверить, что не существует продолжения или подобной игры с решением через Web API. Когда у меня наконец появилось свободное время, я решил создать такую игру, и вот родилась The API Mystery!
Эта игра состоит из нескольких отдельных частей. В каждой из них вам предстоит разгадать детективную загадку и найти преступника. Вы играете за девушку криминалиста Api Fox.
Данная игра направлена на развитие ваших навыков работы с Web API и требует активного использования вашей смекалки и дедукции. Будьте готовы к вызовам и наслаждайтесь процессом разгадывания загадок и поиска преступников!
Все персонажи и события являются вымышленными, и любое совпадение с реально живущими или жившими людьми и событиями случайно.
Самый простой способ использовать предварительно подготовленный docker контейнер. Для этого, вам необходимо установить Docker Desktop или docker-engine на ваш компьютер и добавить их в переменную среды path. Вы можете найти инструкции по установке по ссылке Docker Desktop. После установки Docker, выполните следующие шаги:
1. Создайте новую папку на вашем компьютере.
2. Перейдите в созданную папку.
3. Откройте консоль в созданной папке.
4. Скачайте файл docker-compose.yml из репозитория проекта в папку. Прямая ссылка сохранить как docker-compose.yml или выполнив в консоли:
wget wget https://raw.githubusercontent.com/SnoweTiger/APIMystery/master/docker-compose.yml -O docker-compose.yml
5. Запустите контейнер с помощью консольной команды docker-compose up -d
Сервер будет доступен по адресу http://localhost:8080. Чтобы проверить доступность сервера, вы можете ввести в браузере http://localhost:8080/ping или выполнив в консоли:
curl http://localhost:8080/ping
Сервер ответит:
StatusCode : 200
StatusDescription : OK
Content : {"message":"pong"}
Документация к Web API будет доступна по адресу http://localhost:8080/docs
Остановить и удалить контейнер можно следующей командой
docker-compose down
Вашему вниманию представляется дело о краже талисмана Золотой Гоффер, произошедшей в городе N city ночью 29 октября 2025 года. Кража произошла из витрины музея кафедры Информационных технологий, накануне его открытия. Был похищен талисман Золотой Гоффер. Полиция уже ведет расследование и пытается найти преступника, а также установить, где находится похищенный талисман. Ваша задача, в качестве стажера-криминалиста, заключается в расследовании данного дела.
Вам был выслан доступ к служебному API, который позволит вам получить дополнительную информацию для расследования. Доступы были отправлены вам 30 октября 2025 года личным сообщением в Cakebook.
По завершении расследования вам необходимо будет передать результаты с помощью метода API PATCH /police/api/report.
Удачи в расследовании!
Как получить доступ к документации на Web API описано в Установка и начало работы.
Так же вам передали ключи для доступа к API местного финтнес центра GetFitNow и социальной сети Cakebook и ваш id пользователя:
GETFITNOW_API_TOKEN = 'd901050d-07ec-4990-a05c-ab2178e2e09c'
CAKEBOOK_API_TOKEN = 'd901050d-07ec-4990-a05c-ab2178e2e09c'
PERSON_ID = 12345
Чтобы получить сообщения, используйте токен CAKEBOOK_API_TOKEN, для кого сообщение PERSON_ID и дату сообщения 20251030, вам потребуется выполнить HTTP-запрос к соответствующему эндпоинту API. Вы можете использовать свой любимый инструмент для работы с веб-запросами, такой как Bruno или расширение REST Client для VS Code.
Вот пример запроса с использованием расширения REST Client:
POST http://localhost:8080/cakebook/api/events HTTP/1.1
Content-Type: application/json
Authorization: Bearer d901050d-07ec-4990-a05c-ab2178e2e09c
{
"person_id": 12345,
"start_date": 20251030,
"end_date": 20251030
}
В ответ вы получите JSON, содержащий сообщения от техподдержки с доступами к служебному API (police/api/).
C помощью служебного API и зная дату совершения преступления получите отчет о преступлении и приступайте к расследованию. Для этого сначала авторизуйтесь в служебном API и получите токен с помощью метода POST /police/auth/login. Затем с помощью метода POST /police/api/report/search получите отчет с места преступления.
Вот пример запросов с использованием расширения REST Client:
###
# @name login_response
POST http://localhost:8080/police/auth/login HTTP/1.1
Content-Type: application/json
{
"login": "ApiFox",
"password": "Fox2025"
}
###
@token = {{login_response.response.body.token}}
###
POST http://localhost:8080/police/api/report/search HTTP/1.1
Content-Type: application/json
Authorization: Bearer {{token}}
{
"date_from": 20251029,
"date_to": 20251029,
"type": "theft"
}
Из отчета мы узнаем что произошло и ФИО потерпевшего и о том что он был приглашен на опрос(interview).
Далее чуть хитрее. Что бы получить опрос(interview) персонажа надо знать его id или id персонажа person_id. Но мы знаем как зовут потерпевшего и можем узнать его person_id с помощь еще одного метода нашего API.
Из опроса потерпевшего мы можем узнать как вычислить преступника
Для проверки результатов расследования вы можете использовать метод PATCH /police/api/report. Например, с помощью REST Client вы можете отправить следующий запрос:
PATCH http://localhost:8080/police/api/report HTTP/1.1
Content-Type: application/json
Authorization: Bearer YOUR_TOKEN
{
"suspect_id": ID_ПОДОЗРЕВАЕМОГО,
"suspect_name": "ИМЯ_ПОДОЗРЕВАЕМОГО",
"report_id": ID_ОТЧЕТА
}
В ответе судья сообщит правы ли вы.
Данный проект распространяется под лицензией MIT 2024. За основу данных проекта взята SQL база из The SQL Murder Mystery под Creative Commons CC BY-SA 4.0 Изображения проекта распространяется под лицензией MIT 2024. Они созданы с помощью модели ReV Animated(SD 1.5) под Creative Commons CC BY-SA 4.0