gpt4 book ai didi

perl - 如何通过 REST 接口(interface)使用 Catalyst 和 uri 链接?

转载 作者:行者123 更新时间:2023-12-04 17:56:04 26 4
gpt4 key购买 nike

我期待收到 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] Loaded Chained actions:
.-----------------------------+--------------------------------------.
| Path Spec | Private |
+-----------------------------+--------------------------------------+
| /user/*/account/* | /mcp/user_GET (1) |
| | => /mcp/account_GET |
'-----------------------------+--------------------------------------'

当我将 account_GET 中的 Chained 设置为“用户”时,服务器调试显示:
[debug] Unattached Chained actions:

[debug] Unattached Chained actions:

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

问题是显然后者没有被设置,而前者是
返回它没有找到。

所以问题是如果我正在调用/user/12345/account/23456 我如何获得该路径
当看起来明显的路径 Chained('user') 不是时正确设置
被设置并且不太明显的路径Chained('user_GET')根本不起作用?

最佳答案

就个人而言,我会在用户 Controller 中使用以下内容:

package MyApp::Controller::User;
...
# root of the chain
sub object: Chained PathPart('user') CaptureArgs(1) { ... }
object上面的操作会将用户对象加载到存储中。现在我将用户 Controller 链接到上面,如下所示:
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操作为 account_* 提供公共(public)数据方法,它们执行实际操作。

从设计的角度来看,将特定于方法的操作作为链的一部分(例如让 user 响应对 account 操作的 POST 请求)似乎有点违反直觉。这可能有效,但我从未尝试过。

上面的例子当然是简化的。我通常有一个 base每个 Controller 中的操作设置命名空间和一个公共(public)父操作,并且 Controller 中的所有其他操作将链接该操作。然后我会有一个 object像上面加载单个资源和 root对于 Controller 的根操作。由于您可以构建任何类型的树结构,因此它相当灵活。因此,最好的解决方案通常取决于您的约束条件。

关于perl - 如何通过 REST 接口(interface)使用 Catalyst 和 uri 链接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8493686/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com