<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                ##1.23.1 請求 把我們后臺的API想象成一個函數,那么請求的參數就是我們的參數列表;而接口響應的數據則對應函數返回的結果。 對于請求,正如前面所看到的,我們可以使用$_GET,也可以使用$_POST,也可以兩者都使用,還可以在測試時自己指定模擬的請求數據包。 或者,在實際項目開發中,我們還需要根據自身的需求,跟我們自己的客戶端作一些約定。如通常地,我們會要求客戶端 **service參數必須用GET方式** ,以便服務器返回500時定位接口服務位置。對此,簡單的我們把$_POST['service']去掉即可,如在入口文件前面添加: ```javascript unset($_POST['service']); //只接收GET方式的service參數 ``` ###(1)在index.php入口處指定數據源 很多時間,不同的項目對數據接收有不同的需求。如簡單地,如果客戶端是通過JSON后再傳遞的話,我們可以這樣在入口處進行代碼調整: ```javascript //vim ./index.php $HTTP_RAW_POST_DATA = isset($GLOBALS['HTTP_RAW_POST_DATA']) ? $GLOBALS['HTTP_RAW_POST_DATA'] : "{}"; DI()->request = new PhalApi_Request(array_merge($_GET,json_decode($HTTP_RAW_POST_DATA, true))); ``` ###(2)單元測試時指定數據源 在進行單元測試時,我們需要模擬接口的請求動作,也需要提供接口參數。這時的參數的指定更為靈活。可通過以下代碼來實現,即: ```javascript //數據源 $data = array(...); DI()->request = new PhalApi_Request($data); ``` 或者使用PhalApi封裝的測試類來快速模擬調用接口: ``` public function testIndexByRunner() { //Step 1. 構建請求URL $url = 'service=Default.Index&username=dogstar'; $params = array(); //Step 2. 執行請求 $rs = PhalApi_Helper_TestRunner::go($url, $params); ``` ###(3)接口數據的加密傳送 有時,出于安全性的考慮,項目需要對請求的接口參數進行對稱加密傳送。這時可以通過重載PhalApi_Request::genData()來輕松實現。 假設,我們現在需要把全部的參數base64編碼序列化后通過_POST['data']來傳遞,則相應的解析代碼如下。 第一步,先定義自己的擴展請求類,在里面完成對稱解析的動作: ``` <?php class Common_Request extends PhalApi_Request { public function genData($data) { if (!isset($data) || !is_array($data)) { return $_POST; //改成只接收POST } $postData = isset($data['data']) ? base64_decode($data['data']) : array(); } } ``` 第二步,在index.php入口文件中重新注冊請求類(即添加以下代碼): ``` //重新注冊request DI()->request = 'Common_Request'; ``` 然后,就可以輕松實現了接口參數的對稱加密傳送。 至此,你也許已經發現:指定數據源和對稱加密是可以結合來使用的。 ##1.23.2 響應 當前默認使用JSON的格式返回,但項目需要其他返回格式也是可以的。只需要實現PhalApi_Response抽象中的formatResult($result)格式化返回結果,然后也是重新注冊DI()->response服務即可。如: ###(1)JSONP的返回 在H5頁面中,我們可能會需要用到JSONP的返回,所以這里默認提供了這種格式的支持。 在入口文件中,添加: ```javascript //支持JsonP的返回 if (!empty($_GET['callback'])) { DI()->response = new PhalApi_Response_JsonP($_GET['callback']); } ``` 在接口訪問時再帶上&callback=XXX參數即可。 這里在創建響應服務時,可以看到是用了回調函數的名字進行初始化。考慮到會存在XSS(跨站腳本攻擊),對回調函數要進行相應的過濾,可以用黑名單或者白名單的方式。黑名單方式暫時還沒提供,白名單相對簡單但需要項目自己實現,如: ```javascript class Common_JsonP extends PhalApi_Response_JsonP { protected function clearXss($callback) { return in_array($callback, array('fun1', 'func2', 'func3')) ? $callback : ''; } } ``` ###(2)其他格式返回 如上面所述,當需要返回一種當前PhalApi沒提供的格式時,可以: + 1、實現PhalApi_Response抽象中的formatResult($result)格式化返回結果 + 2、重新注冊DI()->response服務 這里以擴展XML返回格式為例,簡單說明。 首先,添加實現一個XML響應子類: ```javascript <?php class Common_Response_XML extends PhalApi_Response { protected function formatResult($result) { return ArrayToXML::toXml($result); } } ``` 關于ArrayToXML,請查看: [將PHP數組轉成XML](http://www.oschina.net/code/snippet_54100_1548) 然后,重新注冊: ```javascript DI()->response = new Common_Response_XML(); ``` done!
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看