发表日期: 2021-03-27 13:01:15 浏览次数:103
资兴400电话申请开通【资兴企业网站建设】资兴微信公众号小程序开发运营价格、资兴微信公众号APP软件客户端设计运营、资兴网页页面设计公司费用、资兴公司网站制作方案流程改版维护大概需要多少钱
资兴市,湖南省辖县级市,由郴州市代管,位于湖南省东南部。因唐代旧县治位于资兴江畔(今东江湖)而得名,是郴商的发源地之一。资兴市地处湘江流域耒水的上游,在罗霄山脉西麓、茶永盆地南端,为湘、粤、赣三省交汇处。东邻桂东县、株洲市炎陵县,南接汝城县、宜章县,西连苏仙区,北抵永兴、安仁县。总面积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万元标准奖励。
对于接口响应,PhalApi默认使用了HTTP+JSON。通过HTTP/HTTPS协议进行通讯,返回的结果则使用JSON格式进行传递。正常情况下,当接口服务正常响应时,如前面的Hello World接口,可能看到以下这样的响应头部信息和返回内容。
HTTP/1.1 200 OKContent-Type: application/json;charset=utf-8... ...{"ret":200,"data":"Hello World","msg":""}复制代码而当接口项目抛出了未捕捉的异常,或者因PHP语法问题而出现Error时,则没有内容返回,并且得到一个500的响应状态码。类似如下:
HTTP/1.1 500 Internal Server Error复制代码
若运行环境中PHP的display_errors配置为On时,还是会返回200的,并直接显示错误信息。在生产环境上,则切记需要把display_errors设置为Off。
下面,我们将重点学习正常响应情况下的响应结构和返回格式,在线调试以及异常情况下如何进行问题排查与定位。
继续来回顾一下默认接口服务返回的内容。类似如下:
{
"ret": 200,
"data": {
"title": "Hello World!",
"content": "PHPer您好,欢迎使用PhalApi!",
"version": "1.4.0",
"time": 1492776704
},
"msg": ""}复制代码ret字段是返回状态码,200表示成功;data字段是项目提供的业务数据,由接口开发人员定义;msg是异常情况下的错误提示信息。下面分别说之。
业务数据data为接口和客户端主要沟通对接的数据部分,可以为任何类型,由接口开发人员定义定义。但为了更好地扩展、向后兼容,建议都使用可扩展的集合形式,而非原生类型。也就是说,应该返回一个数组,而不应返回整型、布尔值、字符串这些基本类型。所以,Hello Wolrd接口服务返回的数据类型是不推荐的,因为返回的是整型。
业务数据主要是在Api层中返回,即对应接口类的方法的返回结果。如下面的默认接口服务?service=Default.Index的实现代码。
// $ vim ./Shop/Api/Default.php<?phpclass Api_Default extends PhalApi_Api {
... ...
public function index() {
return array(
'title' => 'Hello World!',
'content' => T('Hi {name}, welcome to use PhalApi!', array('name' => $this->username)),
'version' => PHALAPI_VERSION,
'time' => $_SERVER['REQUEST_TIME'],
);
}复制代码实际上,具体的业务数据需要一段复杂的处理,以满足特定业务场景下的需要。后面我们会对如何开发接口服务和使用数据库、高效缓存再进行讨论讲解。这里暂且知道接口结果是在Api层返回,对应接口类成员方法返回的结果即可。
返回状态码ret,用于表示接口响应的情况。参照自HTTP的状态码,ret主要分为三类:正常响应、非法请求、服务器错误。
表2-9 返回状态码的分类
分类 | ret范围 | 基数 | 说明 |
|---|---|---|---|
正常响应 | 200~299 | 200 | 表示接口服务正常响应 |
非法请求 | 400~499 | 400 | 表示客户端请求非法 |
服务器错误 | 500~599 | 500 | 表示服务器内容错误 |
正常响应时,通常返回ret = 200,并且同时返回data部分的业务数据,以便客户端能实现所需要的业务功能。
常见的2XX系列的状态码有:
200:正常响应,并实时返回结果
202:计划任务响应,所请求的服务已经被接受,并会有后台计划任务进行
非法请求是由客户端不正确调用引起的,如请求的接口服务不存在,或者接口参数提供错误,或者验证失败等等。当这种情况发生时,客户端开发人员需要按相应的错误提示进行调整,再重新尝试请求。
当需要返回4XX系列错误码时,可以在项目中抛出非法请求异常PhalApi_Exception_BadRequest。例如前面过滤器中进行签名验证失败后,会抛出以下异常:
throw new PhalApi_Exception_BadRequest('wrong sign', 1);复制代码PhalApi_Exception_BadRequest构造函数的第一个参数,是返回给客户端的错误提示信息,对应下面将讲到的msg字段。第二个参数是返回状态码的叠加值,也就是说最终的ret状态码都会在400的基数上加上这个叠加值,即:401 = 400 + 1。
常见的4XX系列的状态码有:
400:参数非法
401:验签失败,缺少登录态
403:权限不足
404:接口服务不存在或者非法
服务器内部错误是应该避免的,但当客户端发现有这种情况时,应该知会后台接口开发人员进行修正。这类错误是可控的,通常是由于开发人员开发不当而引起的,如当配置的参数规则不符合要求时,或者获取了不存在的参数等即会触发此类异常错误。通常由PhalApi框架抛出,项目一般不应抛出这类异常。
常见的5XX系统状态码有:
500:服务器内部错误
从上面,可以归结出状态码产生的时机。

图2-1 各状态码产生的时机
很多时候,很多业务场景,客户端在完成一个接口请求并获取到所需要的数据后,需要进行不同的处理的。就登录来说,当登录失败时,可能需要知道:
是否用户名不存在?
是否密码错误?
是否已被系统屏蔽?
是否密码错误次数超过了最大的重试次数?
...
显然,这里也应该返回一个操作状态码。更准切来说,是业务操作状态码。此类的状态依接口不同而不同,很难做到统一。我们建议的,在进行接口服务开发时,在业务数据data里面再统一添加一个状态码,例如使用code字段,完整路径即: data.code 。然后约定code = 0时表示操作成功,非0时为不同的失败场景。如上面的登录:
code = 0 登录成功
code = 1 用户名不存在
code = 2 密码错误
code = 3 系统已屏蔽此账号
code = 4 密码错误次数超过了最大的重试次数
...
这样,客户端在获取到接口返回的数据后,先统一判断ret是否正常响应并正常返回结果,即ret = 200;若是,则再各自判断操作状态码code是否为0,若不为0,则提示相应的文案并进行相应的引导,若为0,则走正常流程!
总而言之,最外层的ret状态码是针对技术开人员的,是用于开发阶段的。而data中的操作状态码,如code,是面向最终用户的,是用于产品阶段的。

资兴400电话申请开通【资兴企业网站建设】资兴微信公众号小程序开发运营价格、资兴微信公众号APP软件客户端设计运营、资兴网页页面设计公司费用、资兴公司网站制作方案流程改版维护大概需要多少钱