GithubHelp home page GithubHelp logo

leslin / thinkphp5-restfulapi Goto Github PK

View Code? Open in Web Editor NEW
1.0K 68.0 354.0 5.63 MB

restful-api风格接口 APP接口 APP接口权限 oauth2.0 接口版本管理 接口鉴权

License: Other

PHP 97.60% PLpgSQL 0.26% Smarty 2.14%
thinkphp5 restful-api tp5 api-server restful thinkphp5-restfulapi

thinkphp5-restfulapi's Introduction

ThinkPHP restfulapi

LICENSE

基于ThinkPHP5.1* 基础上开发的一个简单的restful api ,带权限验证等

ThinkPHP5.1的运行环境要求PHP版本 5.6.0 以上。

详细开发文档参考 ThinkPHP5完全开发手册

使用目前tp5.1相关新增功能,包含容器依赖注入、Facade、验证器等,与上一个版本相比,简化代码量,整个代码量只有不到200行,增加鉴权白名单,refresh_token、全局异常处理等

欢迎PR

老版本tp5.0*相关代码请到release下载对应代码

目录结构

初始的目录结构如下:

www  WEB部署目录(或者子目录)==
├─application           应用目录
│  ├─common             公共模块目录(可以更改)
│  ├─api                接口目录
│  │  ├─controller      控制器目录
│  │  │     ├─v1        版本1目录
|  |  |     ├─v2        版本2目录
│  │  ├─Api.php         授权基类
│  │  ├─Oauth.php       授权验证
│  │  ├─Send.php        返回格式
|  |  |─exception       重写异常
│  │  ├─model           模型目录
|  |      ├─model     
│  │  ├─view            视图目录
│  │  └─ ...            更多类库目录
│  │
│  ├─command.php        命令行工具配置文件
│  ├─common.php         公共函数文件
│  ├─config.php         公共配置文件
│  ├─route.php          路由配置文件
│  ├─tags.php           应用行为扩展定义文件
│  └─database.php       数据库配置文件
|─config                配置文件
|-routte                路由文件
├─public                WEB目录(对外访问目录)
│  ├─index.php          入口文件
│  ├─router.php         快速测试文件
│  └─.htaccess          用于apache的重写
│
├─thinkphp              框架系统目录
│  ├─lang               语言文件目录
│  ├─library            框架类库目录
│  │  ├─think           Think类库包目录
│  │  └─traits          系统Trait目录
│  │
│  ├─tpl                系统模板目录
│  ├─base.php           基础定义文件
│  ├─console.php        控制台入口文件
│  ├─convention.php     框架惯例配置文件
│  ├─helper.php         助手函数文件
│  ├─phpunit.xml        phpunit配置文件
│  └─start.php          框架入口文件
│
├─extend                扩展类库目录
├─runtime               应用的运行时目录(可写,可定制)
├─vendor                第三方类库目录(Composer依赖库)
├─build.php             自动生成定义文件(参考)
├─composer.json         composer 定义文件
├─LICENSE.txt           授权说明文件
├─README.md             README 文件
├─think                 命令行入口文件

流程

  • router.php中定义了restful资源路由,具体请查看代码。

  • 访问相应的url,例如:http://localhost/tp5test/public/index.php/v1/user

  • user控制器是继承了Api类

  • 在Api类中,会有方法init()检测用户是否有权限调用接口

  • init方法会调用Oauth类中的鉴权,$oauth = app('app\api\controller\Oauth');;

  • 根据用户端传递过来的app_key获取缓存中的access_token,在进行对比,如果true,则可以调用user中的各种方法,否则返回不能调用原因

  • Oauth类中的具体请看代码

  • 生成access_token,缓存access_token等相关逻辑在v1/Token.php代码中,使用的是本地缓存,如果需要使用数据库或者redis请查询相关注释说明

  • api端请求需要在header中进行authentication字段拼接,拼接规则:authentication:USERID base64_encode(appid:accesstoken:uid) PS:拼接示例:USERID c25haWx5X3hjeF9uZXc6M0U1TjBtR3dGSTZjZ1BoNEpLdHY4eWQyOVpqTXM3a2Y6Mzgw ,其中USERID后面跟了个空格,空格后面的一串字符串就是appid:accesstoken:uid这几个参数base64_encode后的字符串

  • uid 就是请求生成token时候返回

不知道header怎么传,请查看文档最后一张图,如果对参数不明白,请查看代码/Application/api/controller/Oauth.php中getClient方法,里面有逆向解密authentication值。

相关流程截图

流程图

截图

  • 路由设置 route\route.php

  • Api类

  • Oauth类

  • v1/Token类

截图

1、获取token传参

2、获取token、刷新的token,过期时间,用户信息

3、传递token进行请求

  • 加密头规则:USERID base64_encode(appid:token:uid)

快速创建一个restful控制器

cd 到项目根目录

命令行 :php think make:controller api/v1/Goods

修改路由,注册一个资源路由:在route.php加入下面一行代码: Route::resource(':version/goods','api/:version.Goods');

其他说明

交流QQ群号:645233951

版权信息

遵循Apache2开源协议发布,并提供免费使用。

thinkphp5-restfulapi's People

Contributors

alexxd35 avatar dependabot[bot] avatar geehon avatar github410117 avatar helloogq avatar leslin avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

thinkphp5-restfulapi's Issues

请问refresh_token 相关功能还没有写吗?

在Oauth 类的certification方法中看到检测令牌不存在就返回错误信息了。

public static function certification($data = []){
        $getCacheAccessToken = Cache::get(self::$accessTokenPrefix . $data['access_token']);  //获取缓存access_token
        Log::record($getCacheAccessToken,'notice');
        **if(!$getCacheAccessToken){
            return self::returnMsg(401,'fail',"access_token不存在或为空");
        }**
        if($getCacheAccessToken['client']['appid'] !== $data['appid']){

            return self::returnMsg(401,'fail',"appid错误");  //appid与缓存中的appid不匹配
        }
        return $data;
    }

重复获取token 怎么删除之前的旧token

刷新令牌和 重新调用token 处理代码简洁些外有什么区别吗? 不断的获取token 不就是在刷新了吗? 我现在有个疑问是重复获取token的时候怎么让之前生成的,没有过期的, token 失效呢? 只能等2个小时吗? 或者写个中控服务 判断是否重复获取token?

刷新token啥时候用

客户端对请求是不是还要做什么判断啊 如果返回的是过期还要去刷新吗 那客户端每次ajax请求都要重复写一段去判断是否过期刷新的代码吗

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.