我目前正在学习如何使用适用于PHP的Slim Framework v3来建立自己的REST API。我找到了几个教程,并且能够构建多个路由以将GET和POST请求发送到我的MySQL数据库。
接下来是我的删除请求。我找到了一个教程,显示了以下代码:
$app->delete('/todo/[{id}]', function ($request, $response, $args) {
$sth = $this->db->prepare("DELETE FROM tasks WHERE id=:id");
$sth->bindParam("id", $args['id']);
$sth->execute();
$todos = $sth->fetchAll();
return $this->response->withJson($todos);
});
事先我做了我的删除路线(正确使用这些术语吗?)几乎一样,除了我没有返回任何东西。这段代码让我感到疑惑:它是不是常见的#34;删除请求返回什么?根据我的理解,此请求假设返回表格中的所有其他条目" tasks" - 那是好习惯吗?是好的"一般来说,如果删除请求返回一些东西 - 如果是:什么?我正在努力适应最常见的做法。
旁注:我尝试使用这样的引用请求并且能够像往常一样删除某些内容。但是,它根本不会返回任何内容。
错误如下:
[...]
<h1>Slim Application Error</h1>
<p>The application could not run because of the following error:</p>
<h2>Details</h2>
<div>
<strong>Type:</strong> PDOException
</div>
<div>
<strong>Code:</strong> HY000
</div>
<div>
<strong>Message:</strong> SQLSTATE[HY000]: General error
</div>
<div>
<strong>File:</strong> /www/htdocs/src/routes.php
</div>
<div>
<strong>Line:</strong> 68
</div>
[...]
&#13;
第68行是我的情况&#34; $ todos = $ sth-&gt; fetchAll();&#34;。
添加另一个关于&#34;良好做法&#34;的问题:我想检查通过删除请求提供的ID是否存在 - 这是否会包含在路由中(检查如果它存在)?或者还有其他类似检查的做法吗?
非常感谢。
答案 0 :(得分:1)
删除请求返回某些内容是“常见的”吗?
如果删除请求返回,一般是“好”的做法 什么 - 如果是的话:什么?我正在努力适应最常见的 做法。
我会说必须退货。 删除是一项与其他任何操作一样的操作,因此当您的API客户端在特定实体上调用 delete 过程时,他们想知道该实体是否实际被删除。因此你应该归还一些东西。
你应该如何归还?
注意,这只是我的意见。
通常,REST API与协议(HTTP)“绑定”,HTTP提供了显示请求结果的绝佳选项:状态代码。您有200 OK
,404 Not Found
,500 Internal Server Error
等,Here is the reference for HTTP codes。
如果您正确使用它们,即使不适合您的API的开发人员也会理解它们并采取相应的行动。
对于“具有此ID”操作的删除实体,我将使用以下代码:
404 Not Found
:如果数据库中没有具有此ID的实体; 400 Bad Request
:如果网址中的ID无效(即不是正整数);或者你可以在这种情况下使用404,实际上。500 Internal Server Error
:如果您身边的某些内容失败。像数据库操作失败; 200 OK
:如果删除操作成功。任何具有一定经验的网络开发人员都非常了解这些代码,因此他们很容易理解结果。
根据我的理解,这个请求应该返回所有其他请求 “任务”表中的条目 - 这是一种好的做法吗?
不,不是真的。此请求调用“删除此任务”过程,并且应仅返回此特定操作的结果。以PDO为例:当你调用"DELETE FROM tasks WHERE id=:id"
时,它会返回一个布尔值,指示操作是否成功;它不会从表中返回其他记录。所以,在这里应用相同的简单逻辑。