【问题标题】:How to set Response status code and message while using REST api in php?在 php 中使用 REST api 时如何设置响应状态代码和消息?
【发布时间】:2018-08-18 10:11:54
【问题描述】:

product.php

<?php
class Product
{
    private $conn;
    private $table_name = "category";
    public $image_name;
    public $file_s;
    public function __construct($db){
        $this->conn = $db;
    }

    function read()
    {
        $query = "SELECT * FROM ".$this->table_name." order by category_name";
        $stmt = $this->conn->prepare($query);
        $stmt->execute();
        return $stmt;
    }
}

读取.php

<?php
    header("Access-Control-Allow-Origin: *");
    header("Content-Type: application/json; charset=UTF-8");
    include_once 'dbase.php';
    include_once 'product.php';
    $database = new Database();
    $db = $database->getConnection();
    $product = new Product($db);
    $stmt = $product->read();
    $num = $stmt->rowCount();
    if($num>0)
    {
        $products_arr=array();
        $products_arr["data"]=array();
        while ($row = $stmt->fetch(PDO::FETCH_ASSOC))
        {
            extract($row);
            $product_item=array(
                "image_name" => $image_name,
                "image_url" => $file_s
            );

            array_push($products_arr["data"], $product_item);
        }

        echo json_encode($products_arr);
    }

    else{
        echo json_encode(
            array("message" => "No products found.")
        );
    }
?>

我已经创建了一个简单的 REST api,它可以完美运行,但现在的问题是我不知道如何在 php 中添加 REST api 的响应代码和响应消息?

谢谢

【问题讨论】:

  • 响应码是什么意思?
  • 响应码意味着当我们点击服务器时,它将返回 200、403、400 或者失败或成功@KhoaTruongDinh
  • or 表示失败或成功时的状态码@KhoaTruongDinh

标签: php json rest http-headers httpresponse


【解决方案1】:

这就是设置 HTTP 状态 200 的方式:

header("HTTP/1.1 200 OK");

在你的代码中应用这个:

<?php
    header("Access-Control-Allow-Origin: *");
    header("Content-Type: application/json; charset=UTF-8");
    header("HTTP/1.1 200 OK");
    include_once 'dbase.php';
    include_once 'product.php';
    $database = new Database();
    $db = $database->getConnection();
    $product = new Product($db);
    $stmt = $product->read();
    $num = $stmt->rowCount();
    if($num>0)
    {
        $products_arr=array();
        $products_arr["data"]=array();
        while ($row = $stmt->fetch(PDO::FETCH_ASSOC))
        {
            extract($row);
            $product_item=array(
                "image_name" => $image_name,
                "image_url" => $file_s
            );

            array_push($products_arr["data"], $product_item);
        }

        echo json_encode($products_arr);
    }

    else{
        echo json_encode(
            array("message" => "No products found.")
        );
    }
?>

【讨论】:

  • 是header("HTTP/1.1 200 OK");给我成功或失败的消息@Lajos Arpad
  • @omkara 似乎您将 HTTP 响应与 API 响应混为一谈。 HTTP响应是关于服务器成功发送和处理的请求。它不应与您的 API 的内部逻辑混淆。如果您的服务器端能够处理请求,并且如果您有逻辑错误(例如未找到产品),您应该始终将成功消息作为 HTTP 状态发送,即使请求已成功发送,您也需要相应地处理响应.您可能希望在响应中添加一个错误代码,这对于任何逻辑错误都是有意义的。
  • 另一件事@Lajos Arpad 我想在array() 内创建超链接,即array( "image_name"=&gt;$image_name,"image_url"=&gt;"http://localhost/android/images/image1.jpg" ) 类似的东西,但它像image_url=&gt;http:/\/\localhost/\android/\images/\image1.jpg 一样回应我的错误
  • @omkara 您需要转义特殊字符。在我们的例子中,使用 %2F 代替 / 就足够了(因为 %2F 是它的 HTML 代码),但是使用 htmlentities 对字符进行编码不会有什么坏处。在此处阅读更多信息:php.net/manual/ro/function.htmlentities.php。如果我的回答解决了您的问题,您可以考虑接受它作为正确的解决方案。
【解决方案2】:

我认为它可以解决你的问题

回显 json_encode( array("status"="404","message" => "未找到产品。") );

这里 status 是您的响应代码。 你可以根据你的修改这个响应码

【讨论】:

  • 这不会改变最终状态
【解决方案3】:

header("HTTP/1.1 200 OK"); // 此行将服务器响应设置为 200

header("HTTP/1.1 404 ERROR"); // 这会抛出 404 错误。您可以将此代码更改为任何相应的代码

【讨论】:

    猜你喜欢
    • 2015-04-20
    • 1970-01-01
    • 2016-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-20
    • 2019-09-08
    • 2011-09-04
    相关资源
    最近更新 更多