Возврат кодов состояния http с помощью rest API

Я создаю свой собственный API для отдыха в php для практики. Я могу оценить http-код, отправленный на мой API (опубликовать, поместить, удалить, получить). Но когда я отправляю свой ответ, я действительно просто распечатываю json. Например, я создаю ответ в своем API следующим образом

    public function actionTest()
    {
        $rtn=array("id":"3","name":"John");
        print json_encode($rtn);
    }

Я никоим образом не манипулирую заголовками. Из чтения stackoverflow я понимаю, что должен возвращать коды ответов http, чтобы они соответствовали моим результатам API. Как я могу использовать свой API и возвращать коды ответов. Я просто не понимаю, как я могу это сделать, потому что сейчас я просто распечатываю json.

Я не спрашиваю, какие коды возвращать. Я просто хочу знать, как вообще возвращать коды.


person Gilberg    schedule 18.01.2014    source источник
comment
Будет ли это подходящим способом http_response_code(); Кроме того, является ли печать json приемлемым способом отправки ответа?   -  person Gilberg    schedule 18.01.2014


Ответы (1)


Вы можете переосмыслить свой код таким образом

public function actionTest()
{
    try {
        // Here: everything went ok. So before returning JSON, you can setup HTTP status code too
        $rtn = array("id", "3", "name", "John");
        http_response_code(200);
        print json_encode($rtn);
    }
    catch (SomeException $ex) {
        $rtn = array("id", "3", "error", "something wrong happened");
        http_response_code(500);
        print json_encode($rtn);
    }
}

По сути, перед потоковой передачей вывода (данные JSON) вы можете установить код состояния HTTP с помощью функции http_response_code($code).

А что касается вашего дополнительного вопроса в комментарии, да, печать данных JSON - правильный способ.

person Eddie C.    schedule 18.01.2014
comment
Я использовал, как вы упомянули http_response_code(500); но все еще не могу показать статус в заголовке. Я использую настольное приложение postman для вызова остальных API - person Sachin Sarola; 04.10.2018
comment
Привет, @SachinSarola, убедитесь, что вы не отправляете никаких выходных данных перед вызовом $result = http_response_code(500). Кроме того, проверьте фактическое значение, возвращаемое в переменной $result, чтобы убедиться, что операция выполнена успешно. - person Eddie C.; 06.10.2018