perl – 如何使用Catalyst和uri链接REST接口?

前端之家收集整理的这篇文章主要介绍了perl – 如何使用Catalyst和uri链接REST接口?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我期待收到uri的喜欢

/user/*/account/*

我有一个用户函数定义为

sub user  :Path('/user') :PathPart('') :ActionClass('REST' ) {}

然后

sub user_GET :PathPart('user') Chained('/') CaptureArgs(1) {
    #do stuff

}

对于帐户我也是类似地定义它们.

sub account :Path('/account') :PathPart('') :ActionClass('REST') {}

 sub account_GET :PathPart('account') Chained('user_GET') Args(1) {
     #do stuff
 }

所以,问题是当我将account_GET中的Chained设置为服务器的’user_GET’时
debug显示路径已设置:

[debug] Loaded Chained actions:
.-----------------------------+--------------------------------------.
| Path Spec                   | Private                              |
+-----------------------------+--------------------------------------+
| /user/*/account/*           | /mcp/user_GET (1)                    |
|                             | => /mcp/account_GET                  |
'-----------------------------+--------------------------------------'

当我将account_GET中的Chained设置为’user’时,服务器调试显示

[debug] Unattached Chained actions:

[debug] Unattached Chained actions:

.-------------------------------------+--------------------------------------.
| Private                             | Missing parent                       |
+-------------------------------------+--------------------------------------+
| /mcp/account_GET                    | /mcp/user                            |
'-------------------------------------+--------------------------------------'

问题是,显然后者没有建立而前者是
返回它没有找到.

所以问题是如果我正在调用/ user / 12345 / account / 23456我该如何获得该路径
当看起来很明显的路径时,链接(‘用户’)没有正确设置
被设置和不太明显的路径,链接(‘user_GET’),根本不起作用?

解决方法

就个人而言,我会在用户控制器中使用以下内容

package MyApp::Controller::User;
...
# root of the chain
sub object: Chained PathPart('user') CaptureArgs(1) { ... }

上面的对象操作会将用户对象加载到存储中.现在我将用户控制器链接到上面,如下所示:

package MyApp::Controller::User::Account;
...
# chains to the action loading the user object and dispatches RESTy
sub account: Chained('/user/object') ActionClass('REST') Args(1) { ... }

# handle individual request methods
sub account_GET { ... }
sub account_POST { ... }

此处,帐户操作为account_ *方法提供了执行实际操作的公共数据.

方法特定操作作为链的一部分(例如让用户对帐户操作的POST请求作出反应)从设计角度来看似乎有点违反直觉.这可能有用,但我从未尝试过.

以上示例当然是简化的.我通常在每个控制器中设置基本操作,设置命名空间和公共父操作,控制器中的所有其他操作将链接该操作.然后我将有一个像上面这样的对象来加载单个资源,以及一个root用于控制器的根动作.由于您可以构建任何类型的树结构,因此它非常灵活.因此,最佳解决方案通常取决于您的约束条件.

@H_404_75@

猜你在找的Perl相关文章