У меня есть существующее приложение Yii2 и пытались реализовать REST API в качестве дополнительного модуля (возможно, модуль не является правильным способом для этого?) Но у меня есть некоторые проблемы с настройкой структуры маршрута. Он не совсем работает и не соответствует ожидаемым результатам, основанным на following guide.Yii2 REST API как конфигурация маршрута модуля
Я построил дополнительный модуль, который выглядит следующим образом:
module
api
controllers
UserController.php
Module.php
UserController.php
<?php
namespace app\modules\api\controllers;
use yii\rest\ActiveController;
class UserController extends ActiveController
{
public $modelClass = 'app\models\User';
}
module.php
<?php
namespace app\modules\api;
/**
* onco module definition class
*/
class Module extends \yii\base\Module
{
public $defaultController = 'user';
/**
* @inheritdoc
*/
public $controllerNamespace = 'app\modules\api\controllers';
/**
* @inheritdoc
*/
public function init()
{
parent::init();
// custom initialization code goes here
}
}
В моей конфигурации файл У меня есть добавлено следующее:
'request' => [
...
'parsers' => [
'application/json' => 'yii\web\JsonParser',
]
],
...
'urlManager' => [
'enablePrettyUrl' => true,
'showScriptName' => false,
'enableStrictParsing' => false, // have tried as true also
'rules' => [
...
['class' => 'yii\rest\UrlRule', 'controller' => '\app\modules\api\controllers\user'],
],
],
...
'modules' => [
...
'api' => [ // module for RESTful API
'class' => 'app\modules\api\Module',
],
]
Когда я бегу по следующим адресам через почтальона я получаю следующее:
- http://localhost/site1/web/api/users -> 404
- http://localhost/site1/web/api/users/index -> 404
- http://localhost/site1/web/api/user/index -> возвращает JSON repsonse
- http://localhost/site1/web/api/user/2 -> 404
Я не уверен, почему предсказанные маршруты отмеченных в документации, как:
Попытки его с вышеприведенным минимальным количеством усилий, вы должны уже закончили свою задачу создания RESTful API-интерфейсов для доступ к данным пользователя . Созданные вами API включают: GET/users: список всех пользователей по страницам;
HEAD/пользователи: показать обзорную информацию о листинге пользователя;
POST/пользователи: создать нового пользователя;
GET/users/123: вернуть данные пользователя 123;
HEAD/пользователи/123: показать обзорную информацию пользователя 123;
PATCH/пользователи/123 и PUT/пользователи/123: обновите пользователя 123;
УДАЛИТЬ/пользователей/123: удалить пользователя 123;
ОПЦИИ/пользователи: показать поддерживаемые глаголы относительно конечных точек/пользователей;
OPTIONS/пользователей/123: показать поддерживаемые глаголы в отношении конечных пользователей// 123
Что я, вероятно, сделали неправильно в этой установке? Есть ли лучший способ реализовать API на существующем веб-сайте, поддерживая DRY-методы?
Довольно URL-адреса уже включены для сайта, как есть. Я попробовал свои изменения, но получил тот же результат :-( – Jonnny
'' controller '=> [' api/user '] 'вы попробовали его с' 'enableStrictParsing' => true'? –
Я думаю, что это, возможно, сработало. я могу получить доступ к http: // localhost/site1/web/users и http: // localhost/site1/web/users/2, чтобы получить информацию обратно. Просто подтверждая другие требования – Jonnny