REST Api и внутренняя работа приложения

Рейтинг: 1Ответов: 1Опубликовано: 16.01.2015

Как я понял, REST Api это внешний интерфейс для работы с данными. А как осуществляется работа внутри приложения? Обращаться из кода по внешней ссылке за порцией данных вместо прямого обращения к БД, на мой взгляд, глупая идея.

Тряпками не кидайтесь, если вопрос тупой, я всего лишь в начале пути.

Скажем, для того что вывести список на странице, мы делаем get запрос

api/users

который нам возвращает json. А внутри приложения как оно происходит? Может, нужно просто метод обращаться к методу на "его языке"? Вроде этого:

$users->get('users')

Ответы

▲ 2Принят

REST это для клиент-серверных приложений. Есть бэкенд и фронтенд, где первый как раз определяет REST сервис, а второй делает отображение.

Вот в пример: у меня есть сайт и мобильное приложение, а есть сервер с бд. Так вот сайт и приложение являются представлением данных и каждый делает это по-своему но оба основываясь на данных, которые отдает сервис, который напрямую связан с БД.

Если приложение построено на моделях (entities), что есть гуд, тогда код будет примерно такой

$users = UserRepository::find()->where('role'=>'online_access');

Но может выглядеть и по-другому, в зависимости от того, какова архитектура, и пр. В общем суть такова, что бэкенд работает с бд и данными, затем приводит их к какому-то виду.

UPD. Вот тебе пример рабочего метода из REST-сервиса

/**
 * All
 * Lists all Users (available for roles with code LIST_ACCESS)
 *
 * @throws EmptyResponseException If no user was found
 * @throws ForbiddenHttpException If role code LIST_ACCESS not available
 *
 * @return array of users
 */
public function actionAll()
{
    /** @var User $user to find */
    $user = User::findOne(
        [
            'token' => $this->getToken()
        ]
    );

    /** If no data was fetched */
    if (is_null($user)) {
        throw new EmptyResponseException;
    }

    /** @var Role $role of fetched user so we can decide, is that page available or not */
    $role = $user->getRole();
    /** Check section access to view other profiles */
    if (!$role->hasSectionAccess(self::LIST_ACCESS)) {
        throw new ForbiddenHttpException("Access denied for this user");
    }

    /** Fetch all users */

    return $this->response(User::find()->all());
}