【问题标题】:HTML response support for Restler 3 APIs对 Restler 3 API 的 HTML 响应支持
【发布时间】:2013-12-09 10:19:36
【问题描述】:

我需要支持不同的响应格式,如 JSON 和 HTML,到目前为止,JSON 响应格式很好,现在我尝试支持来自我的 API 的 HTML 响应并面临问题。

我需要从一些 API 返回 JSON 响应,从一些 API 返回 HTML 响应,但所有 API(方法)都存在于同一个类中。

如果我在支持的格式列表中添加 JSON 和 HTML,那么所有 API 都只返回 HTML 响应,不知道如何管理这种情况。

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

这是我用来在支持的格式列表中设置 JSON 和 HTML 的代码块,请任何人告诉我如何处理这种情况。

index.php

使用 Luracast\Restler\Defaults; 使用 Luracast\Restler\Filter\RateLimit; 使用 Luracast\Restler\Format\UploadFormat; 使用 Luracast\Restler\Format\HtmlFormat; 使用 Luracast\Restler\Restler; require_once '供应商/restler.php'; require_once('config.php'); 默认值::$throttle = 20; 默认值::$cacheDirectory = PLAY_API_CACHE_DIR; //设置restler $r = 新的 Restler(); $r->addAPIClass('test'); $r->addAPIClass('资源'); $r->addFilterClass('RateLimit'); $r->setSupportedFormats('JsonFormat', 'UploadFormat', 'HtmlFormat'); $r->句柄();

test.php

require_once 'BaseHandler.php'; 类测试扩展 BaseHandler { // 初始化 API 类属性 公共函数 __construct() { 父::__construct(); } /** * 按类别请求用户同步数据的细分。 * * @param string $auth_token SSO 身份验证令牌 * * @url 获取 getStorageUsage */ 公共函数 getStorageUsage($auth_token = '') { // 必填参数校验 if (!$auth_token && isset($_SESSION['play_auth_token'])) $auth_token = $_SESSION['play_auth_token']; if (!$auth_token ) return PlayErrorCodes::throwParameterMissingError(); // 使用 Sync API 调用按类别获取用户同步数据的细分 return $this->callAPI('sync', 'getStorageUsage', array('auth_token' => $auth_token)); } /** * 请求以图形方式表示用户数据的完整 HTML 文档 * * @param string $auth_token SSO 身份验证令牌 * @param string $client 请求小部件的客户端的名称。 android 是唯一可接受的默认值。 * @param string $path 要显示的资源的路径。默认为“/” * * @url 获取 getWidget * @view getWidgetView */ 公共函数 getWidget($auth_token = '',$client = '',$path = '') { // 必填参数校验 if (!$auth_token && isset($_SESSION['play_auth_token'])) $auth_token = $_SESSION['play_auth_token']; if (!$auth_token) return PlayErrorCodes::throwParameterMissingError(); // 使用 Sync API 调用以图形方式获取表示用户数据的完整 HTML 文档 $this->resDecodeFlag = false; return $this->callAPI('sync', 'getWidget', array('auth_token' => $auth_token, 'client' => $client, 'path' => $path)); } }

这里我需要为“getStorageUsage”返回 JSON 响应,为“getWidget”返回 HTML 响应。

我看过的参考资料是:
http://restler3.luracast.com/examples/_013_html/readme.html
https://github.com/Luracast/Restler/tree/master/public/examples/_013_html#html-format

在此先感谢... Siva。

【问题讨论】:

  • 到目前为止您尝试了什么,您的代码在哪里?我们无法审查我们无法阅读的代码。您遇到了什么错误,您似乎在哪里失败了?
  • @Luceos:用代码块更新了我的问题。在设置 HtmlFormat 支持后,这里没有任何错误,所有 API 都返回 HTML 响应。
  • 通话怎么样。 Restler 根据您发送的 Accept Header 识别返回格式。因此,如果您从浏览器调用您的网络服务,它将返回 HTML。

标签: php restler


【解决方案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
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-11
    相关资源
    最近更新 更多