发表日期: 2021-03-27 12:54:11 浏览次数:89
资兴网络公司哪家好【资兴企业网站百度SEO推广公司】资兴做网站开发价格、资兴淘宝店铺开店装修设计运营、公司网站制作方案流程改版维护费用、资兴高端企业网站页面制作设计专业公司需要多少钱
资兴市,湖南省辖县级市,由郴州市代管,位于湖南省东南部。因唐代旧县治位于资兴江畔(今东江湖)而得名,是郴商的发源地之一。资兴市地处湘江流域耒水的上游,在罗霄山脉西麓、茶永盆地南端,为湘、粤、赣三省交汇处。东邻桂东县、株洲市炎陵县,南接汝城县、宜章县,西连苏仙区,北抵永兴、安仁县。总面积2746.79平方公里。 [1]
2017年,资兴市实现地区生产总值362.51亿元,按可比价格计算,增长8.3%。其中,第一产业增加值26.95亿元,增长4.2%;第二产业增加值223.59亿元,增长6.9%;第三产业增加值111.97亿元,增长12.5%。三次产业结构为7.4:61.7:30.9。 [2] 资兴市名优特产主要有杨梅、东江鱼、狗脑贡茶等;风景名胜主要有东江湖、寿佛寺、回龙山等。资兴市下辖2乡9镇2街道;户籍总人口37.85万人,常住人口34.97万人(2017年)。2017年10月,被住建部命名为国家园林城市。2018年11月,被科技部确定为首批创新型县(市), [3] 入选中国县级市全面小康指数前100名。第三批“绿水青山就是金山银山”实践创新基地。 [4]
2019年3月6日,中央宣传部、财政部、文化和旅游部、国家文物局《中央宣传部 财政部 文化和旅游部 国家文物局关于公布《革命文物保护利用片区分县名单(第一批)》的通知》资兴市名列其中。 [5]
2020年6月,经中央依法治国委入选为第一批全国法治政府建设示范地区和项目名单。 [6] 2020年度真抓实干成效明显,被湖南省人民政府公布为推动高质量发展成效明显的县市区,给予100万元标准奖励。
还记得我们前面刚学的三级参数规则吗?虽然在应用参数配置中已配置公共version参数规则,但我们可以在具体的接口类中重新配置这个规则。把在Hello World接口中把这个版本参数类型修改成此自定义回调类型。即:
// $ vim ./Shop/Api/Welcome.php class Api_Welcome extends PhalApi_Api {
public function getRules() {
return array(
'say' => array(
'version' => array('name' => 'version', 'type' => 'callable', 'callback' => 'Common_Request_Version::formatVersion'),
)
);
}... ...复制代码修改好后,便可使用此自定义的回调处理了。当正常传递合法version参数,如请求/shop/welcome/say?version=1.2.3,可以正常响应。若故意传递非法的version参数,如请求/shop/welcome/say?version=123,则会提示这样的错误:
"msg": "非法请求:版本号格式错误"复制代码
由于自 PHP 5.4 起可用callable类型指定回调类型callback。所以,为了减轻记忆的负担,这里使用callable或者callback来表示类型都可以,即可以配置成:'type' => 'callable',,也可以配置成:'type' => 'callback',。回调函数的选项也一样。
以下是来自PHP官网的一些回调函数的示例:
// Type 1: Simple callbackcall_user_func('my_callback_function'); // Type 2: Static class method callcall_user_func(array('MyClass', 'myCallbackMethod')); // Type 3: Object method call$obj = new MyClass();call_user_func(array($obj, 'myCallbackMethod'));// Type 4: Static class method call (As of PHP 5.2.3)call_user_func('MyClass::myCallbackMethod');复制代码参考:更多请参考Callback / Callable 类型。
所以上面的callback也可以配置成:
'callback' => array('Common_Request_Version', 'formatVersion')复制代码当需要开启过滤器,只需要注册DI()->filter即可。在初始化文件init.php中去掉以下注释便可启用默认的签名验证服务。
// $ vim ./Public/init.php// 签名验证服务DI()->filter = 'PhalApi_Filter_SimpleMD5';复制代码
这里的过滤器是指PhalApi在具体接口服务前所执行的过程,主要用于签名验证或实现其他预加载处理的功能。
PhalApi提供了一个默认签名验证方案,主要是基于md5的签名生成。这个只是作为一般性的参考,在实际项目开发中,我们应该在此基础上进行调整延伸。
其默认验签的算法如下:
1、排除签名参数(默认是sign)
2、将剩下的全部参数,按参数名字进行字典排序
3、将排序好的参数,全部用字符串拼接起来
4、进行md5运算
5、追加签名参数
如前面我们看到的,除了配置公共参数规则version外,我们还配置了公共参数规则sign。此sign参数则主要用于这里的签名验证。下面是一个具体的例子。
假设请求的接口服务链接是:
/shop/?service=Welcome.Say&version=1.2.3复制代码
则会按以下方式生成并验证签名。
1、排除签名参数(默认是sign)
?service=Welcome.Say&version=1.2.3复制代码
2、将剩下的全部参数,按参数名字进行字典排序
service=Welcome.Sayversion=1.2.3复制代码
3、将排序好的参数,全部用字符串拼接起来
"Welcome.Say1.2.3" = "Welcome.Say" + "1.2.3"复制代码
4、进行md5运算
35321cc43cfc1e4008bf6f1bf = md5("Welcome.Say1.2.3")复制代码5、追加签名参数
?service=Default.Index&username=dogstar&sign=35321cc43cfc1e4008bf6f1bf复制代码
开启默认签名后,需要按以上算法生成签名sign,并且在每次请求接口服务时加上此参数。在缺少签名或者签名错误情况下,会提示类似以下的错误。
{
"ret": 406,
"data": [],
"msg": "非法请求:签名错误"}复制代码细心的读者会发现,对于默认的接口服务Default.Index是不需要进行签名验证的,这是因为在接口服务白名单中进行了配置。对于配置了白名单的接口服务,将不会触发过滤器的调用。
接口服务白名单配置是:app.service_whitelist,即配置文件./Config/app.php里面的service_whitelist配置,其默认值是:
'service_whitelist' => array( 'Default.Index', ),复制代码
配置的格式有以下四种。
表2-4 接口服务白名单匹配类型
类型 | 配置格式 | 匹配规则 | 示例及说明 |
|---|---|---|---|
全部 |
| 匹配全部接口服务(慎用!) | 如果配置了此规则,即全部的接口服务都不触发过滤器。 |
方法通配 |
| 匹配某个类的任何方法 | 即Api_Default接口类的全部方法 |
类通配 |
| 匹配全部接口类的某个方法 | 即全部接口类的Index方法 |
具体匹配 |
| 匹配指定某个接口服务 | 即Api_Default::Index() |
如果有多个生效的规则,按短路判断原则,即有任何一个白名单规则匹配后就跳过验证,不触发过滤器。
以下是更多的示例:
'service_whitelist' => array( '*.Index', // 全部的Index方法 'Test.*', // Api_Test的全部方法 'User.GetBaseInfo', // Api_User::GetBaseInfo()方法 ),复制代码
配置好上面的白名单后,以下这些接口服务全部不会触发过滤器:
// 全部的Index方法?service=Default.Index?service=User.Index// Api_Test的全部方法?service=Test.DoSth?service=Test.Hello?service=Test.GOGOGO// Api_User::GetBaseInfo()方法?service=User.GetBaseInfo
资兴网络公司哪家好【资兴企业网站百度SEO推广公司】资兴做网站开发价格、资兴淘宝店铺开店装修设计运营、公司网站制作方案流程改版维护费用、资兴高端企业网站页面制作设计专业公司需要多少钱