Интересует общепринятый принцип построения RESTful API. В качестве бекэнда использовать планирую yii2 standart. Поставил сейчас свежую версию через композер, убрал web из адресной строки с помощью .htaccess.
Я представлял себе API как action класса, который возвращает нужные данные. Скажем, в БД есть таблица с данными о Клиентах и таблицах с данными о их Обращениях. Прикидывал, что можно сделать action, который бы сразу же вернул бы мне в одном json данные клиента и его обращения. Но если посмотреть на документацию yii2, то там есть примеры только по типу "одна модель - один action". Т.е. чтобы получить мне данные о клиенте и его обращениях мне нужно сделать два запроса на сервер. А если цепочка таблиц будет больше, то и запросов придётся сделать столько же. И потом это всё крутить-парсить на стороне vue.js.
Так как всё же правильно? Модель-action? Или же можно делать совмещённые action, которые возвращают данные сразу от нескольких моделей. Или может что-то другое? Быть может есть ещё какие-то подходы? Советы?
Дока http://www.yiiframework.com/doc-2.0/guide-rest-resources.html
Можно в одном запросе выводить данные о клиенте и его сообщениях. Есть два способа такой реализации:
В модели users
метод fields
возвращает связь с таблицей messages
class Users extends ActiveRecord
{
public function fields()
{
return [
'id',
'name',
'messages' => 'messages',
];
}
public function getMessages()
{
return $this->hasMany(Messages::className(), ['user_id' => 'id']);
}
}
Передавать специальный get
параметр expand
(http://localhost/user?expand=messages
). В этом случаи в модели
должен быть метод extraFields
class Users extends ActiveRecord
{
public function fields()
{
return [
'id',
'name',
];
}
public function extraFields()
{
return [
'messages',
];
}
public function getMessages()
{
return $this->hasMany(Messages::className(), ['user_id' => 'id']);
}
}
Совет простой: не использовать ActiveController. Используйте обычный yii\rest\Controller, в конфиге приложения укажите:
'request' => [
'parsers' => [
'application/json' => 'yii\web\JsonParser',
],
И формируйте данные как вам удобно. Без эктив рэкорда или с ним, это вообще не важно.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Здравствуйте! Есть ли способы обратимо зашифровать строку на php версии 2x? openssl_encrypt, crypt включены с 3 и 4 версии php соответственно
Периодически делаю мелкий рефакторинг своего кода над текущим проектом, я раньше вообще не занимался этим и только начинаю изучать это делоВот...