国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

首頁 php框架 YII Yii2 API介面輸出統(tǒng)一Json和jsonp格式方法

Yii2 API介面輸出統(tǒng)一Json和jsonp格式方法

Nov 01, 2019 pm 04:00 PM
api yii2

Yii2 API介面輸出統(tǒng)一Json和jsonp格式方法

如果做API的話,如何使別人再呼叫你的介面時能夠有一個統(tǒng)一標(biāo)準(zhǔn)的json或jsonp格式,然而json回應(yīng)的格式和內(nèi)容,每個人的約定都是有差異的,所以我們必須再數(shù)據(jù)出去之前做一定的處理。

1.首先我們需要初始化去呼叫beforeSend,因為我們需要對beforesend做一些處理,以下是init初始化處理程式碼:

/**
 * (non-PHPdoc)
 * @see \yii\base\Object::init()
 */
public function init()
{       
    parent::init();	//綁定beforeSend事件,更改數(shù)據(jù)輸出格式
    Yii::$app->getResponse()->on(Response::EVENT_BEFORE_SEND, [$this, 'beforeSend']);
}

#2.然後我們就需要對beforesend進(jìn)行處理,處理點(diǎn)有下面幾個重點(diǎn):?

1>更改資料輸出格式

2>預(yù)設(shè)輸出Json資料

#3>如果客戶端請求時有傳遞$_GET['callback']參數(shù),輸出Jsonp格式

4>請求正確時資料為{"success":true,"data":{.. .}}

5>請求錯誤時資料為{"success":false,"data":{"name":"Not Found","message":"頁面找不到。","code ":0,"status":404}}?

6>具體程式碼如下:

/**
     * 更改數(shù)據(jù)輸出格式
     * 默認(rèn)情況下輸出Json數(shù)據(jù)
     * 如果客戶端請求時有傳遞$_GET['callback']參數(shù),輸入Jsonp格式
     * 請求正確時數(shù)據(jù)為  {"success":true,"data":{...}}
     * 請求錯誤時數(shù)據(jù)為  {"success":false,"data":{"name":"Not Found","message":"頁面未找到。","code":0,"status":404}}
     * @param \yii\base\Event $event
     */
    public function beforeSend($event)
    {        /* @var $response \yii\web\Response */
        $response = $event->sender;
        $isSuccessful = $response->isSuccessful;        if ($response->statusCode>=400) {            //異常處理
            if (true && $exception = Yii::$app->getErrorHandler()->exception) {
                $response->data = $this->convertExceptionToArray($exception);
            }            //Model出錯了
            if ($response->statusCode==422) {
                $messages=[];                foreach ($response->data as $v) {
                    $messages[] = $v['message'];
                }                //請求錯誤時數(shù)據(jù)為  {"success":false,"data":{"name":"Not Found","message":"頁面未找到。","code":0,"status":404}}
                $response->data = [                    'name'=> 'valide error',                    'message'=> implode("  ", $messages),                    'info'=>$response->data
                ];
            }
            $response->statusCode = 200;
        }        elseif ($response->statusCode>=300) {
            $response->statusCode = 200;
            $response->data = $this->convertExceptionToArray(new ForbiddenHttpException(Yii::t('yii', 'Login Required')));
        }        //請求正確時數(shù)據(jù)為  {"success":true,"data":{...}}
        $response->data = [            'success' => $isSuccessful,            'data' => $response->data,
        ];
        $response->format = Response::FORMAT_JSON;
        \Yii::$app->getResponse()->getHeaders()->set('Access-Control-Allow-Origin', '*');
        \Yii::$app->getResponse()->getHeaders()->set('Access-Control-Allow-Credentials', 'true');       //jsonp 格式輸出
        if (isset($_GET['callback'])) {
            $response->format = Response::FORMAT_JSONP;
            $response->data = [                'callback' => $_GET['callback'],                'data'=>$response->data,
            ];
        }
    }

3.針對請求可能會發(fā)生一些異常,同樣我們也需要對異常進(jìn)行一些標(biāo)準(zhǔn)化處理,將異常轉(zhuǎn)換為array輸出,具體程式碼如下:

/**
     * 將異常轉(zhuǎn)換為array輸出
     * @see \yii\web\ErrorHandle
     * @param \Exception $exception
     * @return multitype:string NULL Ambigous <string, \yii\base\string> \yii\web\integer \yii\db\array multitype:string NULL Ambigous <string, \yii\base\string> \yii\web\integer \yii\db\array
     */
    protected function convertExceptionToArray($exception)
    {        if (!YII_DEBUG && !$exception instanceof UserException && !$exception instanceof HttpException) {
            $exception = new HttpException(500, Yii::t(&#39;yii&#39;, &#39;An internal server error occurred.&#39;));
        }
        $array = [            &#39;name&#39; => ($exception instanceof Exception || $exception instanceof ErrorException) ? $exception->getName() : &#39;Exception&#39;,            &#39;message&#39; => $exception->getMessage(),            &#39;code&#39; => $exception->getCode(),
        ];        if ($exception instanceof HttpException) {
            $array[&#39;status&#39;] = $exception->statusCode;
        }        if (YII_DEBUG) {
            $array[&#39;type&#39;] = get_class($exception);            if (!$exception instanceof UserException) {
                $array[&#39;file&#39;] = $exception->getFile();
                $array[&#39;line&#39;] = $exception->getLine();
                $array[&#39;stack-trace&#39;] = explode("\n", $exception->getTraceAsString());                if ($exception instanceof \yii\db\Exception) {
                    $array[&#39;error-info&#39;] = $exception->errorInfo;
                }
            }
        }        if (($prev = $exception->getPrevious()) !== null) {
            $array[&#39;previous&#39;] = $this->convertExceptionToArray($prev);
        }        return $array;
    }

好了,這樣我們就有了標(biāo)準(zhǔn)同一個的api介面回傳資料格式了,在呼叫介面的人員也不用為了格式不統(tǒng)一感到煩惱

推薦:《Yii2.0框架開發(fā)實戰(zhàn)影片教學(xué)

以上是Yii2 API介面輸出統(tǒng)一Json和jsonp格式方法的詳細(xì)內(nèi)容。更多資訊請關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本網(wǎng)站聲明
本文內(nèi)容由網(wǎng)友自願投稿,版權(quán)歸原作者所有。本站不承擔(dān)相應(yīng)的法律責(zé)任。如發(fā)現(xiàn)涉嫌抄襲或侵權(quán)的內(nèi)容,請聯(lián)絡(luò)admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅(qū)動的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費(fèi)的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費(fèi)的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強(qiáng)大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Laravel 教程
1601
29
PHP教程
1502
276
Oracle API使用指南:探索資料介面技術(shù) Oracle API使用指南:探索資料介面技術(shù) Mar 07, 2024 am 11:12 AM

Oracle是一家全球知名的資料庫管理系統(tǒng)供應(yīng)商,其API(ApplicationProgrammingInterface,應(yīng)用程式介面)是一種強(qiáng)大的工具,可協(xié)助開發(fā)人員輕鬆地與Oracle資料庫互動和整合。在本文中,我們將深入探討OracleAPI的使用指南,向讀者展示如何在開發(fā)過程中利用資料介面技術(shù),同時提供具體的程式碼範(fàn)例。 1.Oracle

如何在PHP專案中透過呼叫API介面來實現(xiàn)資料的爬取與處理? 如何在PHP專案中透過呼叫API介面來實現(xiàn)資料的爬取與處理? Sep 05, 2023 am 08:41 AM

如何在PHP專案中透過呼叫API介面來實現(xiàn)資料的爬取與處理?一、介紹在PHP專案中,我們經(jīng)常需要爬取其他網(wǎng)站的數(shù)據(jù),並對這些數(shù)據(jù)進(jìn)行處理。而許多網(wǎng)站提供了API接口,我們可以透過呼叫這些接口來取得資料。本文將介紹如何使用PHP來呼叫API接口,實現(xiàn)資料的爬取與處理。二、取得API介面的URL和參數(shù)在開始之前,我們需要先取得目標(biāo)API介面的URL以及所需的

開發(fā)建議:如何利用ThinkPHP框架進(jìn)行API開發(fā) 開發(fā)建議:如何利用ThinkPHP框架進(jìn)行API開發(fā) Nov 22, 2023 pm 05:18 PM

開發(fā)建議:如何利用ThinkPHP框架進(jìn)行API開發(fā)隨著網(wǎng)際網(wǎng)路的不斷發(fā)展,API(ApplicationProgrammingInterface)的重要性也日益凸顯。 API是不同應(yīng)用程式之間進(jìn)行通訊的橋樑,它可以實現(xiàn)資料共享、功能呼叫等操作,為開發(fā)者提供了相對簡單且快速的開發(fā)方式。而ThinkPHP框架作為一款優(yōu)秀的PHP開發(fā)框架,具有高效能、可擴(kuò)展且易用

Oracle API整合策略解析:實現(xiàn)系統(tǒng)間無縫通信 Oracle API整合策略解析:實現(xiàn)系統(tǒng)間無縫通信 Mar 07, 2024 pm 10:09 PM

OracleAPI整合策略解析:實現(xiàn)系統(tǒng)間無縫通信,需要具體程式碼範(fàn)例在當(dāng)今數(shù)位化時代,企業(yè)內(nèi)部系統(tǒng)之間需要相互通信和資料共享,而OracleAPI就是幫助實現(xiàn)系統(tǒng)間無縫通信的重要工具之一。本文將從OracleAPI的基本概念和原則入手,探討API整合的策略,最終給出具體的程式碼範(fàn)例幫助讀者更好地理解和應(yīng)用OracleAPI。一、OracleAPI基本

如何處理Laravel API報錯問題 如何處理Laravel API報錯問題 Mar 06, 2024 pm 05:18 PM

標(biāo)題:如何處理LaravelAPI報錯問題,需要具體程式碼範(fàn)例在進(jìn)行Laravel開發(fā)時,常會遇到API報錯的情況。這些報錯可??能來自於程式碼邏輯錯誤、資料庫查詢問題或是外部API請求失敗等多種原因。如何處理這些報錯是一個關(guān)鍵的問題,本文將透過具體的程式碼範(fàn)例來示範(fàn)如何有效處理LaravelAPI報錯問題。 1.錯誤處理在Laravel

React API呼叫指南:如何與後端API互動和資料傳輸 React API呼叫指南:如何與後端API互動和資料傳輸 Sep 26, 2023 am 10:19 AM

ReactAPI呼叫指南:如何與後端API進(jìn)行互動和資料傳輸概述:在現(xiàn)代的Web開發(fā)中,與後端API進(jìn)行互動和資料傳輸是一個常見的需求。 React作為一個流行的前端框架,提供了一些強(qiáng)大的工具和功能來簡化這個過程。本文將介紹如何使用React來呼叫後端API,包括基本的GET和POST請求,並提供具體的程式碼範(fàn)例。安裝所需的依賴:首先,確保在專案中安裝了Axi

Insomnia教學(xué):如何使用PHP API介面 Insomnia教學(xué):如何使用PHP API介面 Jan 22, 2024 am 11:21 AM

PHPAPI介面:如何使用InsomniaInsomnia是一款功能強(qiáng)大的API測試和偵錯工具,它能夠幫助開發(fā)者快速、方便地測試和驗證API接口,支援多種程式語言和協(xié)議,其中包括PHP。本文將介紹如何使用Insomnia測試PHPAPI介面。第一步:安裝InsomniaInsomnia是一款跨平臺的應(yīng)用程序,支援Windows、MacOS和Linux等

PHP API介面:入門指南 PHP API介面:入門指南 Aug 25, 2023 am 11:45 AM

PHP是一種流行的伺服器端腳本語言,用於建立網(wǎng)頁應(yīng)用程式和網(wǎng)站。它可以與各種不同類型的API介面進(jìn)行交互,並且在開發(fā)過程中非常方便。在本篇文章中,我們將提供一個PHPAPI介面的入門指南,幫助初學(xué)者更快學(xué)會使用它。什麼是API? API代表“應(yīng)用程式介面”,這是一種標(biāo)準(zhǔn)化的方式,它允許不同的應(yīng)用程式之間交換資料和資訊。這種交互是透過造訪一個網(wǎng)站上的W

See all articles