当前位置: 首页 > 知识库问答 >
问题:

我应该在这个POST请求的响应正文中添加什么?

许子平
2023-03-14

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

问题是我不确定在我的< code>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();
    }
});

在表< code>cars中有对象< code>Car。

我应该这样说吗?:

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

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

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

共有1个答案

高祺
2023-03-14

简单的答案是,你可以把你想要的任何东西放在你的回答中。看到这个问题。

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

在任何情况下,在使用另一个查询运行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直接插入查询是安全的,因为它是受信任的内容——即不是用户输入。

 类似资料:
  • 因此,我试图使用wiremck向带有请求正文的URL发出后请求,然后使用我的respons.json文件返回响应。(自定义响应) 我就是这样设置的,但我似乎找不到任何关于如何设置带有请求主体的post存根(包含数据,比如说尝试创建ID),然后检索自定义响应主体(从json文件创建ID响应)的信息。我该怎么设置呢。我尝试通过json文件请求生成id,然后尝试检索创建的id。 WithBodyFile

  • 我一直试图向facebook发送HTTP POST请求,但没有成功。我从服务器收到以下响应: HTTP/1.1 400不良请求内容-类型:text/html;charset=utf-8日期:2016年12月10日星期六21:28:17 GMT连接:关闭内容-长度:2959 Facebook |错误 抱歉,出了点问题,我们正在修理,会尽快修好的 我的密码 我做错了什么?

  • 问题内容: 我提出的问题可能更多是与浏览器相关的问题,但是当我冒险构建Web应用程序时,我也想找到答案。 在我的客户端代码中,我正在打电话。该帖子可能需要一段时间才能回复。我看到的是经过一定时间后再次发送请求。 我以为是我的电话再次发送了,但是无论我在服务器上看到多少次POST请求,我都只会看到一次回调。我相当确定我的代码不会多次发送,因此我认为浏览器会重试吗? 我知道我的服务器在运行Wiresh

  • 嗨,我正在通过axios尝试reactjs POST请求,但出现错误,我查看了所有文档,但错误未得到解决。 这是我的错误: 未捕获(promise中)错误:请求在XMLHttpRequest的结算(eval at(bundle.js:4621),:15:15)处的createError(eval at(bundle.js:4615),:18:12)处失败,状态代码为400。手工装载(在(捆js:4

  • 我正在尝试调用post请求将文件上载到Archer。请在下面找到我的代码: 我收到以下错误:b'{“消息”:“请求包含实体正文,但没有内容类型标头。此资源不支持推断的媒体类型“应用程序/八位字节流”,“ExceptionMessage”:“没有MediaTypeFormatter可用于从媒体类型为“application/octet stream\”的内容中读取类型为“AttachmentWrap

  • 问题内容: 我有一个包含表单(帖子)的html。单击某些提交按钮时,我会收到JSON响应。 如何获取此JSON? 如果我不截取请求,则json将显示在Web视图上,所以我想应该使用(我正在使用API​​ 12),但是我不知道如何在其中获取json。 还是有更好的方法,例如拦截响应而不是请求? 谢谢 问题答案: 您应该重写的方法