基于 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

在 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

查看 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

 

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/250415.html

(0)
上一篇 2022年4月29日
下一篇 2022年4月29日

相关推荐

发表回复

登录后才能评论