2015-08-08 2 views
0

Я пытаюсь создать REST API, который использует POST для создания нового объекта в моей базе данных. Я использую структуру Slim.Что я должен положить в тело ответа для этого запроса POST?

проблема это то, что я не уверен, что я точно должен положить в этих линиях на моем 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

'phpmyadmin' не является базой данных. ** MYSQL ** - это база данных, в которой 'phpMyAdmin 'может использоваться для просмотра и управления !!! – RiggsFolly

+0

Я бы предположил, что вы должны возвращать какую-то информацию о статусе, сообщающую вызывающему, что процесс завершен правильно или не выполнен. Однако вы не проверяете какие-либо статусы из кода доступа к базе данных, чтобы даже вы не знали, успешно ли это или нет. – RiggsFolly

+0

@RiggsFolly Извините, я действительно новичок в этой области. Знаете ли вы, что я ставлю на место, у меня есть сомнения? Спасибо, что поправили меня! –

ответ

0

Простой ответ заключается в том, что вы можете поставить все, что хотите, в вашем ответе. См. this question.

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

 Смежные вопросы

  • Нет связанных вопросов^_^