API开发
2018-06-30 10:30 更新
ApiAdmin支持在其基础上直接二次开发Api,这篇文章将详细的说明Api开发的步骤。
声明
- 默认的域名为:http://localhost
- 服务器后台为:http://localhost/Admin/
- 服务器环境为:Nginx + MySQL + PHP5.6
新增接口
要想让接口被系统接受,我们需要在后台添加接口。所有的接口访问都必须根据系统自动给出的hash来请求
字段名称 | 说明 | 备注 |
---|---|---|
接口名称 | 接口所映射的真实类和方法 | 类名/方法名【注意区分大小写】 |
请求方式 | GET/POST/不限 | 这里将不会限制请求方法,但是如果选择GET那么POST的参数会收不到 |
接口映射 | 用于请求接口使用 | 系统自动生成 |
AccessToken | 忽略Token/验证Token | 接口请求是否需要验证AccessToken |
用户登录 | 忽略登录/验证登录 | 是否验证UserToken |
测试调试 | 关闭测试/开启测试 | 当开启测试的时候,系统不会验证AccessToken,也不会过滤数据,也不会规整输出数据,但是当你传递了UserToken的时候,系统还是会验证UserToken的合法性。 |
应用描述 | 表明应用的作用 | 用于文档显示 |
请求参数
当关闭了测试的时候,ApiAdmin会根据请求参数过滤用户的输入参数,所以,如果不配置请求参数,那么你会获取不到任何请求参数。
字段名称 | 说明 | 备注 |
---|---|---|
字段名称 | 请求的字段名 | 区分大小写 |
数据类型 | 自动处理用户输入的数据类型 | |
默认值 | 如果当前字段是不必填项,系统会自动将默认值赋值给指定字段 | |
是否必填 | 选择必填,如果没有传参,系统会报错 | |
规则细节 | 支持JSON字符串 | 需要配合字符类型使用 |
字段说明 | 用于文档显示 |
字符类型 | 规则示例 | 说明 |
---|---|---|
Integer | {"min":1,"max":10} | 大于1,并且小于10,可以只设置下限或者只设置上限 |
String | {"min":1,"max":10} | 字符串长度小于10,并且大于1,可以只设置下限或者只设置上限 |
Enum | [0,1,2] | 只能取值0,1,2别的都不可以 |
Float | {"min":1,"max":10} | 大于1,并且小于10,可以只设置下限或者只设置上限 |
Mobile | 必须是合法的11位手机号 | |
Array | {"min":1,"max":10} | 数组长度大于1并且小于10,可以只设置下限或者只设置上限 |
返回参数
系统不会过滤返回参数,所以开发者在做数据返回的时候一定要处理好字段,但是系统会自动处理返回的参数的字符类型。不过一定要配置好返回参数。
返回参数的配置相对较为简单,只需要将返回的数据上传即可!
完成数据上传,系统会自动判断数据类型以及字段层级,但是有以下几点需要注意:
- 在配置接口参数的时候,连接口都没有,怎么会有返回数据?对于这个先有鸡还是先有蛋的问题,不做讨论,建议开发接口的时候将测试模式打开,然后开发完成,获取到数据的时候再提交。
- 系统自动判断数据类型, 对于手机号码类型的判断有错误,应该是String类型,系统给出的是Integer类型,需要手动修改。
- 如果想要让Api文档变的更加丰满,需要单独配置字段说明(一个个配置哦)。
- 如果修改返回字段的时候,只能通过上传来覆盖原先的配置,系统会自动将字段名称(字段名和字段层级)一样的,不做变更,但是把不存在的字段名删去,同时新增多出来的字段。
开始写代码
前几步的配置,基本保证了API的接入,下面将是对API逻辑的处理,打开项目代码找到
/Application/Home/Api/
,接下来Api逻辑将写在这里。
接下来我们将以获取AccessToken为例来阐述API的编写方法。
- 创建BuildToken.class.php,必须严格注意大小写,同时得带上.class。
- 编写代码逻辑。
<?php /** * 和Token相关的全部接口 * @since 2017/03/02 创建 * @author zhaoxiang <zhaoxiang051405@gmail.com> */ namespace Home\Api; use Admin\Model\ApiAppModel; use Home\ORG\ApiLog; use Home\ORG\Crypt; use Home\ORG\Response; use Home\ORG\ReturnCode; class BuildToken extends Base { public function getAccessToken($param) { if (empty($param['app_id'])) { Response::error(ReturnCode::EMPTY_PARAMS, '缺少app_id'); } $appObj = new ApiAppModel(); $appInfo = $appObj->where(array('app_id' => $param['app_id'], 'app_status' => 1))->find(); if (empty($appInfo)) { Response::error(ReturnCode::INVALID, '应用ID非法'); } $crypt = new Crypt(); $signature = $param['signature']; unset($param['signature']); $sign = $crypt->getAuthToken($appInfo['app_secret'], $param); Response::debug($sign); if ($sign !== $signature) { Response::error(ReturnCode::INVALID, '身份令牌验证失败'); } $expires = C('ACCESS_TOKEN_EXPIRES'); $accessToken = S($param['device_id']); if ($accessToken) { S($accessToken, null); S($param['device_id'], null); } $accessToken = $crypt->getAccessToken($appInfo['app_id'], $appInfo['app_secret']); $appInfo['device_id'] = $param['device_id']; ApiLog::setAppInfo($appInfo); S($accessToken, $appInfo, $expires); S($param['device_id'], $accessToken, $expires); $return['access_token'] = $accessToken; $return['expires_in'] = $expires;
return $return; } }
> 注意:上面我们在新增接口的时候,填写的接口名称为`BuildToken/getAccessToken`,所以现在的类名称必须为`BuildToken`,而方法名称必须为`getAccessToken`。
代码中有几点需要说明:
- `public function getAccessToken($param)`,这里的`$param`就是一个参数名称,你可以任意命名,同时`$param`是系统处理过的用户输入参数。
- 当你处理完逻辑,直接`return`数组就好了,系统会自动捕获你返回的数组,并且做后期处理。
### 最后说明
到这里,获取AccessToken的接口就全部开发完成了,还有几点需要阐明:
1. 错误输出使用Response::error();
2. 请使用PostMan测试接口,明确Header参数和GET/POST参数。
3. 请查看http://localhost/wikiList.html获取API文档。
4. 请查看http://localhost/calculation.html获取身份令牌计算算法。
5. 请查看http://localhost/errorList.html获取错误码细节。
以上内容是否对您有帮助:
← 后台权限
更多建议: