加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

发布时间:2020-12-16 06:29:02 所属栏目:大数据 来源:网络整理
导读:我期待收到uri的喜欢 /user/*/account/* 我有一个用户函数定义为 sub user :Path('/user') :PathPart('') :ActionClass('REST' ) {} 然后 sub user_GET :PathPart('user') Chained('/') CaptureArgs(1) { #do stuff} 对于帐户我也是类似地定义它们. sub acco
我期待收到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用于控制器的根动作.由于您可以构建任何类型的树结构,因此它非常灵活.因此,最佳解决方案通常取决于您的约束条件.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读