限时 5折! 详情
restful api 请求方式问题
4 178 2017-09-07

api控制器类名为TestAbcController.php
urlManager配置如下:

'urlManager' => [
            'enablePrettyUrl' => true,  //美化url==ture
            'enableStrictParsing' => true,  //启用严格解析
            'showScriptName' => false,   //隐藏index.php
            'rules' => [
                [
                    'class' => 'yii\rest\UrlRule',
                    'controller' => [
                        'v1/thy-study',
                        'v1/objectdata',
                        'v1/test',
                    ],
                    'extraPatterns' => [
                        'GET index' => 'test-abc/index',
                        'POST index' => 'test-abc/index',
                    ],
                    'pluralize' => false,   //禁用复数形式
                ],
            ],
        ],

问题:
1.通过get 方法请求返回正常,通过post方法请求则报404,index方法不需要传参数.
2.Yii::$app->request->bodyParams;获取不到请求参数的问题还没解决.
目的:我打算约定所有接口都以POST方法请求,不知道这样是不是符合restful风格

  • 4 个回答
  • urlManager配置贴错了,发现贴子删不了.下面修改:

    'urlManager' => [
                'enablePrettyUrl' => true,  //美化url==ture
                'enableStrictParsing' => true,  //启用严格解析
                'showScriptName' => false,   //隐藏index.php
                'rules' => [
                    [
                        'class' => 'yii\rest\UrlRule',
                        'controller' => [
                            'v1/test-abc',
                        ],
                        'extraPatterns' => [
                            'GET index' => 'test-abc/index',
                            'POST index' => 'test-abc/index',
                        ],
                        'pluralize' => false,   //禁用复数形式
                    ],
                ],
            ],

    1. get请求请通过 Yii::$app->request->get 获取参数
    2. 可以约定所有接口都是post
    3. post 404的问题,请检查日志,看看404是主动抛出的还是路由解析问题抑或是其他问题
    4. 其他问题:发现你不会换行,markdown语法,一行写完之后,按两次空格键,解析的时候会自动换行

    1. 以下配置能正常访问
      'extraPatterns' => [
                          'GET index' => 'index',
                          'POST index' => 'index',
                      ],
    2. 以下配置用get 或post请求返回404,什么原因?
      'extraPatterns' => [
                          'GET test-abc/index' => 'test-abc/index',
                          'POST test-abc/index' => 'test-abc/index',
                      ],
    3. get 请求index访求直接访问控制器名称就可以,如果是自定义方法就需要控制名加上方法名.如:locahost/test-abc/test ,test为自定义方法.这种默认访问的方式在哪里定义?
    4. 朋友,你咋看出来的我不会换行?你不说我还真不知道.

  • 为testAbcController定义默认的action?

    [
        'controller' => ['v1/test-abc'],
        'extraPatterns' => [
            'GET' => 'test',
        ],
    ],

登录 去赚佣金