作为一名具有一定后端开发经验但称不上丰富的IT人,想要自己独立完成一个Webapi项目,自知后台安全是整个项目生存的根本,自己又不具备强悍的后台api开发能力,于是就想到是否有后端的同仁已经准备了这种现成的Api管理后台,晚上搜罗了一圈,看到Apiadmin,专门作为api后台。
官方的介绍如下:
ApiAdmin从3.0开始,更加专注于API,将原先的MVC的架构转变为MVVM的方式,从管理系统本身出发彻底转变为纯API项目。所以ApiAdmin3.0是一个前后分离的项目,当前只针对PHP(后端) 部分,前端(Vue)部分是一个完全独立的全新项目,请移步 ApiAdmin-WEB
系统需求
PHP >= 5.6
MySQL >= 5.5.3
Redis
步骤:
一、配置本地站点
本地需要配置两个站点,一个提供api服务、一个显示后台页面。
准备好两个域名,task.6feel.com
(apiadmin后台地址)、taskweb.6feel.com
(apiadmin-web前端可视化页面地址),如果只做本地演示,可以修改本地host文件,配置以上两个域名。
这里使用wamp3.0.2(提取码:5q6a )安装的apache环境,修改httpd-vhosts.conf
,
<VirtualHost *:80>
DocumentRoot "D:/wamp/www/ApiAdmin/public"
ServerName task.6feel.com
</VirtualHost>
<VirtualHost *:80>
DocumentRoot "D:/wamp/www/ApiAdmin-WEB/dist"
ServerName taskweb.6feel.com
</VirtualHost>
.host文件修改
127.0.0.9 task.6feel.com
127.0.0.10 taskweb.6feel.com
二、下载官方源代码
安装好git,然后使用git下载ApiAdmin
源代码和ApiAdmin-WEB
源代码
//下载ApiAdmin
git clone https://gitee.com/apiadmin/ApiAdmin.git
//下载ApiAdmin-WEB
git clone https://gitee.com/apiadmin/ApiAdmin-WEB.git
三、配置ApiAdmin
1、找到项目中的SQL数据库文件,并导入到MySQL
ApiAdmin / data / apiadmin_3.0.6.sql
2、修改数据库配置文件
ApiAdmin / application / database.php
'hostname' => '127.0.0.1', //修改成您MYSQL的实际地址
// 数据库名
'database' => 'apiadmin', //导入SQL时的库名
// 用户名
'username' => 'root', // 具有您所配置数据库所有权的用户名,不推荐使用root账号
// 密码
'password' => '123456', // 密码
3、打开您的地址如看到以下信息,👍恭喜您成功的安装了 ApiAdmin的后端PHP部分🎉🎉🎉
{
"code": 1,
"msg": "操作成功",
"data": {
"Product": "NwTownApi",
"Version": "v3.0",
"Company": "ApiAdmin开发维护团队",
"ToYou": "I'm glad to meet you(终于等到你!)"
},
"debug": [
{
"TpVersion": "5.0.16"
}
]
}
如果本地没有安装
redis
,务必将config.php中缓存设置type=>File
,默认是Redis
。
四、配置ApiAdmin-WEB
配置可视化后台部份需要了解vue,webpack,npm
的基本知识,当然你可以和我一起来搭建它。
在开始之前,请先确保如下环境已经成功安装nodejs
,然后进入项目目录,使用npm
初始化项目:
npm install
经过一段时间等待,如果一切顺利,Node会自动帮你打开浏览器,提供预览。同时,您的Commond会显示webpack: Compiled successfully. !
1、修改配置文件:webpack.prod.config.js
/build/webpack.prod.config.js中的publicPath参数需要变更为你自己的前端域名
output: {
publicPath: 'http://apiweb.6feel.com/dist/', // 修改 https://admin.apiadmin.org 这部分为你的静态部署服务器所配置的域名 与PHP后端非同一域名,最后的/dist/必须带,指向静态文件目录
filename: '[name].[hash].js',
chunkFilename: '[name].[hash].chunk.js'
}
2、修改配置文件:config.js
/build/config.js中的baseUrl参数需要变更为你自己的后端域名
let config = {
env: 'development',
baseUrl: 'http://api.6feel.com/admin/' // https://api.apiadmin.org更改为您项目的PHP后端域名
};
export default config;
3、编译项目,生成web文件
npm run build
执行命令后,我们可以看到dist
目录下多出来一个dist
目录和index.html
文件。
我们把dist目录、index.html文件上传到静态部署服务器就可以在线上看到您的可视化后台了。
接口案例演示
1、创建获取access_token接口
当前算法主要服务于获取身份令牌(AccessToken)所进行的身份认证秘钥(signature)的计算。在请求高级接口的时候,系统会验证应用的合法性,也就是验证AccessToken。所以AccessToken是请求API的必要参数。
在请求获取AccessToken的接口时候,服务器会对用户合法性(signature)进行核验,具体的接口请求字段,请参看具体的接口文档。
一、获取app_id和app_secret
目前获取应用ID和应用秘钥是由系统管理员发放,如果你还没有请联系管理员。 请注意:app_secret非常重要请妥善保管
二、准备加密对象,并且根据字段名降序排序
//排序好后应当是如下所示的数据
{
"app_id":"服务器颁发的应用ID",
"app_secret":"服务器颁发的应用秘钥", //请注意,此字段只是在计算加密串的时候在被加入,API请求请勿传递此字段值
"device_id":"设备唯一ID",
"rand_str":"随机字符串",
"timestamp":当前系统时间戳
}
三、生成原始串
将上面的数据构建成HTTP查询字符串,如下所示:
app_id=服务器颁发的应用ID&app_secret=服务器颁发的应用秘钥&device_id=设备唯一ID&rand_str=随机字符串×tamp=当前系统时间戳
四、计算秘钥
将第三步生成的字符串进行哈希计算(md5)获得最终身份认证秘钥。
打开 php程序域名/wiki 》算法详解,查看最新
根据最终生成的signature,组合地址,获取access_token,地址如下:
http://task.6feel.com/api/5c1fa1bf987d8?app_id=86523959&device_id=web&rand_str=abcdefg×tamp=1545577655&signature=efea65e1e9818df2693348d34069b604
接口配置:
2、创建根据用户id获取用户信息
接口配置:
请求参数:
参数名:id
类型:interge
规则:{min:1}
在application>api>controller下新建文件User.php,代码如下:
<?php
namespace app\api\controller;
use app\model\AdminUser;
use app\util\ReturnCode;
class User extends Base {
public function getList() {
$id = $this->request->param ( "id" );
$userInfo = AdminUser::get ( [
"id" => $id
] );
if ($userInfo) {
return $this->buildSuccess ( $userInfo->toArray () );
} else {
return $this->buildFailed ( ReturnCode::NOT_EXISTS, "当前用户不存在" );
}
}
}
?>
postman提交结果:
Headers中配置参数:
Content-Type:application/x-www-form-urlencoded
version:v3.0
access-token:390da400f4d30b5b9f857e3c2cdbe263
user-token:空(当要求用户登录时必填)
提交结果:
常见报错
1、非常抱歉,您没有权限这么做!
可能原因:
需要在应用中添加的接口访问。需要重新签发AccessToken才能生效新的权限
2、缺少user-token
操作说明:http://www.iwonmo.com/archives/1333.html
系统说明
1、access-token
当开启access-token
验证,接口header中必须带上access-token
字段,用于验证是否有权限访问此应用。
2、user-token
当开启
user-token
验证,接口header中必须带上user-token
字段,用于验证是否已登录。