对外接口与应用资源不同,应用资源为对内的后台 curd
的封装,对外接口则需要定义路由,手动编写路由操作。
Dux Next 系统默认已自带定义后的api 路由
,无需以下定义可直接使用,可直接使用 app
名为 api
的定义,以下教程仅限自定义路由使用。
在使用路由前需要先设置路由,推荐在应用入口文件中的 init
方法进行路由注册,如下定一个注册名为 test
的主路由
。
public function init(Bootstrap $app): void
{
/**
* @param string $pattern 路由前缀
* @param object ...$middleware 中间件
*/
$app->getRoute()->set("test", new DuxRoute("/test"));
}
定义的接口路由要对请求数据进行签名,需要通过后台的接口授权
进行添加并使用如下中间件:
use Dux\Api\ApiMiddleware;
use App\System\Models\SystemApi;
public function init(Bootstrap $app): void
{
/**
* @param string $pattern 路由前缀
* @param object ...$middleware 中间件
*/
$app->getRoute()->set("test",
new DuxRoute("/test",
new ApiMiddleware(function ($id) {
$apiInfo = SystemApi::query()->where('secret_id', $id)->firstOr(function () {
throw new ExceptionBusiness('Signature authorization failed', 402);
});
return $apiInfo->secret_key;
})
),
);
}
定义的接口路由有时需要接入登录等功能可以利用该路由中间件和 jwt token 生成方法进行授权处理。
利用以下方法来生成名为 member
的 jwt token,并且设置过期时间为 2592000秒
来三方或前端使用。
\Dux\Auth\Auth::token("member", [
'id' => 1,
...
], 2592000)
此利用权限中间件来进行 JWT Token 授权检测,并设置续期时间为 1728000秒
,当达到续期时间后会在接口的 headers
头中返回 Authorization
来供前端或者三方刷新授权。
use Dux\Api\ApiMiddleware;
use App\System\Models\SystemApi;
use Dux\Auth\AuthMiddleware;
public function init(Bootstrap $app): void
{
/**
* @param string $pattern 路由前缀
* @param object ...$middleware 中间件
*/
$app->getRoute()->set("test",
new DuxRoute("/test",
new ApiMiddleware(function ($id) {
$apiInfo = SystemApi::query()->where('secret_id', $id)->firstOr(function () {
throw new ExceptionBusiness('Signature authorization failed', 402);
});
return $apiInfo->secret_key;
}),
new AuthMiddleware("member", 1728000)
),
);
}