基于yii2开发的海康威视综合安防平台V1.3api接口组件,目前组件封装了资源接口和视频接口,后续打算把全部接口封装。
===============================
使用composer composer的安装以及国内镜像设置请点击此处
$ cd /path/to/i-secure-center
$ composer require "jiechengyang/i-secure-center"
$ composer install -vvv
手动导入 下载i-secure-center包后放置在任意目录 然后在yii2 index.php中
require "/path/to/i-secure-center/autoload.php";
####设计的想法:
需要强调的是:必须配置一个默认的合作方adminPartner,建议是配置对内合作方
####接口实现的想法:
这次接口实现有幸在github上看到一位朋友的设计,让我耳目一新,于是我便借着这个思路开发了,以下我将说明这个接口设计。
*第一个想法:外部调用组件的send的方法,传递两个参数:A、安防接口地址B、对应A需要的参数。在send里面直接把验签的参数和提交的参数配置,使用http-client处理。
*第二个想法:第一想法的诟病就是安防接口地址太长,既然是个组件,用起来不方面,于是乎便想到了枚举,用一个文件专门作一个数组映射,用相近的单词作为key,接口地址作为value。其他和第一个想法一样。
*第三个想法:这便是看了那位朋友的设计之后,让我有了相同的想法。我先按照安防接口的大分类定义几个目录,然后把小分类写成文件放在大目录里,这里的文件就是一个接口类,这个接口类都会继承BaseApi的抽象类。外部调用的时候,先实例化某个接口类作为第一个参数,第二个参数则是类里方法名,这个方法名就代表具体的接口地址。
*第四个想法:组件的里面加入接口服务层service,由service层具体请求数据,这样组件的send方法便有了第三个参数合作方,这个参数便是实现我们的多合作方请求接口。
总结
通过第三、四个想法的结合,我发现了它的一些好处:
abstract class BaseApi
{
protected $error;// 用于存放接口必填参数未填的错误
protected $_uriMap;// 接口的方法与接口地址的映射,每个接口类都预先设置好的
protected $requestUri;// 接口地址
public $requestBody;// 接口请求参数
/**
* @return mixed
*/
public function getUriMap()
{
return $this->_uriMap;
}
/**
* @return mixed
*/
public function getRequestUri()
{
return $this->requestUri;
}
/**
* @return mixed
*/
public function getRequestBody()
{
return $this->requestBody;
}
public function setRequestBody($requestBody)
{
$this->requestBody = $requestBody;
}
/**
* 获取action对应的地址
* @return mixed
*/
public function getUri($action)
{
if (empty($action) || empty($this->_uriMap[$action])) {
return null;
}
$this->requestUri = $this->_uriMap[$action];
return $this->requestUri;
}
/**
* 接口存在该方法便调用
* @return bool
*/
public function runAction($action, $message = [])
{
if (!is_callable([$this, $action])) {
return false;
}
call_user_func([$this, $action], $message);
return true;
}
public function getError()
{
return $this->error;
}
public function getErrorFormat($glue = PHP_EOL)
{
return implode($glue, $this->getError());
}
public function setError($error)
{
$this->error = $error;
}
}
i-secure-center是作为一个组件提供服务的,所以得配置yii2 iSecureCenter组件。打开common/config/main.php在components块内增加如下配置: 配置见config/main.php
yii2的http-client默认使用php的stream扩展,如果使用curl,则在实例化之后$client->setTransport("yii\httpclient\CurlTransport")即可。如果需要跳过ssl证书检测则->setOptions([ CURLOPT_SSL_VERIFYPEER => false, CURLOPT_SSL_VERIFYHOST => false, ])
要在github发布release才可以composer require,不然你只能用dev-master版本
yii2-iSecureCenter 集成了[https://open.hikvision.com] 常用接口,采用组件的形式主要为了实现参数可配置,事件化处理业务。
目前组件还在完善中....