2016-08-23 6 views
0

Ich habe mich gefragt, was die beste Vorgehensweise ist, um zu überprüfen, ob die Auffrischungsreaktion in Ordnung ist und die Anwendung nicht blockiert wird. Ich benutze PHP/Symfony und was ich tue jedes Mal, wenn ich einen Anruf zu tun ist folgende:Bewährtes Verfahren zur Überprüfung der Auffrischungsantwort

try { 

    $response = $this->getClient()->request('GET', '/api/rest/contact/' . $email); 

} catch (\Exception $e) { 

    $logger = $this->get('monolog.logger.myapp'); 
    $logger->critical('New exception caught while getting user: ' . $e); 
    throw new HttpException(406, "Error while getting user."); 
} 

if(isset($response) && $response->getStatusCode() == 200) { 
    return $response->getBody()->getContents(); 
} 

// if it's not 200 or the response is not set, I send a JsonResponse or a flash message to be used in a form for instance: 

$this->addFlash('error', $this->get('translator')->trans('form.subscribe.fail', array(), 'messages')); 

// or 

return new JsonResponse(array('messages' => [0 => $this->get('translator')->trans('form.subscribe.fail', array(), 'messages')]), 400); 

EDIT auf die Antwort anzupassen erhalten:

try { 

    $response = $this->getClient()->request('GET', '/api/rest/contact/' . $email); 

} catch (\Exception $e) { 

    $logger = $this->get('monolog.logger.myapp'); 
    $logger->critical('New exception caught while getting user: ' . $e); 

    // the response is not 200 so I send a JsonResponse or a flash message to be used in a form for instance: 

    $this->addFlash('error', $this->get('translator')->trans('form.subscribe.fail', array(), 'messages')); 

    // or 

    return new JsonResponse(array('messages' => [0 => $this->get('translator')->trans('form.subscribe.fail', array(), 'messages')]), 400); 
} 

return $response->getBody()->getContents(); 

Antwort

1

„OK“ Endpoints' Provider hängt davon ab, . Einige Provider können mit einem Fehler antworten, selbst wenn der Statuscode = 200 ist (einige crapy-APIs tun dies).

Grundsätzlich löst Guzzle standardmäßig eine Ausnahme aus, wenn der Statuscode über einen Fehler signalisiert (Statuscode> = 400). Sie müssen also keine zusätzlichen Prüfungen durchführen, sondern nur die Ausnahmen behandeln.

BTW, siehe this answer für weitere Informationen.

+0

danke für den link! Sehr interessant die Wiederholungsfunktion. Ich habe meinen Code bearbeitet, um ihn an deine Antwort anzupassen. Ich kann also annehmen, dass die Antwort 200 war, wenn keine Ausnahme gefunden wurde, und ich kann weiterhin die Details der Antwort erhalten. Allerdings arbeite ich tatsächlich mit einer "crappy" API, wie du gesagt hast. Es gibt einen Fehler zurück, selbst wenn die Antwort 200 ist. In diesem Fall ist meine Überprüfung erforderlich. – unadivadantan

Verwandte Themen