Quando l'errore è buono per inviare diversi formati?

0

Su una API REST ho questi endpoint:

GET: /tracks.json
GET: /tracks.xml
GET: /tracks.csv

Riceve un curriculum di tracce e il formato viene definito da. ^ string ^ che è dopo il resourse. Ad esempio, tracks.csv invia la tracks di resourse al client come formato csv (con l'estensione mime appropriata a Content-Type http header).

A volte viene generata un'eccezione orientata al framework che viene gestita tramite il seguente ExceptionListener .

namespace AppBundle\EventListener;

use Symfony\Component\HttpKernel\Event\GetResponseForExceptionEvent;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpKernel\Exception\HttpExceptionInterface;

class ExceptionListener
{
    public function onKernelException(GetResponseForExceptionEvent $event)
    {
        // You get the exception object from the received event
        $exception = $event->getException();
        $message = array(
            'message'=>$exception->getMessage(),
            'code'=>$exception->getCode(),
            'stacktrace'=>$exception->getTrace()
        );

        // Customize your response object to display the exception details
        $response = new Response();
        $response->setContent(json_encode($message,JSON_PRETTY_PRINT));

        // HttpExceptionInterface is a special type of exception that
        // holds status code and header details
        if ($exception instanceof HttpExceptionInterface) {
            $response->setStatusCode($exception->getStatusCode());
            $response->headers->replace($exception->getHeaders());
        } else {
            $response->setStatusCode(Response::HTTP_INTERNAL_SERVER_ERROR);
            $response->headers->set('content/type','application/json');
        }

        // Send the modified response object to the event
        $event->setResponse($response);
    }
}

Quindi ho il seguente dilema:

Utilizzare le intestazioni delle richieste http per determinare il modo in cui verrà mostrata la risposta o solo ogni volta che l'errore la lancia come json? Cosa sarebbe riposante in base al fatto che la risposta dovrebbe essere uniforme?

    
posta Dimitrios Desyllas 06.04.2017 - 18:29
fonte

1 risposta

2

Restituire un errore nel formato richiesto è perfettamente valido e preferibile. Ciò fornisce ai client della tua API un modo standardizzato per gestire le condizioni di errore e consente alla tua applicazione di comunicare l'errore al client.

Se la tua API ha un tipo di contenuto predefinito, ricorri a quella se la richiesta HTTP non specifica il tipo di contenuto. Se la tua applicazione non ha un tipo di contenuto predefinito, allora restituire JSON va bene.

Basta documentare il comportamento in modo che i clienti possano costruire nella propria gestione degli errori come meglio credono.

    
risposta data 06.04.2017 - 19:06
fonte

Leggi altre domande sui tag