Когда я должен генерировать исключение, а не возвращать ошибку в PHP? - PullRequest
8 голосов
/ 18 мая 2011

Я работаю над классом-оболочкой API, который я создал первым. По большей части это не было слишком сложно. Дойдя до того, что мне нужно разобраться с возможностью ошибок, возвращаемых API, однако я не совсем понимаю, как мне поступить с ними.

Внешний файл будет вызывать класс API, т. Е. findVenueByLocationID($locationID); Затем эта функция создаст URL-адрес и метод вызова API (POST, GET, DELETE и т. Д.) И передаст их в функцию с именем makeCall.

MakeCall создает завершенный URL-адрес, отправляет запрос в службу и возвращает полученный XML-код. Если API возвращает ошибку, он находится внутри XML, который он возвращает. URL вызывается с помощью функции file_get_contents (). API имеет установленное количество кодов ошибок, которые он будет возвращать в XML.

Как я понимаю, во время функции makeCall я должен сделать следующее:

  • Перед возвратом XML проверьте, содержит ли он код ошибки, и, если это так, передайте его классу обработки ошибок, чтобы устранить ошибку. (Зарегистрируйте и верните сообщение об ошибке версии клиента)
  • добавить опцию try вокруг функции file_get_contents (), чтобы отследить любые ошибки соединения, т.е. невозможность доступа к серверу?

Это считается лучшим способом сделать что-то? Должен ли я добавить попытку поймать вызов makeCall, а не внутри него file_get_contents? Должен ли я генерировать исключение для каждой ошибки, возвращаемой XML, и обрабатывать их с помощью класса ошибок?

Тип ответа, который я ищу, должен также содержать ссылку на ресурс, объясняющий некоторые передовые практики, связанные с обработкой ошибок с помощью API-оболочек или подобных вещей.

Заранее спасибо за ваше время и ответы.


EDIT: После разговора с нашим техническим директором ошибки в PHP в текущей версии являются исключениями, и я должен выбросить исключения и оставить обработку исключений вызывающей стороне. Помните, я реализую класс-оболочку для API. Мысли? * * 1023

1 Ответ

3 голосов
/ 18 мая 2011

Сначала вы должны знать разницу между исключениями и ошибками: ошибки случаются, исключения являются исключительными.

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

Так что, если вы получаете XML от третьей стороны, вы, вероятно, ожидаете, что он будет действительным. Но могут быть ошибки. Если API выдаст вам ошибку (местоположение не найдено), это, вероятно, будет ошибкой и на вашей стороне. Только в особых случаях (вы жестко закодировали местоположение, которое наверняка всегда будет там), это может быть исключением.

Самыми тривиальными исключениями являются ошибки соединения: тогда определенно что-то не так. Другая простая вещь - это ошибки в API, которые вы можете ожидать, например, «нет новой информации» (просто в качестве примера): это внутренняя ошибка. И где-то вы должны провести черту, но в большинстве случаев ясно, что является исключительным, и что может быть просто ошибкой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...