基于 Yii 2 的 HTTP 客户端扩展,通过应用组件配置客户端,HTTP 请求数据以 JSON 格式发送
1、通过应用组件配置客户端,\common\config\main-local.php
<?php return [ 'components' => [ 'yqdsjApiHttp' => [ 'class' => 'yii\httpclient\Client', 'baseUrl' => 'http://47.94.90.194:8085/haihe-service', 'transport' => 'yii\httpclient\CurlTransport' ], ], ];
2、通过 setFormat() 方法设置用于请求内容的格式为 JSON,\common\logics\http\yqdsj_api\Article.php
<?php /** * Created by PhpStorm. * User: Administrator * Date: 2018/02/28 * Time: 13:14 */ namespace common\logics\http\yqdsj_api; use Yii; use yii\base\Model; use yii\web\ServerErrorHttpException; use yii\httpclient\Client; /** * 舆情大数据接口的舆情 * * @author Qiang Wang <shuijingwanwq@163.com> * @since 1.0 */ class Article extends Model { const SCENARIO_VIEW = 'view'; public $service_key; public $id; public $access_token; public function scenarios() { $scenarios = parent::scenarios(); $scenarios[self::SCENARIO_VIEW] = ['service_key', 'id', 'access_token']; return $scenarios; } public function rules() { return [ /* 获取舆情详情 */ [['service_key', 'id', 'access_token'], 'required', 'on' => 'view'], //view ['service_key', 'compare', 'compareValue' => Yii::$app->params['yqdsjApi']['serviceKey'], 'on' => 'view'], //view ]; } public function attributeLabels() { return [ 'service_key' => \Yii::t('model/http/yqdsj-api/article', 'Service Key'), 'id' => \Yii::t('model/http/yqdsj-api/article', 'ID'), 'access_token' => \Yii::t('model/http/yqdsj-api/article', 'Access Token'), ]; } /** * 返回舆情详情 * * @return array * * 格式如下: * * 舆情详情 * [ * 'message' => '', //说明 * 'data' => [], //数据 * ] * * 失败(将错误保存在 [[yii\base\Model::errors]] 属性中) * false * * @throws ServerErrorHttpException 如果响应状态码不等于20x */ public function getArticle() { $response = Yii::$app->yqdsjApiHttp->createRequest() ->setFormat(Client::FORMAT_JSON) ->setMethod('post') ->setUrl('article/detail.do?access_token=' . $this->access_token) ->setData(['docId' => $this->id]) ->send(); // 检查响应状态码是否等于20x if ($response->isOk) { // 检查业务逻辑是否成功 if ($response->data['code'] === 0) { $yqdsjApiData = ['message' => '', 'data' => $response->data['result']]; return $yqdsjApiData; } else { $this->addError('id', $response->data['msg']); return false; } } else { throw new ServerErrorHttpException(Yii::t('error', Yii::t('error', Yii::t('error', '20042'), ['statusCode' => $response->getStatusCode()])), 20042); } } }
3、使用 REST API 时,由于请求格式全部为 JSON,为了简化代码,直接配置请求对象的格式即可。通过配置 [[\yii\httpclient\Client]] 的 requestConfig 来完成,配置所有的请求格式为 JSON,编辑 \common\config\main-local.php
<?php return [ 'components' => [ 'yqdsjApiHttp' => [ 'class' => 'yii\httpclient\Client', 'baseUrl' => 'http://47.94.90.194:8085/haihe-service', 'requestConfig' => [ 'format' => yii\httpclient\Client::FORMAT_JSON ], 'transport' => 'yii\httpclient\CurlTransport' ], ], ];
4、取消 setFormat() 方法设置用于请求内容的格式为 JSON,以精简代码,编辑 \common\logics\http\yqdsj_api\Article.php
<?php /** * Created by PhpStorm. * User: Administrator * Date: 2018/02/28 * Time: 13:14 */ namespace common\logics\http\yqdsj_api; use Yii; use yii\base\Model; use yii\web\ServerErrorHttpException; /** * 舆情大数据接口的舆情 * * @author Qiang Wang <shuijingwanwq@163.com> * @since 1.0 */ class Article extends Model { const SCENARIO_VIEW = 'view'; public $service_key; public $id; public $access_token; public function scenarios() { $scenarios = parent::scenarios(); $scenarios[self::SCENARIO_VIEW] = ['service_key', 'id', 'access_token']; return $scenarios; } public function rules() { return [ /* 获取舆情详情 */ [['service_key', 'id', 'access_token'], 'required', 'on' => 'view'], //view ['service_key', 'compare', 'compareValue' => Yii::$app->params['yqdsjApi']['serviceKey'], 'on' => 'view'], //view ]; } public function attributeLabels() { return [ 'service_key' => \Yii::t('model/http/yqdsj-api/article', 'Service Key'), 'id' => \Yii::t('model/http/yqdsj-api/article', 'ID'), 'access_token' => \Yii::t('model/http/yqdsj-api/article', 'Access Token'), ]; } /** * 返回舆情详情 * * @return array * * 格式如下: * * 舆情详情 * [ * 'message' => '', //说明 * 'data' => [], //数据 * ] * * 失败(将错误保存在 [[yii\base\Model::errors]] 属性中) * false * * @throws ServerErrorHttpException 如果响应状态码不等于20x */ public function getArticle() { $response = Yii::$app->yqdsjApiHttp->createRequest() ->setMethod('post') ->setUrl('article/detail.do?access_token=' . $this->access_token) ->setData(['docId' => $this->id]) ->send(); // 检查响应状态码是否等于20x if ($response->isOk) { // 检查业务逻辑是否成功 if ($response->data['code'] === 0) { $yqdsjApiData = ['message' => '', 'data' => $response->data['result']]; return $yqdsjApiData; } else { $this->addError('id', $response->data['msg']); return false; } } else { throw new ServerErrorHttpException(Yii::t('error', Yii::t('error', Yii::t('error', '20042'), ['statusCode' => $response->getStatusCode()])), 20042); } } }
5、在 Postman 中调用接口,响应成功,符合预期,如图1
{ "code": 10000, "message": "获取舆情(舆情大数据)详情成功", "data": { "city": "甘肃省 教育厅", "clusterId": 6048085228, "description": "来源:中国教师资格网 2018年6月12日 分享到 \n评论\n导读: 以下为各省及其辖区教师资格证认定机构联系方式,更多教师资格认定信息敬请关注233网校教师资格证认定栏目! 教师资格取证上岗>>\n各省份及其辖区内各认定机构联系方式\n序号 省份 省厅联系方式 认定机构联系方式\n1 北京市 010-82089117 shixunban@bjie.ac.cn 北京认定机构\n北京市教师资格认定网:http://www.bjtcc.org.cn\n2 天津市 022-23540113\n022-23540149 tjjszg@126.com 天津认定机构\n天津市高等学校师资培训中心:http://www.tjgspx.cn\n3 河北省 0311-66005786/66005789(资格认定)\n0311-86263380(定期注册) jszgrd@sina.com(资格认定) 河北认定机构\n河北省教育厅:http://jszg.hee.gov.cn/\n4 山西省 0351-2279655 sxjszgzx@163.com 山西认定机构\n山西省教育厅:http://www.sxedu.gov.cn\n5 内蒙古自治区 0471-2856822 jiaoyuting@126.com\n内蒙古教育:http://www.nmgov.edu.cn\n6 辽宁省 024-26901976 lnjszg@126.com\n辽宁省教师培训交流中心:http://www.lnttec.cn\n7 吉林省 0431-82760337\n0431-82752926(高校资格) jljszg@163.com\njytspb@126.com(高校资格)\n吉林教育信息网:http://www.jledu.gov.cn\n吉林省政府政务公开网(高校):http://zwdt.jl.gov.cn/dtgz/dtjj\n8 黑龙江省 0451-53643467 hljjszgrd@126.com\n黑龙江教育信息网:http://www.hlje.net\n9 上海市 021-62523036 shteacher900@163.com 上海认定机构\n上海教育人才:http://www.shehr.cn\n10 江苏省 025-83239421\nhttp://www.ec.js.edu.cn/col/col8327/index.html\n 网站在线留言 江苏认定机构\n江苏教师教育网:http://www.jste.org.cn\n11 浙江省 0571-88908530\n 0571-88908550 zjjszgzx@zjzk.cn\n浙江省教育考试网:http://www.zjzs.net\n12 安徽省 0551-62831877 ahjszgzx@163.com 安徽认定机构\n安徽省教师资格认定指导中心:http://jszg.hfnu.edu.cn\n13 福建省 0591-83781304 fjjszgzx@163.com\n福建教育网:http://www.fjjszg.com\n14 江西省 0791-86765179 jxjszgzx@sina.com\n江西教育网:http://www.jxedu.gov.cn\n15 山东省 0531-66778381\n 0531-86180266(高校资格) sdjszgzx@163.com\n sdgspx@126.com(高校资格) 山东认定机构\n山东省教师资格认定指导中心:http://www.sdjszg.cn\n 山东省高等学校师资培训中心(高校):www.gspxzx.sdnu.edu.cn\n17 河南省 0371-60867560 hnjszgzx@163.com 河南认定机构\n河南省教师资格网:http://jszg.haedu.gov.cn\n16 湖北省 027—87327255 hbsjszg@sina.com\n湖北教师教育网:http://jsjy.e21.cn\n18 湖南省 0731-88607919\n 0731-84736649(高校资格) hnjszg@hnedu.cn \n湖南省教育厅教师处:http://jsc.gov.hnedu.cn\n19 广东省 020-37628372 jszg@gdhed.edu.cn 广东认定机构\n广东省教师资格网:http://www.gdedu.gov.cn\n20 广西壮族自治区 0771-5815208 sf0771@163.com 广西认定机构\n广西教师教育网:http://www.gxjs.com.cn\n21 海南省 0898-65203038 65203038@163.com 海南认定机构\n海南省教育厅:http://edu.hainan.gov.cn\n22 重庆市 023-62658186\n 023-63865672(高校资格) cqjszg@163.com\n重庆市教师资格网:http://www.jszg.cq.cn\n 重庆市教委人事处(高校):www.cqedu.cn\n23 四川省 028-86138701 anjinyang147@163.com 四川认定机构\n四川省教育厅:http://www.scedu.net\n24 贵州省 0851-86700608 gzjszgzx@gznu.edu.cn\n贵州教育网:http://www.gzsedu.cn/\n25 云南省 0871-65141568 jytrsc@126.com 云南认定机构\n云南省教育厅:http://www.ynjy.cn\n26 西藏自治区 0891-6599504 xzjszg@126.com\n西藏教育:http://www.xzedu.com.cn\n27 陕西省 029-88668691 snjszg@126.com\n snjszgzx@126.com 陕西认定机构\n陕西省教育厅:http://www.snedu.gov.cn\n28 甘肃省 0931-7971340 gsjytsfc@126.com 甘肃认定机构\n甘肃省教师资格认定指导中心:http://www.nwnu.edu.cn/cate.do?dept=0087\n29 青海省 0971-6310741 qhsfjy@126.com\n青海省教育厅:http://www.qhedu.cn\n30 宁夏回族自治区 0951-5559106 nxedurs@163.com 宁夏认定机构\n31 新疆维吾尔自治区 0991-4362086 szglc@126.com 新疆认定机构\n新疆生产建设兵团 0991-2896283", "docId": "6048085228", "emotionScore": 30, "emotionTendency": 1, "pics": [], "pubTime": "2018-06-12 10:06:46", "src": "www.233.com", "title": "各省及其辖区教师资格证认定机构联系方式汇总-教师资格证-233网校", "url": "http://www.233.com/teacher/rending/201806/12100118272.html", "exportTime": "2018-06-15 14:29:40" } }
6、查看 Available Debug Data,请求格式为 application/json,如图2
yii\httpclient\CurlTransport::send POST http://47.94.90.194:8085/haihe-service/article/detail.do?access_token=fb46626f0e71e423ca8ab4c750620a85 Content-Type: application/json; charset=UTF-8 {"docId":"6048085228"} E:\wwwroot\pcs-api\common\logics\http\yqdsj_api\Article.php:79 E:\wwwroot\pcs-api\api\rests\yqdsj_article\ViewAction.php:66
近期评论