我应该在这个POST请求的响应主体中放置什么?

时间:2015-08-08 15:41:27

标签: php rest post httpresponse slim

我正在尝试创建一个使用POST的REST API在我的数据库中创建一个新对象。我正在使用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的变量。

我该怎么办?我的回答是否正确?

1 个答案:

答案 0 :(得分:0)

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

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

在任何情况下,在使用其他查询运行buyerSocialSecurityNumber查询后,您都需要获取任何其他信息。例如,假设信息不仅仅是INSERTid,我可以执行以下操作:

name

请注意,在这种情况下,将 $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)); 直接插入查询是安全的,因为它是受信任的内容 - 即不是用户输入。