REST API模式解释?

4

我刚接触rest api的制作。

我想知道rest api的路由如何工作。我有一个api,在一个路由下可以工作,但在另一个路由下却无法工作。我需要做出什么确切的修改,才能将每个api调用绑定到特定的VERB上。

例如,我只希望使用GET动词调用/customer/view,而put和post不应该能够进行此调用,这是否可以通过路由设置实现?

以下是我的路由设置:

一个可以工作的示例如下:

'<controller:\w+>'                   => '<controller>/list',
'<controller:\w+>/<action:\w+>'      => '<controller>/<action>',
'<controller:\w+>/<id:\d+>/<title>'  => '<controller>/view',
'<controller:\w+>/<id:\d+>'          => '<controller>/view',

这个不起作用,特别是像这样调用的视图,基本上我可以从任何请求方法中调用它,如何绑定到特定请求方法?
https://myipaddress/wiz-frontend-himanshu/customer/view/?id=test

rest routes

array('customer/list', 'pattern'=>'customer/<model:\w+>', 'verb'=>'GET'),
array('customer/view', 'pattern'=>'customer/<model:\w+>/<id:\w+>', 'verb'=>'GET'),
array('customer/update', 'pattern'=>'customer/<model:\w+>/<id:\d+>', 'verb'=>'PUT'),
array('customer/delete', 'pattern'=>'customer/<model:\w+>/<id:\d+>', 'verb'=>'DELETE'),
array('customer/create', 'pattern'=>'customer/<model:\w+>/<id:\d+>', 'verb'=>'POST'),

有人能解释一下这个模式的作用是什么,我需要做哪些修改才能运行我的视图调用?


你对我们的期望并不是很清楚。我鼓励你编辑你的问题来解决这个问题。 - Florian F.
@FlorianF。我很尴尬地承认,我不知道如何使用这种模式映射URI,以及如何将其绑定到特定的动词。例如,我希望/api/view仅能被GET动词调用,如果有人使用其他动词,则不应允许。 - Himanshu97
根据您发布的代码和此文档,您的路由应该按预期工作。也许您可以更新您的问题,包括这些细节。+1 - Florian F.
是的,那正是我正在遵循的准确文档,但是...尽管如此它还是无法工作。 - Himanshu97
1个回答

2
也许我误解了,但我猜你需要做以下操作:
将你的API控制器放在单独的模块中(例如命名为api),并在你的URL管理器中指定以下规则:
// GET
array('api/<controller>/list', 'pattern'=>'api/<controller:\w+>', 'verb'=>'GET'),
array('api/<controller>/view', 'pattern'=>'api/<controller:\w+>/<id:\d+>', 'verb'=>'GET'),
// POST
array('api/<controller>/create', 'pattern'=>'api/<controller:\w+>', 'verb'=>'POST'),
// PUT
array('api/<controller>/update', 'pattern'=>'api/<controller:\w+>/<id:\d+>', 'verb'=>'PUT'),
array('api/<controller>/update', 'pattern'=>'api/<controller:\w+>', 'verb'=>'PUT'),
// DELETE
array('api/<controller>/delete', 'pattern'=>'api/<controller:\w+>/<id:\d+>', 'verb'=>'DELETE'),
array('api/<controller>/delete', 'pattern'=>'api/<controller:\w+>', 'verb'=>'DELETE'),

以下是调用API的URL:

GET:/api/users - 用户列表(在users控制器中使用actionList()

GET:/api/users/12 - id为12的用户(在users控制器中使用actionView()

POST:/api/user - 创建新用户(在users控制器中使用actionCreate()

PUT:/api/user/12 - 更新id为12的用户信息(在users控制器中使用actionUpdate()

DELETE:/api/user/12 - 删除id为12的用户(在users控制器中使用actionDelete()


请注意,不要改变原始的HTML代码。

1
@Himanshu97 你可以尝试使用这个扩展: https://github.com/goodnickoff/yiirestmodel - Goodnickoff
我刚刚编辑了帖子。URL示例中有一些错误。 - Goodnickoff

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接