使用REST API返回HTTP状态码

7

我正在用PHP练习构建自己的REST API。我可以评估发送到我的API的HTTP代码(POST、PUT、DELETE、GET)。但是当我发送响应时,我实际上只是打印出一个JSON。例如,我在我的API中构建响应如下:

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

我没有以任何方式操纵头信息。从阅读stackoverflow的内容中,我了解到应该返回与我的API结果相匹配的HTTP响应代码。我该如何在我的API上构建并返回响应代码呢?因为现在我只是打印出一个JSON,所以我不明白如何做到这一点。

我不是在问应该返回哪些代码,我只想知道如何一般性地返回代码。


这是正确的方法吗 http_response_code(); 另外,打印JSON是发送响应的接受方式吗? - Gilberg
1个回答

23

你可以以这种方式重新思考你的代码

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_response_code($code)函数设置HTTP状态码。

至于您在评论中的附加问题,是的,打印JSON数据是正确的方式。


我按照你提到的方法使用了 "http_response_code(500);",但仍然无法在标头中显示状态。我使用Postman桌面应用程序调用REST API。 - Sachin Sarola
嗨 @SachinSarola,请检查在调用 $result = http_response_code(500) 之前是否有任何输出。另外,请检查 $result 变量返回的实际值,确保操作成功完成。 - Eddie C.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接