首先了解一下这四个请求的区别
1.GET 请求
用途:获取资源(只读操作,不修改服务器数据)。
特点:
参数通过 URL 的 查询字符串(Query String) 传递(例如 /book?id=1)。
数据在 URL 中可见,不安全(不适合敏感信息)。
幂等性:多次请求结果相同。
安全性:不会修改服务器资源。
2.POST 请求
用途:创建新资源(每次请求可能产生不同结果)。
特点:
参数通过 请求体(Request Body) 传递(支持 JSON、表单等格式)。
数据在 URL 中不可见,相对安全。
非幂等性:多次提交可能创建多个资源。
3.PUT 请求
用途:全量更新资源(要求客户端提供完整的资源数据)。
特点:
参数通过 请求体 传递(如 JSON)。
幂等性:多次请求结果相同(例如重复更新同一资源,最终状态一致)。
需要指定资源的唯一标识(如 /books/1)。
4.DELETE 请求
用途:删除资源。
特点:
通常不需要请求体,资源标识通过 URL 指定(如 /books/1)。
幂等性:多次删除同一资源,结果一致(第一次删除成功,后续返回 404)。
使用thinkphp创建四种请求的样例
1.get请求
注意这段代码是在controller层的,同时不能直接return 字符串以外别的类型,所以进行了json转换。
#[Route("GET", "getPage")]
public function page()
{
return json_encode(['1', '2']);
}
请求结果
2.post请求
注意这段代码是在controller层的,是使用halt直接中断输出,他会里面的内容进行dump。
#[Route("POST", "add")]
public function add()
{
halt($this->request->post());
}
请求结果
3.put请求
注意这段代码是在controller层的,isPut会判断请求类型是不是Put,其实在定制路由时就限制了请求类型,这里不判断也是可以的。
#[Route("PUT", "update")]
public function update()
{
if ($this->request->isPut()) {
halt($this->request->param());
}
}
请求结果
4.delete请求
注意这段代码是在controller层的,可以在param里写你要接受的指定参数。
#[Route("DELETE", "delete")]
public function delete()
{
halt($this->request->param('id'));
}
请求结果
完整代码
namespace app\controller;
use app\BaseController;
use think\annotation\route\Group;
use think\annotation\route\Route;
#[Group("Books")]
class Books extends BaseController
{
#[Route("GET", "getPage")]
public function page()
{
return json_encode(['1', '2']);
}
#[Route("POST", "add")]
public function add()
{
halt($this->request->post());
}
#[Route("PUT", "update")]
public function update()
{
if ($this->request->isPut()) {
halt($this->request->param());
}
}
#[Route("DELETE", "delete")]
public function delete()
{
halt($this->request->param('id'));
}
}
注意如果use think\annotation\route\Group; use think\annotation\route\Route;
报错。
需要安装额外插件
composer require topthink/think-annotation