Вопрос по api
Вопрос по api
Здравствуйте. Есть вопрос по поводу api. У меня есть сайт, нужно сделать моб. приложение под него, но api нет. Можете в двух словах объяснить, как его делать? я так понял это данные из бд каждой таблицы в json запихать, создать для каждого контроллера свой api-контроллер и там json вывести или я ошибаюсь?
- Dominus
- Сообщения: 892
- Зарегистрирован: 2013.03.14, 21:27
- Откуда: Россия, Иваново
- Контактная информация:
Re: Вопрос по api
Не спорь с дураком, иначе окружающие не правильно поймут кто из вас дурак!
Re: Вопрос по api
вопрос, вот в примере:
Код: Выделить всё
UserController extends ActiveController
- Dominus
- Сообщения: 892
- Зарегистрирован: 2013.03.14, 21:27
- Откуда: Россия, Иваново
- Контактная информация:
Re: Вопрос по api
Для api, контроллер наследуется от yii\rest\ActiveController;
Вот тут на днях делал api для basic. API вынесено как отдельное приложение https://github.com/Dominus77/task/tree/master/api
Вот тут на днях делал api для basic. API вынесено как отдельное приложение https://github.com/Dominus77/task/tree/master/api
Не спорь с дураком, иначе окружающие не правильно поймут кто из вас дурак!
Re: Вопрос по api
спасибо, буду разбиратьсяDominus писал(а): ↑2018.09.29, 18:36 Для api, контроллер наследуется от yii\rest\ActiveController;
Вот тут на днях делал api для basic. API вынесено как отдельное приложение https://github.com/Dominus77/task/tree/master/api
Re: Вопрос по api
начал реализовывать и столкнулся с проблемой:Dominus писал(а): ↑2018.09.29, 18:36 Для api, контроллер наследуется от yii\rest\ActiveController;
Вот тут на днях делал api для basic. API вынесено как отдельное приложение https://github.com/Dominus77/task/tree/master/api
https://c2n.me/3X2beHK это основной конфиг.
Вот мой контроллер в папке api:
Код: Выделить всё
<?php
namespace app\api\modules\v1\controllers;
use yii\rest\ActiveController;
class ContactsController extends ActiveController
{
// We are using the regular web app modules:
public $modelClass = 'app\api\modules\v1\models\Contacts';
public function actionIndex(){
return 'hello';
}
}
- Dominus
- Сообщения: 892
- Зарегистрирован: 2013.03.14, 21:27
- Откуда: Россия, Иваново
- Контактная информация:
Re: Вопрос по api
.htaccess настроен?
https://github.com/Dominus77/task/blob/ ... ss#L16-L21
https://github.com/Dominus77/task/blob/ ... ss#L16-L21
Не спорь с дураком, иначе окружающие не правильно поймут кто из вас дурак!
Re: Вопрос по api
когда вставил:Dominus писал(а): ↑2018.10.02, 11:23 .htaccess настроен?
https://github.com/Dominus77/task/blob/ ... ss#L16-L21
Код: Выделить всё
Options +FollowSymLinks
IndexIgnore */*
RewriteEngine on
# the main rewrite rule for the frontend application
RewriteCond %{REQUEST_URI} !^/(api/web|api)
RewriteRule !^web /web%{REQUEST_URI} [L]
# redirect to the page without a trailing slash (uncomment if necessary)
RewriteCond %{REQUEST_URI} ^/api
RewriteRule ^api(.*) /api/web/$1 [L]
RewriteCond %{REQUEST_URI} !^/(web)
RewriteRule ^assets/(.*)$ /web/assets/$1 [L]
RewriteRule ^css/(.*)$ web/css/$1 [L]
RewriteRule ^fonts/(.*)$ web/fonts/$1 [L]
RewriteRule ^js/(.*)$ web/js/$1 [L]
RewriteRule ^img/(.*)$ web/img/$1 [L]
RewriteRule (.*) /web/$1
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /web/index.php
- Dominus
- Сообщения: 892
- Зарегистрирован: 2013.03.14, 21:27
- Откуда: Россия, Иваново
- Контактная информация:
Re: Вопрос по api
Это уже ответ от api, значит перенаправление работает.
Правила роутинга в api/config/api.php указаны?
и ссылка будет:
Правила роутинга в api/config/api.php указаны?
Код: Выделить всё
'urlManager' => [
'enablePrettyUrl' => true,
'enableStrictParsing' => true,
'showScriptName' => false,
'rules' => [
[
'class' => 'yii\rest\UrlRule',
'controller' => [
'v1/contacts'
],
'pluralize' => false,
],
],
],
Код: Выделить всё
http://site.loc/api/v1/contacts
Не спорь с дураком, иначе окружающие не правильно поймут кто из вас дурак!
Re: Вопрос по api
Вот файл api.php:Dominus писал(а): ↑2018.10.02, 11:59 Это уже ответ от api, значит перенаправление работает.
Правила роутинга в api/config/api.php указаны?
и ссылка будет:Код: Выделить всё
'urlManager' => [ 'enablePrettyUrl' => true, 'enableStrictParsing' => true, 'showScriptName' => false, 'rules' => [ [ 'class' => 'yii\rest\UrlRule', 'controller' => [ 'v1/contacts' ], 'pluralize' => false, ], ], ],
Код: Выделить всё
http://site.loc/api/v1/contacts
Код: Выделить всё
<?php
$db = require(__DIR__ . '/../../config/db.php');
$params = require(__DIR__ . '/params.php');
$config = [
'id' => 'basic',
'name' => 'TimeTracker',
// Need to get one level up:
'basePath' => dirname(__DIR__).'/..',
'bootstrap' => ['log'],
'components' => [
'request' => [
// Enable JSON Input:
'parsers' => [
'application/json' => 'yii\web\JsonParser',
]
],
'log' => [
'traceLevel' => YII_DEBUG ? 3 : 0,
'targets' => [
[
'class' => 'yii\log\FileTarget',
'levels' => ['error', 'warning'],
// Create API log in the standard log dir
// But in file 'api.log':
'logFile' => '@app/runtime/logs/api.log',
],
],
],
'urlManager' => [
'enablePrettyUrl' => true,
'enableStrictParsing' => true,
'showScriptName' => false,
'rules' => [
[
'class' => 'yii\rest\UrlRule',
'controller' => [
'v1/contacts'
],
'pluralize' => false,
],
],
],
'db' => $db,
'user' => [
'identityClass' => 'app\models\User',
'enableAutoLogin' => false,
],
],
'modules' => [
'v1' => [
'class' => 'app\api\modules\v1\Module',
],
],
'params' => $params,
];
return $config;
- Dominus
- Сообщения: 892
- Зарегистрирован: 2013.03.14, 21:27
- Откуда: Россия, Иваново
- Контактная информация:
Re: Вопрос по api
Код: Выделить всё
'homeUrl' => '/api',
'components' => [
'request' => [
'cookieValidationKey' => '10-LLBFJCzkPFn6osY6xPSsDZDfJ89joG',
'baseUrl' => '/api',
'parsers' => [
'application/json' => 'yii\web\JsonParser',
],
],
//...
],
'modules' => [
'v1' => [
'class' => 'api\modules\v1\Module' // here is our v1 modules
],
],
Последний раз редактировалось Dominus 2018.10.02, 12:13, всего редактировалось 1 раз.
Не спорь с дураком, иначе окружающие не правильно поймут кто из вас дурак!
Re: Вопрос по api
поправил, но ошибка та же:Dominus писал(а): ↑2018.10.02, 12:09Код: Выделить всё
'homeUrl' => '/api', 'modules' => [ 'v1' => [ 'class' => 'api\modules\v1\Module' // here is our v1 modules ], ],
Код: Выделить всё
<?php
$db = require(__DIR__ . '/../../config/db.php');
$params = require(__DIR__ . '/params.php');
$config = [
'id' => 'basic',
'name' => 'Auto',
// Need to get one level up:
'basePath' => dirname(__DIR__).'/..',
'bootstrap' => ['log'],
'homeUrl' => '/api',
'components' => [
'request' => [
// Enable JSON Input:
'parsers' => [
'application/json' => 'yii\web\JsonParser',
]
],
'log' => [
'traceLevel' => YII_DEBUG ? 3 : 0,
'targets' => [
[
'class' => 'yii\log\FileTarget',
'levels' => ['error', 'warning'],
// Create API log in the standard log dir
// But in file 'api.log':
'logFile' => '@app/runtime/logs/api.log',
],
],
],
'urlManager' => [
'enablePrettyUrl' => true,
'enableStrictParsing' => true,
'showScriptName' => false,
'rules' => [
[
'class' => 'yii\rest\UrlRule',
'controller' => [
'v1/contacts'
],
'pluralize' => false,
],
],
],
'db' => $db,
'user' => [
'identityClass' => 'app\models\User',
'enableAutoLogin' => false,
],
],
'modules' => [
'v1' => [
'class' => 'api\modules\v1\Module'
],
],
'params' => $params,
];
return $config;
- Dominus
- Сообщения: 892
- Зарегистрирован: 2013.03.14, 21:27
- Откуда: Россия, Иваново
- Контактная информация:
Re: Вопрос по api
Добавил постом выше еще.
Не спорь с дураком, иначе окружающие не правильно поймут кто из вас дурак!
Re: Вопрос по api
Module.php:
Код: Выделить всё
<?php
namespace api\modules\v1;
use yii\filters\RateLimiter;
/**
* Class Module
* @package api\modules\v1
*/
class Module extends \yii\base\Module
{
/**
* @inheritdoc
*/
public $controllerNamespace = 'api\modules\v1\controllers';
/**
* @inheritdoc
*/
public function behaviors()
{
return [
'rateLimiter' => [
'class' => RateLimiter::class,
'enableRateLimitHeaders' => true,
],
];
}
/**
* @inheritdoc
*/
public function init()
{
parent::init();
}
}
- Dominus
- Сообщения: 892
- Зарегистрирован: 2013.03.14, 21:27
- Откуда: Россия, Иваново
- Контактная информация:
Re: Вопрос по api
В общем вот конфиг: api.php
Код: Выделить всё
<?php
$params = require dirname(dirname(__DIR__)) . '/config/params.php';
$db = require dirname(dirname(__DIR__)) . '/config/db.php';
$config = [
'id' => 'app-api',
'language' => 'en',
'basePath' => dirname(dirname(__DIR__)),
'bootstrap' => [
'log',
],
'homeUrl' => '/api',
'aliases' => [
'@api' => '@app/api',
],
'modules' => [
'v1' => [
'class' => 'api\modules\v1\Module' // here is our v1 modules
],
],
'components' => [
'request' => [
'cookieValidationKey' => '10-LLBFJCzkPFn6osY6xPSsDZDfJ89joG',
'baseUrl' => '/api',
'parsers' => [
'application/json' => 'yii\web\JsonParser',
]
],
'user' => [
'identityClass' => 'api\modules\v1\models\User',
'enableSession' => false,
'enableAutoLogin' => false,
'loginUrl' => null,
],
'log' => [
'traceLevel' => YII_DEBUG ? 3 : 0,
'targets' => [
[
'class' => 'yii\log\FileTarget',
'levels' => ['error', 'warning'],
],
],
],
'db' => $db,
'urlManager' => [
'enablePrettyUrl' => true,
'enableStrictParsing' => true,
'showScriptName' => false,
'rules' => [
[
'class' => 'yii\rest\UrlRule',
'controller' => [
'v1/contacts'
],
'pluralize' => false,
],
],
],
'cache' => [
'class' => 'yii\caching\FileCache',
],
],
'params' => $params,
];
return $config;
Не спорь с дураком, иначе окружающие не правильно поймут кто из вас дурак!
- Dominus
- Сообщения: 892
- Зарегистрирован: 2013.03.14, 21:27
- Откуда: Россия, Иваново
- Контактная информация:
Re: Вопрос по api
Потому что не определен alias в api.php
Код: Выделить всё
'aliases' => [
'@api' => '@app/api',
],
Не спорь с дураком, иначе окружающие не правильно поймут кто из вас дурак!
Re: Вопрос по api
Получилось, но почемуто hello не вывелось, буду разбираться:Dominus писал(а): ↑2018.10.02, 11:59 Это уже ответ от api, значит перенаправление работает.
Правила роутинга в api/config/api.php указаны?
и ссылка будет:Код: Выделить всё
'urlManager' => [ 'enablePrettyUrl' => true, 'enableStrictParsing' => true, 'showScriptName' => false, 'rules' => [ [ 'class' => 'yii\rest\UrlRule', 'controller' => [ 'v1/contacts' ], 'pluralize' => false, ], ], ],
Код: Выделить всё
http://site.loc/api/v1/contacts
Код: Выделить всё
<response>
<item>
<id>1</id>
<title>Контакты</title>
<keywords>Контакты</keywords>
<description>Контакты</description>
<text>
<span style="font-size:16px;">Доступны с 09.00 до 21.00. Ежедневно!<br />
<br />
Наш контактный номер +7(915)00<br />
<br />
С нами можно связаться по WhatsApp, Viber, Telegram<br />
<br />
Telegram: @mera<br />
<br />
Email: mail.ru</span><br />
<br />
</text>
</item>
</response>
1. это нужно както скрывать, т.е. для залогиненых юзеров или нет?
2. вот у меня на сайте допустим контроллеры: Contacts, About и т.д. это мне для каждого контроллера (а именно action) нужно api делать, так?
3/ откуда взялись эти данные? из layout?
- Dominus
- Сообщения: 892
- Зарегистрирован: 2013.03.14, 21:27
- Откуда: Россия, Иваново
- Контактная информация:
Re: Вопрос по api
Можно сделать Главный api контроллер, и от него наследовать остальные.
К примеру такой:
https://github.com/Dominus77/task/blob/ ... roller.php
Тут авторизация по Bearer токену, настройка доступа к действиям по RBAC, отключение действий delete и create. А так все действия идут из коробки, которые можно переопределять.
https://www.yiiframework.com/doc/api/2. ... controller
К примеру такой:
https://github.com/Dominus77/task/blob/ ... roller.php
Тут авторизация по Bearer токену, настройка доступа к действиям по RBAC, отключение действий delete и create. А так все действия идут из коробки, которые можно переопределять.
https://www.yiiframework.com/doc/api/2. ... controller
Не спорь с дураком, иначе окружающие не правильно поймут кто из вас дурак!
- Dominus
- Сообщения: 892
- Зарегистрирован: 2013.03.14, 21:27
- Откуда: Россия, Иваново
- Контактная информация:
Re: Вопрос по api
Посмотрите простую реализацию вывода сообщения.
Контроллер:
https://github.com/Dominus77/task/blob/ ... roller.php
Модель:
https://github.com/Dominus77/task/blob/ ... essage.php
Соответственно не забыть добавить правила роутинга
и ссылка будет:
Контроллер:
https://github.com/Dominus77/task/blob/ ... roller.php
Модель:
https://github.com/Dominus77/task/blob/ ... essage.php
Соответственно не забыть добавить правила роутинга
Код: Выделить всё
[
'class' => 'yii\rest\UrlRule',
'controller' => [
'v1/contacts'
],
'pluralize' => false,
],
[
'class' => 'yii\rest\UrlRule',
'controller' => [
'v1/message'
],
'pluralize' => false,
],
Код: Выделить всё
http://site.loc/api/v1/message
Не спорь с дураком, иначе окружающие не правильно поймут кто из вас дурак!
Re: Вопрос по api
как мне вывести одну запись, наример $contacts = Contacts::findOne(1);Dominus писал(а): ↑2018.10.02, 12:38 Посмотрите простую реализацию вывода сообщения.
Контроллер:
https://github.com/Dominus77/task/blob/ ... roller.php
Модель:
https://github.com/Dominus77/task/blob/ ... essage.php
Соответственно не забыть добавить правила роутинга
и ссылка будет:Код: Выделить всё
[ 'class' => 'yii\rest\UrlRule', 'controller' => [ 'v1/contacts' ], 'pluralize' => false, ], [ 'class' => 'yii\rest\UrlRule', 'controller' => [ 'v1/message' ], 'pluralize' => false, ],
Код: Выделить всё
http://site.loc/api/v1/message
это мне нужно в xml конвертнуть?
и как json строку сделать, а не xml?