2013-12-09 40 views
0

我需要支持不同的響應格式,比如JSON和HTML,到目前爲止,這對於JSON響應格式來說是很好的,現在我試圖支持來自API的HTML響應並面臨問題。對Restler 3 API的HTML響應支持

我需要從某些API返回來自某些API和HTML響應的JSON響應,但是所有API(方法)都出現在同一個類中。

如果我在支持的格式列表中添加JSON和HTML,那麼所有的API都只返回HTML響應,不知道如何管理這種情況。

$r->setSupportedFormats('JsonFormat', 'HtmlFormat');

這是我使用的設置JSON和HTML支持的格式列表中的代碼塊,有人請讓我知道如何處理這種情況。

的index.php

 
use Luracast\Restler\Defaults; 
use Luracast\Restler\Filter\RateLimit; 
use Luracast\Restler\Format\UploadFormat; 
use Luracast\Restler\Format\HtmlFormat; 
use Luracast\Restler\Restler; 

require_once 'vendor/restler.php'; 
require_once('config.php');  

Defaults::$throttle = 20; 
Defaults::$cacheDirectory = PLAY_API_CACHE_DIR; 

// Setup restler 
$r = new Restler(); 
$r->addAPIClass('test'); 
$r->addAPIClass('Resources'); 
$r->addFilterClass('RateLimit'); 
$r->setSupportedFormats('JsonFormat', 'UploadFormat', 'HtmlFormat'); 
$r->handle(); 

test.php的

 
require_once 'BaseHandler.php'; 

class test extends BaseHandler { 

    // Initialize API class attributes 
    public function __construct() { 
     parent::__construct(); 
    } 

    /** 
    * Request the breakdown,by category, of a user's synced data. 
    * 
    * @param string $auth_token SSO Authentication Token 
    * 
    * @url GET getStorageUsage 
    */ 
    public function getStorageUsage($auth_token = '') { 

     // Required parameters checkup 
     if (!$auth_token && isset($_SESSION['play_auth_token'])) $auth_token = $_SESSION['play_auth_token']; 
     if (!$auth_token ) return PlayErrorCodes::throwParameterMissingError(); 

     // Get a breakdown,by category, of a user's synced data using Sync API call 
     return $this->callAPI('sync', 'getStorageUsage', array('auth_token' => $auth_token));  
    } 

    /** 
    * Requests the full HTML document representing a users data graphically 
    * 
    * @param string $auth_token SSO Authentication Token 
    * @param string $client Name of the client requesting the widget. android is the only acceptable and default value. 
    * @param string $path Path of the resource to display. Defaults to '/' 
    * 
    * @url GET getWidget 
    * @view getWidgetView 
    */ 
    public function getWidget($auth_token = '',$client = '',$path = '') { 
     // Required parameters checkup 
     if (!$auth_token && isset($_SESSION['play_auth_token'])) $auth_token = $_SESSION['play_auth_token']; 
     if (!$auth_token) return PlayErrorCodes::throwParameterMissingError(); 

     // Get the full HTML document representing a users data graphically using Sync API call 
     $this->resDecodeFlag = false; 
     return $this->callAPI('sync', 'getWidget', array('auth_token' => $auth_token, 'client' => $client, 'path' => $path)); 
    } 

} 

在這裏,我需要返回 'getStorageUsage' 和HTML,針對 'getWidget' JSON響應。

參考我所經歷是:提前
http://restler3.luracast.com/examples/_013_html/readme.html
https://github.com/Luracast/Restler/tree/master/public/examples/_013_html#html-format

謝謝...溼婆。

+0

那你嘗試至今,這裏是你的代碼?我們無法審查我們無法閱讀的代碼..您會得到什麼錯誤,您似乎在哪裏失敗? – Luceos

+0

@Luceos:用代碼塊更新了我的問題。在設置HtmlFormat支持所有API之後,在這裏沒有收到任何錯誤返回HTML響應。 – Siva

+0

你打電話過得怎麼樣? Restler根據您發送的Accept Header識別返回格式。因此,如果您從瀏覽器調用Web服務,它將返回HTML。 – Luceos

回答

1

由於@Luceos正確地指出,瀏覽器發送接受標頭總是喜歡HTML

爲了克服這種情況下,你可以隨時請求這些資源與相應的延伸

  • getStorageUsage.json
  • getWidget.html

如果某個特定資源需要始終以特定格式顯示,則可以執行以下操作由於

$r = new Restler(); 
$r->addAPIClass('MyApiClass'); 
$r->setSupportedFormats('JsonFormat', 'UploadFormat'); 
$r->setOverridingFormats('HtmlFormat'); 
$r->handle(); 

然後在您的getWidget方法添加@format評論指定HtmlFormat如下圖所示

/** 
* Requests the full HTML document representing a users data graphically 
* 
* @param string $auth_token SSO Authentication Token 
* @param string $client Name of the client requesting the widget. android is the only acceptable and default value. 
* @param string $path Path of the resource to display. Defaults to '/' 
* 
* @url GET getWidget 
* @view getWidgetView 
* @format HtmlFormat 
*/ 
public function getWidget($auth_token = '', $client = '', $path = '') { 
    //your logic comes here 
}