前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【coder】 Coder PHP Framework 完整的API | 教程六

【coder】 Coder PHP Framework 完整的API | 教程六

作者头像
Kunkka Wu
发布2022-01-13 11:02:27
2840
发布2022-01-13 11:02:27
举报
文章被收录于专栏:算法协议算法协议

完整的API: 这里以用户的增删改查为例子。包含:路由、控制器、服务、数据模型、错误码、抛出异常等功能。主要是:帮助新同学熟悉 API服务的开发流程和规范。

配置参数

.env文件中配置Mysql数据库的参数

代码语言:javascript
复制
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=coder
DB_USERNAME=coder
DB_PASSWORD=123456

创建数据库 coder

代码语言:javascript
复制
create database `coder` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

这里我们默认字符集为utf8mb4,改字符集支持emoji类的表情符号。

创建user表

代码语言:javascript
复制
CREATE TABLE `user` (
   `uid` int(11) NOT NULL AUTO_INCREMENT,
   `username` varchar(24) DEFAULT NULL,
   `password` varchar(64) DEFAULT NULL,
   `enabled` enum('1','0') DEFAULT '1',
   `create_time` datetime DEFAULT NULL,
   PRIMARY KEY (`id`)
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4

至此,数据库部分准备完成。

添加路由

在routesweb.php中添加路由

代码语言:javascript
复制
Route::get('/user/list', 'UserController@index   //获取列表
Route::get('/user/info', 'UserController@info');  //获取详情
Route::post('/user/create', 'UserController@create');  //添加用户
Route::post('/user/update', 'UserController@update');  //更新用户
Route::post('/user/delete', 'UserController@delete'); //删除用户

添加控制器

在appHttpControllers下添加UserController.php

写入如下代码:

代码语言:javascript
复制
<?php

namespace App\Http\Controllers;  //声明Controller命名空间

use App\Exceptions\ServiceException;
use App\Libs\MessageCode;
use App\Services\UserService;
use System\Request;
use System\Response;
use System\Validator;

class UserController extends Controller {
    //获取列表
    public function index(Request $request){
        try {
            $data = UserService::getList();
            return Response::json($data);
        } catch (ServiceException $e){
            return Response::error($e);
        }
    }

    //获取详情
    public function info(Request $request){
        try {
            $params = $request->all();
            $validate = Validator::make($params, [  //参数验证,具体规则参考 Validator类
                'uid' => 'required',
            ]);
            if($validate->fails()){
                throw new ServiceException(MessageCode::ILLEGAL_PARAMETERS);
            }
            $data = UserService::getInfo($params);  //调用服务
            return Response::json($data);  //Response 类按照Json格式输出
        } catch (ServiceException $e){  //捕获异常
            return Response::error($e);
        }
    }

    public function create(Request $request){
        try {
            $params = $request->all();
            $validate = Validator::make($params, [
                'username' => 'required|min:4',
                'password' => 'required|between:6,20'
            ]);
            if($validate->fails()){
                throw new ServiceException(MessageCode::ILLEGAL_PARAMETERS);
            }

            $result = UserService::create($params);
            return Response::json($result);
        } catch (ServiceException $e){
            return Response::error($e);
        }
    }

    public function update(Request $request){
        try {
            $params = $request->all();
            $validate = Validator::make($params, [
                'uid' => 'required',
            ]);
            if($validate->fails()){
                throw new ServiceException(MessageCode::ILLEGAL_PARAMETERS);
            }

            $result = UserService::update($params);
            return Response::json($result);
        } catch (ServiceException $e){
            return Response::error($e);
        }
    }

    public function delete(Request $request){
        try {
            $params = $request->all();
            $validate = Validator::make($params, [
                'uid' => 'required',
            ]);
            if($validate->fails()){
                throw new ServiceException(MessageCode::ILLEGAL_PARAMETERS);
            }

            $result = UserService::delete($params);
            return Response::json($result);
        } catch (ServiceException $e){
            return Response::error($e);
        }
    }

}

添加Service

在appServices下添加UserService.php文件,写入如下内容:

代码语言:javascript
复制
<?php
namespace App\Services;  //声明Service命名空间

use App\Exceptions\ServiceException;
use App\Libs\MessageCode;
use App\Models\UserModel;

class UserService{

    public static function getList(){
        return UserModel::getInstance()->getList();
    }

    public static function getInfo($data){
        if(empty($data['uid'])){
            throw new ServiceException(MessageCode::PARAMETERS_ERROR);
        }
        return UserModel::getInstance()->getInfo($data['uid']);
    }

    public static function create($data){
        if(empty($data['username']) || empty($data['password'])){
            throw new ServiceException(MessageCode::PARAMETERS_ERROR); //抛出异常
        }

        $insertData = [
            'username' => $data['username'],
            'password' => md5($data['password'])
        ];

        return UserModel::getInstance()->create($insertData); //调用Model
    }

    public static function update($data){
        if(empty($data['uid'])){
            throw new ServiceException(MessageCode::PARAMETERS_ERROR);
        }
        $updateData = [];

        if(!empty($data['username'])){
            $updateData['username'] = $data['username'];
        }

        if(!empty($data['password'])){
            $updateData['password'] = md5($data['password']);
        }

        return UserModel::getInstance()->update($updateData, $data['uid']);
    }

    public static function delete($data){
        if(empty($data['uid'])){
            throw new ServiceException(MessageCode::PARAMETERS_ERROR);
        }
        return UserModel::getInstance()->delete($data['uid']);
    }

}

添加Model

在appModels下添加UserModel.php,写入如下内容:

代码语言:javascript
复制
<?php

namespace App\Models;  //声明Model的命名空间

use System\DB;

class UserModel extends DB  {

    protected $table = 'user';
    private static $_instance;
    protected $_pk = 'uid';

    public static function getInstance() {
        if (!self::$_instance) {
            self::$_instance = new self();
        }
        return self::$_instance;
    }
}

至此,一个简单的完整的API就编写完成了。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-01-15 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 配置参数
  • 创建数据库 coder
  • 创建user表
  • 添加路由
  • 添加控制器
  • 添加Service
  • 添加Model
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档