25 后端api开发(学习笔记)

85 阅读3分钟

252、后端api开发工具准备

1. 工具准备

api调试管理工具 postman

www.getpostman.com/downloads/

IDE编辑器 VScode

下载地址:code.visualstudio.com/

本地运行环境工具 UPUPWANK(win)

www.upupw.net/

2. 打开UPUPW之后N模式,一键开启
  1. 功能扩展——phpMyAdmin管理,进入数据库可视化工具 密码从数据库管理获取——修改密码为root
  2. 功能扩展——Redis管理,进入redis可视化工具

253、安装thinkphp6和配置(一)

1. 配置php环境变量

打开upupw的安装路径——Modules——PHPX——PHP73——复制路径 此电脑右击——属性——高级系统设置——环境变量——系统变量——Path——编辑——新建——粘贴 验证:打开命令行工具——出现版本说明完成配置

2. 安装composer

可以参照菜鸟教程:Composer 安装与使用 | 菜鸟教程 (runoob.com)

  • 安装地址是配置环境变量的路径下面
  • 安装完成打开命令行检验一下:composer --version
  • 然后配置镜像——打开下面链接

www.kancloud.cn/manual/thin…

命令行:composer config -g repo.packagist composer

mirrors.aliyun.com/composer/

  • 打开upupw(创建站点)——首页(+)——添加虚拟机:
网址名称:shop.test;    
主要域名:shop.test;
PHP:7.3.X
  • 功能扩展——Hosts重定向——域名提交保存
  • 首页——编辑——目录——cmd
  • 安装稳定版本:composer create-project topthink/think tp
  • cd tp然后运行:composer update topthink/framework

254、安装thinkphp6和配置(二)

1. 查看虚拟域名
  • 浏览器地址栏输入shop.test,此时是有问题的

  • 找到D:\UPUPW_ANK_W64\WebRoot\Vhosts\shop.test\tp\public复制

  • 打开upupw——首页——编辑——点击编辑

    网址路径:粘贴——提交修改

  • 去浏览器刷新出现 “:)” 表示成功了

2. 打开编辑器vscode
  • 打开文件夹:D:\UPUPW_ANK_W64\WebRoot\Vhosts\shop.test\tp
  • 打开之后——找到.example.env重命名为.env
  • 修改app\controller->index.php
<?php 
namespace app\controller; 
use app\BaseController; 
class Index extends BaseController{ 
    public function index(){ 
        return '蒂莎IT学院'; 
    } 
    public function hello($name = 'ThinkPHP6') { 
        return 'hello,' . $name; 
    } 
}

router->app.php

// +---------------------------------------------------------------------- 
// | ThinkPHP [ WE CAN DO IT JUST THINK ] 
// +---------------------------------------------------------------------- 
// | Copyright (c) 2006~2018 http://thinkphp.cn All rights reserved. 
// +---------------------------------------------------------------------- 
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 ) 
// +---------------------------------------------------------------------- 
// | Author: liu21st <liu21st@gmail.com> 
// +---------------------------------------------------------------------- 
use think\facade\Route; 
Route::get('think', function () { 
    return 'hello,ThinkPHP6!'; 
}); 
Route::get('hello/:name', 'index/hello');
  • 对照上面两段代码的name有关联

    在浏览器输入shop.test/hello/123访问不到 输入shop.test/index.php/hello/123就能访问到

3. 隐藏入口文件
  • 打开upupw——(虚拟主机)伪静态配置——复制以下代码——提交修改

[apache]

<IfModule mod_rewrite.c> 
    Options +FollowSymlinks -Multiviews 
    RewriteEngine On 

    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteRule ^(.*)$ index.php?/$1 [QSA,PT,L] 
</IfModule>
  • 在浏览器输入shop.test/hello/123就能访问到了(隐藏了index.php)
  • 访问think:shop.test/think

255、api输出格式和自定义方法

app/common.php

<?php 
// 应用公共文件 
// 成功返回 
function showSuccess($data = '',$msg = 'ok',$code = 200){ 
    return json([ 
        'msg'=>$msg, 
        'data'=>$data 
    ],$code); 
} 
// 失败返回 
function showError($msg = 'fail',$code = 400){ 
    return json([ 
        'msg'=>$msg 
    ],$code); 
}

controller/index.php

<?php 
namespace app\controller; 
use app\BaseController; 
class Index extends BaseController { 
    public function index() { 
        // 数据 code header 可选参数 
        // $list=[1,2,3,4,5]; 
        // return showSuccess($list); 
        return showError('记录不在'); 
    } 
    public function hello($name = 'ThinkPHP6') { 
        return 'hello,' . $name; 
    } 
}

256、全局异常处理

app/ExceptionHandle.php

public function render($request, Throwable $e): Response { 
    // 参数验证 
    if ($e instanceof ValidateException) { 
        return json($e->getError(), 422); 
    } 
    // 调试模式 
    if (env('APP_DEBUG')) { 
        // 其他错误交给系统处理 
        return parent::render($request, $e); 
    } 
    $headers = $e->getHeaders(); 
    return json([ 
        'msg'=>$e->getMessage(), 
        'errorCode'=>$e->getStatusCode() 
    ],array_key_exists('statusCode',$headers) ? $headers['statusCode'] : 404); 
}

.env

APP_DEBUG = false

app/common.php

// 抛出异常 
function ApiException($msg = '请求错误',$errorCode = 20000,$statusCode = 404) { 
    abort($errorCode, $msg,[ 
        'statusCode' => $statusCode 
    ]); 
} 
// 成功返回 
function showSuccess($data = '',$msg = 'ok',$code = 200){ 
    return json([ 'msg' => $msg, 'data' => $data ],$code);
} 
// 失败返回 
function showError($msg = 'error',$code = 400){ 
    return json([ 'msg' => $msg ],$code); 
} 
...

257、数据库创建和配置

  • 打开upupw——功能扩展——phpMyAdmin管理

  • 点击New——新建数据库——创建

    数据库名:shoptest 排序规则:utf8_general_ci

  • 创建数据表——导入——选择文件(下载好的数据库数据文件)——执行

  • 打开项目——.env——配置数据库

.env文件

APP_DEBUG = true 
[APP] 
DEFAULT_TIMEZONE = Asia/Shanghai 
[DATABASE] 
TYPE = mysql 
HOSTNAME = 127.0.0.1 
DATABASE = shoptest 
USERNAME = root 
PASSWORD = root 
HOSTPORT = 3306 
CHARSET = utf8 
DEBUG = true 
[LANG] 
default_lang = zh-cn

258、创建管理员功能(一)

  • 打开终端vscode:ctrl+`:查看命令行php think
  • 创建模型:php think make:model Manager——自定生成app->model->Manager.php(manager表对应的模型文件:可对表进行增删改查) 获取前端传过来的参数
  • 新建一个控制器:php think make:controller admin/Manager(为了方便管理建一个admin目录)
  • 新建路由:route->admin.php(管理后台模块所有路由)——复制粘贴app.php 后端相应参数
<?php 
use think\facade\Route; // 分组创建 
Route::group('admin',function(){ 
    // 创建管理员 
    Route::post('manager','admin.Manager/save'); 
});
  • 在postman中新建一个文件目录——新建一个请求

POST shop.test/admin/manag…

{ 
    "msg": "ok", 
    "data": "save" 
}

259、创建管理员功能(二)

打开postman、编辑器、数据库,三个相结合使用

controller/admin/Manager.php

/** 
* 创建管理员 * 
* @param \think\Request $request 
* @return \think\Response 
*/ 
public function save(Request $request) { 
    // 新建模型 
    $M = new \app\model\Manager(); 
    // $param = $request->param(); /
    / 数据过滤 
    $param = $request->only(['username','password','avatar','role_id','status']); 
    // 将请求参数传入(写入)save方法 
    $res = $M->save($param); 
    return showSuccess('save'); 
}

model/Manager.php

class Manager extends Model { 
    // 修改器 
    public function setPasswordAttr($value,$data){ 
        // 将密码加密 return 
        password_hash($value,PASSWORD_DEFAULT); 
    } 
}

打开postman——Body——x-www-form-urlencoded

username:admin 
password:admin 
avatar 
role_id:2 
status:1 
super:1

本文为网易云课堂Vue.js进阶技巧实战开发 第252课时-259课时“后端api开发”学习笔记