2

我创建了一个 RESTful API,它有一个作为 URL 变量传入的可选参数。直接从浏览器执行时似乎可以正常工作,但是在 API Explorer 中尝试时,它会列出参数,但在执行时会忽略它。我不知道从哪里开始解决这个问题。任何帮助将不胜感激。

类定义如下:

class actions {

  /**
   * LIST available Actions
   *
   * List all the actions that a user (or app) can choose from. The response list  
   * will include [name],[slug/id], and [description] attributes. If you want a more complete set of 
   * meta attributes for the actions then you can specify "meta=all" in the request url. For full spec of
   * response please review LG_actions_list.json.
   *
   * @url GET /available
   *
   * @param $meta {@from url} Optional parameter to control the amount of meta-data passed back. Values are "none","normal", and "all"
   **/
  public function available ($meta="normal")
  {
    return "list actions (meta level set to $meta)";
  }

}

在这种情况下,我可以在 API 资源管理器中键入“all”作为 $meta 的值,但响应仍然是“列表操作(元级别设置为正常)”。

更新:

为了澄清这种行为,我添加了 API Explorer 输出和直接调用服务时得到的输出:

在此处输入图像描述

相比之下,当实际使用 API 时,我得到了正确的结果。在 Chrome 中输入:

http://[域]/api/actions/available?meta=foobar

我得到了所需的输出:

“列表操作(元级别设置为 foobar)”

4

1 回答 1

2

您对上述代码所做的工作几乎没有问题

  • 可选参数最好留给查询字符串
  • 当您添加手动路由时,@url不会为该方法添加自动路由

执行以下操作以使其工作。

  • 将方法名称更改为以get将其映射到类的根目录
  • 关闭智能自动路由

现在在资源管理器中将列出两个操作

  • actions.json
  • actions.json/{meta}

.

class actions {

     /**
     * LIST available Actions
     *
     * List all the actions that a user (or app) can choose from. The response list
     * will include [name],[slug/id], and [description] attributes. If you want a more complete set of
     * meta attributes for the actions then you can specify "meta=all" in the request url. For full spec of
     * response please review LG_actions_list.json.
     *
     * @smart-auto-routing false
     * @param $meta Optional parameter to control the amount of meta-data passed back. Values are "none","normal", and "all"
     **/
    public function get ($meta="normal")
    {
        return "list actions (meta level set to $meta)";
    }

}
于 2012-10-12T01:40:53.657 回答