【问题标题】:What should I put in the body of the response for this POST request?我应该在这个 POST 请求的响应正文中添加什么?
【发布时间】:2016-06-19 06:46:25
【问题描述】:

我正在尝试制作一个 REST API,它使用 POST 在我的数据库中创建一个新对象。我正在使用 Slim 框架。

问题在于我不确定在我的POST 方法的这些行中到底需要添加什么:

$app->response->headers->set("Content-type","application/json");
$app->response->status(200);
$app->response->body(json_encode(**Here they put the name of the type of the object that they have in their database**));

我的完整POST 路线是:

$app->post("/cars/", function() use($app)
{
    $idCar = $app->request->post("idCar");
    $name = $app->request->post("name");

    try{
        $connection = getConnection();
        $dbh = $connection->prepare("INSERT INTO cars VALUES(?,?)");
        $dbh->bindParam(1,$idCar);
        $dbh->bindParam(2,$name);

        $dbh->execute();
        $connection = null;

        $app->response->headers->set("Content-type","application/json");
        $app->response->status(200);
        $app->response->body(json_encode(**What I have to put here?**));

    }catch(PDOException $e)
    {
        echo "Error: " . $e->getMessage();
    }
});

在表cars中有对象Car

我应该这样写吗?:

$app->response->headers->set("Content-type","application/json");
$app->response->status(200);
$app->response->body(json_encode($Car));

我有点困惑,因为在我之前看到的教程中,在POST 方法中,它们没有对POST 路由内的变量名称的任何引用。例如,如果他们使用$fruit,他们没有在他们的路由中声明任何名为$fruit 的变量。

我该怎么办?我的回答正确吗?

【问题讨论】:

  • phpmyadmin 不是数据库。 MYSQL 是 `phpMyAdmin' 可以用来查看和操作的数据库!!!
  • 我建议您应该返回某种状态信息,告诉调用者该过程正确完成或失败。但是,您不会从数据库访问代码中检查任何状态,因此即使您实际上也不知道它是否成功
  • @RiggsFolly 对不起,我是这个领域的新手。你知道我在我有疑问的地方放了什么吗?谢谢你的指正!
  • @RiggsFolly 我只想使用 Android 中的 POST 方法。会有所不同吗? (我看到的教程是使用Slim framework Android
  • 您是否设置了连接以生成异常?即$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

标签: php rest post httpresponse slim


【解决方案1】:

简单的答案是您可以在回复中添加任何您想要的内容。见this question

这是一个设计问题,而不是“正确”的问题。您应该问自己打算如何使用 API。一旦消费者创建了对象,他们是否需要一种方便的方式来再次访问它(无需根据其他标准查找它)?在这种情况下,您可能只想返回您在响应中创建的对象的 id。您也可以在响应中返回整个对象,但要小心 - 在某些情况下,Car 的数据库表示中可能存在最终用户不应该使用的内容。例如,也许他们应该看到Carnamemakemodel,但看不到它的buyerSocialSecurityNumber

在任何情况下,在运行 INSERT 查询和另一个查询后,您都需要获取任何其他信息。例如,假设有比idname 更多的信息,我可以这样做:

    $connection = getConnection();
    $dbh = $connection->prepare("INSERT INTO cars VALUES(?,?)");
    $dbh->bindParam(1,$idCar);
    $dbh->bindParam(2,$name);

    $dbh->execute();

    $newCarId = $dbh->lastInsertId();
    $car = $dbh->query("SELECT * FROM cars WHERE id = $newCarId");

    $connection = null;

    $app->response->headers->set("Content-type","application/json");
    $app->response->status(200);
    $app->response->body(json_encode($car));

请注意,在这种情况下,将$newCarId 直接插入查询是安全的,因为它是受信任的内容 - 即不是用户输入。

【讨论】:

    猜你喜欢
    • 2020-04-29
    • 1970-01-01
    • 1970-01-01
    • 2019-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多