Использование Api сайтом, нужно ли?

Добрый день, сразу оговорюсь - вопрос глупый.
Есть сайт (expressjs) + админка на реакте + мобильное приложение.
Написан самодостаточный модуль для общения админки и приложения с базой по Restful api.
Получается много дублируемого кода для rest и для сайта.
Может есть смысл и самим сайтом использовать rest, как бы по дурацки это не звучало?

// Rest
router.get('/', routeCache.cacheSeconds(20), async (req, res) => {
    let posts = await models.Post.findAll({
        attributes: ['id', 'title'],
        limit: 10,
    });
    posts = posts.map(item => ({ post_id: item.id, post_title: item.title }));
    res.setHeader('Content-Type', 'application/json');
    res.json(posts);
});

// Сайт
router.get('/', async (req, res) => {

//    let posts = await models.Post.findAll({
//        attributes: ['id', 'title'],
//        limit: 10,
//    });
//    posts = posts.map(item => ({ post_id: item.id, post_title: item.title }));

    const posts = await axios_get({
            url: `http://localhost/api/v1/?hash=${index.hash}`,
            data: index.data,
            },
        });
    res.render('index', {
        posts_list: posts,
    });
});


Посещаемость около 10к в сутки и, в силу специфики, вряд ли будет больше.
  • Вопрос задан
  • 383 просмотра
Пригласить эксперта
Ответы на вопрос 2
rockon404
@rockon404 Куратор тега React
Frontend Developer
Почему нельзя, просто, выделить common часть для обоих модулей?
А в модель поста можно прописать метод который будет доставать и мапить результаты.

Тогда у вас будет примерно такой код в rest:
router.get('/', routeCache.cacheSeconds(20), async (req, res) => {
    const posts = await models.Post.getPostsList({ limit: 10 });

    res.json(posts);
});


и такой для сайта:
router.get('/', async (req, res) => {
    const posts = await models.Post.getPostsList({ limit: 10 });

    res.render('index', { posts_list: posts });
});


Все просто и никаких костылей.
Обращения сервера сайта к rest это лишний код и лишние операции.

Метод res.json() сам добавляет к ответу заголовок Content-Type со значением 'application/json' если он не добавлен до этого.
Ответ написан
Комментировать
@Abcdefgk
Строчка res.setHeader('Content-Type', 'application/json'); точно лишняя.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы