обработка ответа от backend

Jocontacter

Новичок
Здравствуйте. Вопрос по архитектурному слою:
У меня имеется frontend и backend на разных серверах. backend при запросе валидирует данные, обращается к бд, файлам и т.д.
Итого может быть 4 варианта развития событий:
1) backend может вообще ничего не ответить, т.к. сервер его содержащий упал.
2) в backend может возникнуть исключение или варнинг(я их отлавливаю вместе - сделал обертку старой php'шной ошибки, наследованной от Exception и делаю throw) - нужно дать об этом знать frontend'у, чтобы извиниться перед юзером.
3) может быть облом при валидации данных/проверке авторизации - в данном случае так-же надо объяснить пользователю в чем он не прав.
4) все хорошо и возвращается ответ.

Пункты 1 и 4 можно пропустить, вопрос по 3 и 4:
Как различать эти типы ошибок? Запросы на backend идут через одно единственное место и я там могу отлавливать ошибки из второго типа и сразу перенаправлять юзера на страницу с извинениями/объяснениями, а как быть с ошибками из третьего пункта? ведь нужно подсвечивать поля с неверно введенными данными..

Вот мои классы:

Класс backend - ответа, который может содержать либо ошибку BackendError либо что-либо другое, и тогда ok===true:
PHP:
class BackendResult
{
    private $result = null;
    private $ok = false;
    private $error = null;
    
    public function __construct(& $result = null)
    {
        if(!is_null($result))
        {
            if(is_a($result, "BackendError"))
                $this->error = $result;
            else
            {
                $this->ok = true;
                $this->result = $result;
            }
        }
    }
    
    public function setResult(& $result)
    {
        $this->result = $result;
    }
    
    public function & getResult()
    {
        return $this->result;
    }
    
    public function setError(BackendError & $error)
    {   
        $this->error = $error;
    }
    
    public function & getError()
    {
        return $this->error;
    }
    
    public function setOk($ok)
    {
        $this->ok = $ok;
    }
    
    public function getOk()
    {
        return $this->ok;
    }
}
Ошибка:
PHP:
class BackendError
{
    private $errno = null;
    private $error = null;
    private $msg = null;
    
    public function __construct($errno = 0, $error = '', $msg = '')
    {
        $this->errno = $errno;
        $this->error = $error;
        $this->msg = $msg;
    }
    
    public function getErrNo()
    {
        return $this->errno;
    }
    
    public function getError()
    {
        return $this->error;
    }
    
    public function getMsg()
    {
        return $this->msg;
    }
}
Как логичнее организовать данные и как обрабатывать эти виды ошибок на frontend'е правильнее?
 

С.

Продвинутый новичок
Ты точно подразумеваешь под frontend и backend именно то, что все остальные? А то по тексту это больше похоже на client и server. Если ты поменяешь названия, может и проблема переосмыслится?
 

Jocontacter

Новичок
frontend формирует клиента - с его javascript, ajax и прочим. Шлет запросы на backend
backend - формирует ответы для frontend.
В целом можно рассматривать и как client и server, но я бы не назвал frontend клиентом.
клиент - это html, отображенный в браузере пользователя.
 

С.

Продвинутый новичок
Нет, это самый настоящий клиент-сервер без натяжек:
[клиент] -- [сервер/клиент] -- [сервер]

Вот и решай проблему, исходя из этих реалий.Как ты даешь знать клиенты (слева) об ошибках на сервере (в середие)? То же самое и для сервера (справа), только с пересадкой.

Связка HTML--PHP--MySQL имеет точно такую же архитектуру.
 

Jocontacter

Новичок
Нет, это самый настоящий клиент-сервер без натяжек:
[клиент] -- [сервер/клиент] -- [сервер]

Вот и решай проблему, исходя из этих реалий.Как ты даешь знать клиенты (слева) об ошибках на сервере (в середие)? То же самое и для сервера (справа), только с пересадкой.

Связка HTML--PHP--MySQL имеет точно такую же архитектуру.
Мне нравится, но можно пример?
 

С.

Продвинутый новичок
А какой пример тебе нужен? Ты же передешь данные от сервера (справа) клиенту (в центре) как-то. Ну так передай ему, что произошла ошибка и фиг тебе, а не данные. А он уже этот кукиш клиенту (слева) покажет.
 
Сверху