Обработка ошибок¶
Обработка ошибок является важнейшей частью любого надежного и удобного для пользователя приложения Open API. Если вы не перехватываете и не обрабатываете различные ошибки, ваши пользователи могут столкнуться с неправильным пользовательским интерфейсом или вообще не смогут выполнять определенные важные действия.
В общих чертах, различные процессы обработки ошибок могут быть реализованы в зависимости от уровня, на котором возникает ошибка.
- На уровне данных и предметной области. В некоторых случаях бэкенд cTrader может отправить сообщение
ProtoErrorResв ответ на один из ваших запросов. Для операций, связанных с ордерами, сделками или позициями, вы также можете получить сообщениеProtoOAOrderErrorEvent. - На уровне предметной области и приложения. Пользователи могут выполнять действия, которые вы не учли в своем коде, в результате чего ваше приложение будет вести себя неожиданно.
Механизмы обработки ошибок на этих уровнях различаются и описаны ниже.
Обработка ошибок на уровне данных и домена ¶
Вы можете получить ProtoErrorRes или ProtoOAOrderErrorEvent в следующих ситуациях (обратите внимание, что список не является исчерпывающим):
- Попытка разместить ордер для символа, рынок которого закрыт.
- Отправка неправильного или неподдерживаемого сообщения.
- Попытка изменить ордер, который выполняется.
- Отправка сообщения после потери соединения с бэкендом cTrader.
Анализ ошибок
И ProtoErrorRes, и ProtoOAOrderErrorEvent имеют поля errorCode и description, которые содержат точную информацию о типе произошедшей ошибки и ее описание. Вы можете увидеть полный список всех поддерживаемых кодов ошибок в перечислении ProtoErrorCode.
Чтобы ваше приложение не сломалось в таких случаях, вы обычно можете подписаться на обратные вызовы, которые срабатывают при получении ответа об ошибке. Точная логика этих обратных вызовов, а также способ подписки на них зависят от клиента, который вы используете для установления соединения и прослушивания потока сообщений.
Работа с JSON
При работе с JSON вы все еще можете повторно использовать код из этого руководства; однако вам потребуется немного изменить его в зависимости от вашего подхода к сериализации и десериализации, а также предпочитаемого TCP- и WebSocket-клиента.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | |
При использовании библиотеки twisted для обработки асинхронных операций вы должны подписываться на обратный вызов ошибки каждый раз, когда отправляете новое сообщение, как показано в примере ниже для ProtoOAVersionReq.
1 2 3 4 5 6 7 8 | |
Обработка ошибок на уровне домена и приложения ¶
Способ обработки ошибок на уровне домена и приложения зависит от выбранного вами языка программирования, UI-фреймворка и реализуемых вами сценариев использования, что затрудняет предоставление конкретных фрагментов кода и решений.
Однако следующие рекомендации могут оказаться полезными независимо от того, как вы решите интегрироваться с cTrader Open API.
- Всегда реализуйте выделенное состояние ошибки для основных элементов пользовательского интерфейса. Это предотвратит полное разрушение вашего приложения и позволит ему работать в частично деградированном состоянии.
- Реализуйте безопасный и надежный механизм логирования, который будет записывать ошибки в подходящее место (например, в локальное хранилище). Если возникают повторяющиеся ошибки, логирование должно упростить выявление и устранение их причины.
- Создайте механизм, позволяющий пользователям сообщать вам об ошибках. Это может быть как простое предоставление вашей контактной информации в приложении, так и сложное добавление автоматического сервиса отправки отзывов, который срабатывает при новых ошибках.
- Убедитесь, что все ресурсы, используемые при возникновении ошибок, правильно очищаются. Хотя большинство языков предлагают службы сборки мусора, вы можете захотеть указать пользовательскую логику освобождения ресурсов.