Что я должен указать в теле ответа на этот запрос POST?

Я пытаюсь сделать 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 внутри их маршрута.

Что я должен делать? Мой ответ правильный?

0

Решение

Ответ прост: вы можете поставить что вы хотите в вашем ответе. Увидеть этот вопрос.

Это проблема дизайна, а не вопрос «правильности». Вы должны спросить себя, как вы собираетесь использовать API. Когда потребитель создаст объект, понадобится ли ему удобный способ доступа к нему снова (без необходимости искать его на основании каких-то других критериев)? В этом случае вы можете вернуть только id объекта, который вы создали в своем ответе. Вы также можете вернуть весь объект в своем ответе, но будьте осторожны — в некоторых случаях в представлении базы данных может быть что-то Car это не должно быть доступно конечному пользователю. Например, может быть, они должны увидеть Car«s 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));

Обратите внимание, что в этом случае можно интерполировать $newCarId непосредственно в запрос, потому что это доверенный контент — т.е. не пользовательский ввод.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]