Skip to content

Latest commit

 

History

History
152 lines (115 loc) · 3.97 KB

README_zh-CN.md

File metadata and controls

152 lines (115 loc) · 3.97 KB

Batio

Build Status Branch master Latest Stable Version Latest Unstable Version License

一个快速的、可扩展的专注构建RESTful API的PHP框架

1. 安装

// 方式一.  使用 git clone
git clone https://github.com/rocboss/batio.git batio
// 方式二. 使用 composer 安装 (推荐)
composer create-project --prefer-dist rocboss/batio batio
cd batio

cp .env.example .env
// 编辑系统配置
vim .env

composer install
chmod -R 755 app/storage

php -S 127.0.0.1:8888 -t public

在浏览器地址栏输入 http://127.0.0.1:8888 网址,一切正常的情况下您可以获取如下返回:

{
  "code": 0,
  "msg": "success",
  "data": "version: Batio 1.0.0"
}

注意:初次安装需要编辑项目根目录下的 .env 文件中相关配置信息,你也可以根据具体需求在该文件中扩展其他业务配置。

2. 框架使用

2.1 路由(Router)

app\config\routes.php 中你可以自定义 API 路由。

route('GET /', ['api\HomeController', 'index']);

这是一个无鉴权的路由,访问首页时,直接映射到 api\HomeController 控制器,执行下面的 index 方法,注意控制器方法类型需要为 protected

2.2 中间件(Middlewares)

app\config\app.php 中你可以自定义 Middleware路由中间件,如实现授权验证,用户权限控制等。

// Middlewares
'middlewares' => [
    'auth' => AuthMiddleware::class,
],

Batio 封装了基于JWT的一种简单的鉴权模型,只需在需要鉴权API的路由后调用 auth() 方法,即可调用自定义认证中间件AuthMiddleware

route('GET /', ['api\HomeController', 'user'])->auth();

返回示例

// 失败,被拦截
{
    "code": 401,
    "msg": "[401 Unauthorized]."
}

// 成功,正常返回
{
    "code": 0,
    "msg": "success",
    "data": {
        "uid": 1,
        "user_name": "Jack",
        "user_age": 18
    }
}

请求时在 header 中传递以 X-Authorization 为key的 JWT 值给服务器即可。

// 该方法可用来获取 JWT
\Auth::getToken($uid);

2.3 缓存(Cache)

if (app()->cache('data')->contains('foo')) {
    $unit = app()->cache('data')->fetch('foo');
} else {
    $bar = 'bar cache';
    app()->cache('data')->save('foo', $bar);
}

2.4 日志(Log)

$logger = app()->log()->debug('debug log');

2.5 数据库(Database)与模型(Models)

$userModel = new UserModel();
$userModel->name = 'Jack';
$userModel->email = 'bar@foo.com';
$userModel->avatar = 'https://foo.com/xxxxxx.png';
$userModel->password = password_hash("mypassword", PASSWORD_DEFAULT);
$userModel->save();

app\models 中存放的是 modelservicemodel 主要和数据库(Database)直接打交道,官方推荐的做法由 service 去调用 modelcontroller 调用 service,这样设计会使得分层更加合理,各功能模块进一步解耦,便于业务系统的扩展和日后维护。

主要依赖

lcobucci/jwt: 3.2.*
mikecao/flight: 1.3.*
aryelgois/medools: 5.0
catfan/medoo: 1.5.*
monolog/monolog: 1.23.*
doctrine/cache: 1.4.*
vlucas/phpdotenv: 2.0.*
predis/predis: 1.1.*
ruflin/elastica: 6.1.*
elasticsearch/elasticsearch: 6.0.*

Batio 使用一些优秀的第三方组件,你可以从他们各自网站获得相应具体文档。

授权协议

MIT 授权协议