The API Mystery

The API Mystery

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
                            
                        

Часть 0: Погружение в чистый API

Вашему вниманию представляется дело о краже талисмана Золотой Гоффер, произошедшей в городе 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_ОТЧЕТА
                    }
                
            

В ответе судья сообщит правы ли вы.

В будущих обновлениях (Дорожная карта)

  1. Новые части
  2. Больше детектива
  3. Сюжетный режим
  4. Загадки решаемые при помощи RPC и GraphQL
  5. Загадки решаемые при помощи Web UI

Copyright

Данный проект распространяется под лицензией 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