Podczas obsÅugi Å¼Ä dania RESTfulowego API, w przypadku wystÄ pienia bÅÄdu w zapytaniu użytkownika lub gdy stanie siÄ coÅ nieprzewidywanego z serwerem, możesz po prostu rzuciÄ wyjÄ tkiem, aby powiadomiÄ użytkownika, że coÅ poszÅo nieprawidÅowo. JeÅli możesz zidentyfikowaÄ przyczynÄ bÅÄdu (np. Å¼Ä dany zasób nie istnieje), powinieneÅ rozważyÄ rzucenie wyjÄ tkiem razem z odpowiednim kodem statusu HTTP (np. NotFoundHttpException odpowiada statusowi o kodzie 404). Yii wyÅle odpowiedź razem z odpowiadajÄ cym jej kodem i treÅciÄ statusu HTTP. Yii doÅÄ czy również do samej odpowiedzi zserializowanÄ reprezentacjÄ wyjÄ tku. PrzykÅadowo:
HTTP/1.1 404 Not Found
Date: Sun, 02 Mar 2014 05:31:43 GMT
Server: Apache/2.2.26 (Unix) DAV/2 PHP/5.4.20 mod_ssl/2.2.26 OpenSSL/0.9.8y
Transfer-Encoding: chunked
Content-Type: application/json; charset=UTF-8
{
"name": "Not Found Exception",
"message": "The requested resource was not found.",
"code": 0,
"status": 404
}
Poniższa lista zawiera kody statusów HTTP, które sÄ używane przez Yii REST framework:
200
: OK. Wszystko dziaÅa w porzÄ
dku.201
: Zasób zostaÅ poprawnie stworzony w odpowiedzi na żÄ
danie POST
. NagÅówek Location
zawiera URL kierujÄ
cy do nowoutworzonego zasobu.204
: Å»Ä
danie zostaÅo poprawnie przetworzone, ale odpowiedź nie zawiera treÅci (jak w przypadku żÄ
dania DELETE
).304
: Zasób nie zostaÅ zmodyfikowany. Można użyÄ wersji przetrzymywanej w pamiÄci podrÄcznej.400
: NieprawidÅowe żÄ
danie. Może byÄ spowodowane przez wiele czynników po stronie użytkownika, takich jak przekazanie nieprawidÅowych danych JSON,
nieprawidÅowych parametrów akcji, itp.401
: Nieudana autentykacja.403
: Autoryzowany użytkownik nie ma uprawnieÅ do danego punktu koÅcowego API.404
: Å»Ä
dany zasób nie istnieje.405
: Niedozwolona metoda. Sprawdź nagÅówek Allow
, aby poznaÄ dozwolone metody HTTP.415
: Niewspierany typ mediów. Å»Ä
dany typ zawartoÅci lub numer wersji jest nieprawidÅowy.422
: Nieudana walidacja danych (dla przykÅadu w odpowiedzi na żÄ
danie POST
). Sprawdź treÅÄ odpowiedzi, aby poznaÄ szczegóÅy bÅÄdu.429
: Zbyt wiele żÄ
daÅ. Å»Ä
danie zostaÅo odrzucone z powodu osiagniÄcia limitu użycia.500
: WewnÄtrzny bÅÄ
d serwera. To może byÄ spowodowane wewnÄtrznymi bÅÄdami programu.Czasem wymagane może byÄ dostosowanie domyÅlnego formatu bÅÄdnej odpowiedzi. Dla przykÅadu, zamiast używaÄ różnych statusów HTTP dla oznaczenia różnych bÅÄdów, można serwowaÄ zawsze status 200 i dodawaÄ prawidÅowy kod statusu HTTP jako czÄÅÄ struktury JSON w odpowiedzi, jak pokazano to poniżej:
HTTP/1.1 200 OK
Date: Sun, 02 Mar 2014 05:31:43 GMT
Server: Apache/2.2.26 (Unix) DAV/2 PHP/5.4.20 mod_ssl/2.2.26 OpenSSL/0.9.8y
Transfer-Encoding: chunked
Content-Type: application/json; charset=UTF-8
{
"success": false,
"data": {
"name": "Not Found Exception",
"message": "The requested resource was not found.",
"code": 0,
"status": 404
}
}
Aby osiÄ
gnÄ
Ä powyższy efekt, należy skonfigurowaÄ odpowiedź na event beforeSend
dla komponentu response
w aplikacji:
return [
// ...
'components' => [
'response' => [
'class' => 'yii\web\Response',
'on beforeSend' => function ($event) {
$response = $event->sender;
if ($response->data !== null && Yii::$app->request->get('suppress_response_code')) {
$response->data = [
'success' => $response->isSuccessful,
'data' => $response->data,
];
$response->statusCode = 200;
}
},
],
],
];
Powyższy kod zreformatuje odpowiedź (zarówno typu sukces jak i bÅÄ
d), kiedy suppress_response_code
zostanie przekazane jako parametr GET
.
Found a typo or you think this page needs improvement?
Edit it on github !
Signup or Login in order to comment.