IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> PHP知识库 -> Thinkphp api接口篇 -> 正文阅读

[PHP知识库]Thinkphp api接口篇

第一天

首先我们要知道Restful Api 的编码规范 从这里开始我们的编码规范都按照这个Restful来

生成标准API

  1. 我们创建一个 Base 抽象基类,专门用于提供给子类实现 API 生成;
abstract class Base
{
	protected function create($data, $msg = '', $code = 200, $type = 'json')
	{
		//返回 api 结果
		$result = [
			//状态码
			'code' => $code,
			//自定义消息
			'msg' => $msg,
			//数据返回
			'data' => $data
		];
		//将数据返回成指定格式,默认 json
		return Response::create($result, $type);
	}
}
// PS:标准的 api 格式有三个部分组成:code(状态码)、msg(消息)、data(数据);
// PS:在 data 数据获取上,单一数据为:data:{},数据列表为:data:[{},{}];
  1. 通过 Base 基类的继承,我们想创建一个获取全部用户列表的 API 接口;
public function index()
{
	//获取数据列表
	$data = UserModel::field('id,username,gender,email')->select();
	//查询所有数据
	return $this->create($data, $data->isEmpty() ? '数据不存在' : '数据请求成功');
}

第二天

1、接口分页API

  1. 在基类 Base 基类中编写分页的方法
protected $page;
protected $pageSize;

public function __construct()
{
	$this->page = (int)Request::param('page');
	$this->pageSize = (int)Request::param('page_size', 5);
	// 这个5是默认的值,当然,基类我们写好了一般是不改的,这个参数要放在哪我不知道好吧
}

上面这个方法可以,但是有的可能会报错。(就比如我报了静态调用的错)那我们可以使用助手函数,这个也比较方便

protected $page;
protected $pageSize;

public function __construct()
{
	$this->page = $this->request->param('page');
	$this->pageSize = $this->request->param('page_size',5);
}
  1. 使用这个分类
$data = UserMode::field('id,username,prevtime,logintime,jointime')
				  ->page($this->page,$this->pageSize)
				  ->select();
// 这样就可以动态的使用这个分类了

2、单数据API

  1. 请求单数据的api没什么好说的。
public function read($id)
{
	// 这里是补充  我们可以在这边做个判断,判断是否为整形
    if (!is_numeric($id)) {
         return $this->error('id 参数错误, ~', []);
     }
	//补充
    $data = UserMode::field('id,username,prevtime,logintime,jointime,email')->find($id);

    if (empty($data)){
        return $this->success('请求成功无数据',[]);
    } else {
        return $this->success('数据请求成功',$data);
    }
}

3、新增数据API

  1. 首先是这样的,我们要将这个数据进行严重,然后再将他添加进数据库里,然后返回出他的状态以及id
// 添加新数据
public function save(Request $request)
{
    //验证返回
    if ($this->request->isPost()) {
        $username = $this->request->post('username');
        $password = $this->request->post('password');
        $email 	  = $this->request->post('email');
        $mobile   = $this->request->post('mobile');
        $data = [
            'username' => $username,
            'password' => $password,
            'email'    => $email,
            'nickname' => $username,
            'mobile'   => $mobile
        ];
		// $validate = Loader::validate('User');   实例化验证器
        $validate = validate('User');
        // 使用助手函数实例化验证器
       if(!$validate->check($data)){
            return $this->error($validate->getError(), []);
        } else {
            // 加密
            $data['password'] = sha1($data['password']);
            // 写入并返回id
            $id = UserMode::create($data)->getData('id');
            if (empty($id)){
                return $this->success('添加失败',[]);
            } else {
                return $this->success('数据请求成功',$id);
            }
        }
    } else {
        echo '不是post请求';
    }
}

第三天

1、删除数据API

  1. 首先判断,获取数据后删除
public function delete($id)
{
    // 判断id是否为整形
    if (!is_numeric($id)) {
        return $this->error('id 参数错误, ~', [],400);
    }

    // 获取数据后删除
    try {
        UserMode::find($id)->delete();
        return $this->success('删除成功',[],200);
    } catch (\Error $exception) {
    // \Error 捕获的错误
        return $this->error('数据不存在或无法删除',[],400);
    }
}

2、修改数据API

  1. 简单的修改数据API,这边我修改的email,修改密码什么的也都差不多只不过要解密加密而已
public function update(Request $request,$id)
{
    $data = $request->param();
    $validate = validate('User');
    // scene 这边开启了场景严重,因为只需要验证邮箱
    if(!$validate->scene('edit')->check($data)){
        return $this->error($validate->getError(), []);
    }
    
    // 修改时,不可以和上次一样
    $updateDate = UserMode::find($id);
    if ($updateDate->email === $data['email']) {
        return $this->error('您并没有修改', [],400);
    }
    
    // 判断是否有值
    $id = UserMode::update($data)->getData('id');
    if (empty($id)){
        return $this->success('修改失败',$id);
    } else {
        return $this->success('修改成功',$id);
    }
}

3、关联数据API

  1. 就例如,某个人所有的评论啊、文章啊,之类的 第一步先关联
public function comments()
{
    return $this->hasMany('CmsComment','user_id','id');
}
  1. 第二步简简单单
public function comment($id)
{
    if (!is_numeric($id)) {
        return $this->error('id 参数错误, ~', [],400);
    }

    // 评论数据集
    $data = UserMode::find($id)->comments()->field('id,content')->select();

    // 判断有没有数据咯
    if (empty($data)){
        return $this->success('无数据',$id);
    } else {
        return $this->success('数据请求成功',$data);
    }
    
}
  PHP知识库 最新文章
Laravel 下实现 Google 2fa 验证
UUCTF WP
DASCTF10月 web
XAMPP任意命令执行提升权限漏洞(CVE-2020-
[GYCTF2020]Easyphp
iwebsec靶场 代码执行关卡通关笔记
多个线程同步执行,多个线程依次执行,多个
php 没事记录下常用方法 (TP5.1)
php之jwt
2021-09-18
上一篇文章      下一篇文章      查看所有文章
加:2021-08-01 14:18:04  更:2021-08-01 14:19:10 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/4 13:54:08-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码