我正在尝试创建一个使用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
的变量。
我该怎么办?我的回答是否正确?
答案 0 :(得分:0)
简单的答案是,您可以在回复中添加您想要的任何内容。请参阅this question。
这是一个设计问题,而不是“正确”的问题。您应该问自己打算如何使用API。一旦消费者创建了对象,他们是否需要一种方便的方法来再次访问它(而不必根据其他一些标准查找)?在这种情况下,您可能只想返回在响应中创建的对象的id
。您也可以在响应中返回整个对象,但要小心 - 在某些情况下,最终用户可能无法使用Car
的数据库表示形式。例如,也许他们应该看到Car
的{{1}},name
和make
,而不是model
。
在任何情况下,在使用其他查询运行buyerSocialSecurityNumber
查询后,您都需要获取任何其他信息。例如,假设信息不仅仅是INSERT
和id
,我可以执行以下操作:
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));
直接插入查询是安全的,因为它是受信任的内容 - 即不是用户输入。