发表日期: 2021-04-26 09:29:24 浏览次数:90
如皋400电话办理【如皋网站公司】如皋百度优化、如皋域名注册、如皋网店美工、如皋微信公众号托管
如皋市,简称“如”或“皋”,江苏省辖县级市,由南通市代管,江苏省历史文化名城。地处长江三角洲北翼,位于南通、泰州、苏州三市交界处,南与张家港市隔江相望,北与海安市、东与如东县连接、东南与南通市通州区毗邻,西与泰兴市、西南与靖江市接壤。全市总面积1477平方公里(不含长江水面),长江水面99平方千米。如皋长江岸线全长48千米,可直接利用长江深水岸线18.6千米。
如皋市被国际自然医学会评为世界六大长寿乡之一。 [1] 如皋市户籍人口约142万。截至2021年1月1日,全市80周岁以上高龄老人68031人,90周岁以上高龄老人10150人,百岁老人达525位,其中105岁以上达16位。 [2]
2019年6月17日,如皋被中华人民共和国住房和城乡建设部选取作为开展规范城市户外广告设施管理工作试点城市。 [3] 2019年10月8日,被评为2019年度全国综合实力百强县市、2019年度全国绿色发展百强县市、2019年度全国新型城镇化质量百强县市、2019全国营商环境百强县。 [4-6] 2020年12月,社科院发布《全国县域经济综合竞争力100强》,如皋排名第31 [7] 。
更多设置HTTP头部信息的示例如下:
// 设置允许指定的域名跨域访问DI()->response->addHeaders('Access-Control-Allow-Origin', 'www.phalapi.net');// 设置CDN缓存DI()->response->addHeaders('Cache-Control, 'max-age=600, must-revalidate');复制代码后面相同的头部信息会覆盖前面的。
很明显地,默认情况下,我们选择了JSON作为统一的返回格式。这里简单说明一下选取JSON统一返回的原因:
JSON当前很流行,且普通接口都采用此格式返回
JSON在绝大部分开发语言中都支持,跨语言
JSON在浏览器浏览时,有可视化插件支持
鉴于大家普通对JSON已经熟悉,这里不再赘述。
在《RESTful Web APIs》一书中提及到,标准可以划归到4个分类,分别是:fiat标准、个人标准、公司标准以及开放标准。
显然,我们这里推荐的JSON + ret-data-msg 返回格式既不是个人标准,也不是公司标准(就笔者观察的范筹而言,未发现某个公司定义了此格式)。而且,这也不属于开放标准,因为也还没达到此程度。更多的,它是fiat标准。我们很容易发现,身边的应用、系统以及周围项目都在使用诸如此类的返回结构格式。
当然,我们可希望可以消除语义上的鸿沟,以便在接口服务开发上有一个很好地共识。
同时,JSON + ret-data-msg返回格式也是一种领域特定的格式,它更多是为app多端获取业务数据而制作的规范。虽然它不是很完美,不具备自描述消息,也没有资源链接的能力,但我们认为它是一种恰到好处的格式。在基于JSON通用格式的基础上,加以ret-data-msg的约束,它很好地具备了统一性,从而降低门槛,容易理解。
开启调试模式很简单,主要有两种方式:
单次请求开启调试:默认添加请求参数&__debug__=1
全部请求开启调试:把配置文件./Config/sys.php文件中的配置改成'debug' => true,
请特别注意,在实际项目中,调试参数不应使用默认的调试参数,而应各自定义,使用更复杂的参数,从而减少暴露敏感或者调试信息的风险。例如:
不推荐的做法:&__debug__=1
一般的做法:&__phalapi_debug__=1
更好的做法:&__phalapi_debug__=202cb962ac59075b964b07152d234b70
正常响应的情况下,当开启调试模式后,会返回多一个debug字段,里面有相关的调试信息。如下所示:
{
"ret": 200,
"data": {
},
"msg": "",
"debug": {
"stack": [ // 自定义埋点信息
],
"sqls": [ // 全部执行的SQL语句
]
}}复制代码温馨提示:调试信息仅当在开启调试模式后,才会返回并显示。
在发生未能捕捉的异常时,并且开启调试模式后,会将发生的异常转换为对应的结果按结果格式返回,即其结构会变成以下这样:
{
"ret": 0, // 异常时的错误码
"data": [],
"msg": "", // 异常时的错误信息
"debug": {
"exception": [ // 异常时的详细堆栈信息
],
"stack": [ // 自定义埋点信息
],
"sqls": [ // 全部执行的SQL语句
]
}}复制代码查看全部执行的SQL语句
debug.sqls中会显示所执行的全部SQL语句,由框架自动搜集并统计。最后显示的信息格式是:
[序号 - 当前SQL的执行时间ms]所执行的SQL语句及参数列表复制代码
示例:
[1 - 0.32ms]SELECT * FROM tbl_user WHERE (id = ?); -- 1复制代码
表示是第一条执行的SQL语句,消耗了0.32毫秒,SQL语句是SELECT * FROM tbl_user WHERE (id = ?);,其中参数是1。
查看自定义埋点信息
debug.stack中埋点信息的格式如下:
[#序号 - 距离最初节点的执行时间ms - 节点标识]代码文件路径(文件行号)复制代码
示例:
[#0 - 0ms]/path/to/PhalApi/Public/index.php(6)复制代码
表示,这是第一个埋点(由框架自行添加),执行时间为0毫秒,所在位置是文件/path/to/PhalApi/Public/index.php的第6行。即第一条的埋点发生在框架初始化时:
// $ vim ./Public/init.phpif (DI()->debug) {
// 启动追踪器
DI()->tracer->mark();
... ...}复制代码与SQL语句的调试信息不同的是,自定义埋点则需要开发人员根据需要自行纪录,可以使用全球追踪器DI()->tracer进行纪录,其使用如下:
// 添加纪录埋点DI()->tracer->mark();// 添加纪录埋点,并指定节点标识DI()->tracer->mark('DO_SOMETHING');复制代码通过上面方法,可以对执行经过的路径作标记。你可以指定节点标识,也可以不指定。对一些复杂的接口,可以在业务代码中添加这样的埋点,追踪接口的响应时间,以便进一步优化性能。当然,更专业的性能分析工具推荐使用XHprof。
