Как настроить REST?

Всё что касается построения API
Закрыто
Аватара пользователя
Sufir
Сообщения: 15
Зарегистрирован: 2015.01.23, 18:50

Как настроить REST?

Сообщение Sufir »

Попробовал настроить вот по этой инструкции https://github.com/yiisoft/yii2/blob/ma ... k-start.md
Но описано тут всё очень скромно, а тема популярная. Может кто-то подскажет или поделится ссылкой?

1.

Код: Выделить всё

'urlManager' => [
    // ...
    'enableStrictParsing' => true,
    'rules' => [
        ['class' => 'yii\rest\UrlRule', 'controller' => 'user'],
    ],
] 
C enableStrictParsing оно не работает. Если отключить, то по `/user` открывается и выводятся пользователи, но не по `/users` как в инструкции. Опечатка, или маршрут умеет сам разруливать `/users` для коллекции и `/user/id` для одного пользователя?

2. `/users/123` и `/user/123` недоступны, 404-я, куда смотреть?
2.1 Оно ищет всегда по ID или по PK?

3. 404-я, и вообще обработка ошибок. Сейчас кидает на стандартный 'site/error', как настроить, что бы ошибки обрабатывались правильно и всегда возвращался валидный REST? Сейчас ничего похожего на https://github.com/yiisoft/yii2/blob/ma ... andling.md - обычная html страничка.
Аватара пользователя
Sufir
Сообщения: 15
Зарегистрирован: 2015.01.23, 18:50

Re: Как настроить REST?

Сообщение Sufir »

3 решил вот таким макаром

Код: Выделить всё

class SiteController extends Controller
{
    public function actionIndex()
    {
        throw new NotFoundHttpException('Unknown resource');
    }

    public function actionError()
    {
        if (($exception = Yii::$app->getErrorHandler()->exception) === null) {
            $exception = new HttpException(404, Yii::t('yii', 'Page not found.'));
        }

        if ($exception instanceof HttpException) {
            $code = $exception->statusCode;
        } else {
            $code = $exception->getCode();
        }

        if ($exception instanceof Exception) {
            $name = $exception->getName();
        } else {
            $name = $this->defaultName ?: Yii::t('yii', 'Error');
        }

        if ($code) {
            $name .= " (#$code)";
        }

        if ($exception instanceof UserException) {
            $message = $exception->getMessage();
        } else {
            $message = $this->defaultMessage ?: Yii::t('yii', 'An internal server error occurred.');
        }

        return Yii::createObject($this->serializer)->serialize([
            'name' => $name,
            'message' => $message,
            'code' => $exception->getCode(),
            'status' => ($exception instanceof HttpException) ? $exception->statusCode : 0,
        ]);
    }
} 
Не костыль-ли? Выглядит как стандартная задача, нет готового решения?
Закрыто