возврат и обработка ошибок из вызова API внутри функции

#php #error-handling

#php #обработка ошибок

Вопрос:

Является ли хорошей практикой объединение return и error handling внутри функции?

Ответ Api возвращает успех (true или false), идентификатор из таблицы и сообщение (если содержит ошибку). Я также хочу знать, почему произошла ошибка. Например:

 $response = [
    'success' => false,
    'message' => 'Failed to generate an id and bla bla bla',
];
  

Какой из них лучше?

 //1
public function store(Request $request)
    try {
        $response = $this->apiCall();
        if($response['success'] == true){
            $id = $response['id'];
            //and then Insert ``id`` in a table
        } else {
            throw new ErrorException($response['message']);
        }
    } catch(Exception $e){
        //But i need to know why the error happened
        dd($e); //Returns 'Failed to generate an id and bla bla bla'            
    }
}

public function apiCall()
{
    $guzzle = new Client;
    $response = $guzzle->post('https://api_url.com', [
        'form_params' => [
            'dummy' => 123,
        ],
    ]);

    return $response;
}  

//VS

//2
public function store2(Request $request)
    try {
        $id = $this->apiCall2();
        //and then Insert ``id`` in a table
    } catch(Exception $e){
        //But i need to know why the error happened
        dd($e); //Returns 'Failed to generate an id and bla bla bla'
        
    }
}
    
public function apiCall2()
{
    $guzzle = new Client;
    $response = $guzzle->post('https://api_url.com', [
        'form_params' => [
            'dummy' => 123,
        ],
    ]);

    if($response['success'] == true){
        return $response['id'];
    } else {
        throw new ErrorException($response['message']);
    }

    return null;
}  
  

Комментарии:

1. оба в порядке, хотя я бы использовал первый, но я предложу проверить, всегда ли вы получаете true false как логическое значение или в строке

Ответ №1:

Может быть много причин для сбоя вызова API, и это зависит от того, как разработчик API справился с этим. Всегда рекомендуется использовать try-catch для вызова API, и вы можете записать сообщение об ошибке или вернуть его обратно в ответ функции.