Запускаем приложение на Express.js в Yandex Cloud Functions
Node.js — удобная масштабируемая серверная платформа для работы с JavaScript. С помощью нее и различных поддерживаемых фреймворков, таких как Express, Connect или Koa, можно создавать полноценные приложения.
Если идти по пути упрощения администрирования, возникает желание загрузить приложение в Yandex Cloud Functions и вызывать его из облака. К сожалению, пока нельзя просто так взять и запустить в облаке приложение, написанное на любом популярном node.js-фреймворке. Фреймворки пишут ответ в сокет HTTP(S). Рантайм функций ожидает получить от пользовательского кода функции объект определенного содержания.
«Из коробки» это работать не будет, но можно научить приложение возвращать ответ в ожидаемом формате. Разберем, как это сделать, на примере приложения Express.js с двумя эндпоинтами.
Создаем и запускаем новый проект
Создаем новую директорию и инициируем в ней новый проект:
Далее в index.js добавляем следующий код:
Запускаем проект и проверяем, что приходят ожидаемые ответы:
Адаптируем проект под Serverless
Это универсальный враппер, он поддерживает не только Express, но и Connect, Koa, restana, а также экспериментально другие фреймворки: Sails, Hapi, Fastify, Restify, Polka и LoopBack.
Затем модифицируем наш пример. Заменяем запуск сервера на порте 3000 экспортом функции-обработчика, которая будет вызываться serverless-рантаймом облака:
Теперь наше приложение готово к запуску в облаке.
Развертываем приложение в облаке
Для того чтобы развернуть код в облаке, проще всего воспользоваться утилитой serverless. У Yandex.Cloud есть свой плагин, который позволяет деплоить функции. Из него пока нельзя развернуть еще один ключевой компонент системы — Yandex API Gateway, мы чуть позже сделаем это вручную через консоль.
Устанавливаем Serverless Framework и плагин к нему:
Далее создаем в проекте файл serverless.yaml с содержимым:
Деплоим функцию командой:
Если сделать функцию публичной и вызвать ее по предложенному URL, передав путь /api/info , то в ответ мы получим следующую ошибку:
необходима настройка API Gateway.
Создание API Gateway
Спецификация должна соответствовать стандарту OpenAPI 3.0, для нашего простого API ее можно написать руками:
Не забудьте поменять %function_id% и %service_account_id% на ваши значения. У сервисного аккаунта должна быть роль serverless.functions.invoker или выше, если вы оставили функцию без публичного доступа.
В более сложных случаях можно попробовать сгенерировать спецификацию OpenAPI на основе уже имеющегося кода API. Для этого подойдет express-oas-generator.
Теперь наше приложение работает и доступно по URL.
Кстати, к API Gateway можно привязать свой домен. Как приязать домен — читайте в этом посте.
Новый параметр API Gateway
Совсем недавно в API Gateway появилась возможность указать параметр вида . В этом случае будут матчиться и вложенные пути.
В первом параметре функции event в проперти path будет лежать значение вида /api/%7Bproxy+%7D и роутер Express.js будет ломаться.
Решения как минимум два:
написать честный provider для Yandex.Cloud по образу того, что сейчас есть для AWS;
пропатчить объект event, положив в path значение из url (строки 13–19 в примере ниже).
Пример готового скрипта можно скачать.
Источник
Яндекс.Диск API
Работал кто-нибудь с этим API? Запускаю дефолтный пример яндекса, и при авторизации через браузер показывает вот это:
Никто не сталкивался с такой проблемой?
Яндекс диск api.Adroid studio
Здравствуйте дорогие форумчане, нужна ваша скромная помощь. Помогите разобраться с тем как.
Реализация Яндекс SpeechKit Cloud API
Добрый день! Пытаюсь встроить в своё приложение распознование речи от яндекса. У меня получилось.
Android SDK Manager не отображает платформы 2.3.3 (API 10), 2.3.1 (API 9). Как быть?
Добрый день! Использую Android Studio под Windows 7. Из-за несовместимости с операционной системой.
Android Studio не дает работать с API 8 без установленного API 21
Удалил все не интересующие меня библиотеки и поставил только API Level 8. Но при создании.
Callback URI не могу посмотреть так как акrаунт за яндексом зарегистрирован, но предполагаю что он http://localhost
Решение
Судя по вашему манифесту, он должен быть yandexdisk://чтоугодно в противном случае ничего работать не будет. Есть два пути решения вашей проблемы:
1) Регистрируйте свой аккаунт и сделайте в нем нормальный Callback URI. Нормальный это например такой:
имяВашегоПриложения://чтоугодно/
Затем в манифесте меняете строчку
И всё начинает работать.
2) Этот вариант нужно использовать если аккаунт не ваш, и изменить Callback URI вы не можете. Чтоб всё заработало нужно заменить строчку
Спасибо! Вы очень помогли!
Дабы не создавать новую тему про API облачных хранилищ задам вопрос в этом топике.
Разбирался с Dropbox Datastore API и столкнулся со следующей проблемой.
При попытке получить экземпляр DbxAccountManager
вылетает следующее исключение:
Причем это происходит и в примерах Dropbox и в моих поделках)
Запускаю приложение, диалог как положено открывает браузер предоставления прав моему «testapp» приложению предлагая авторизоваться под УЗ Яндекса. Нажимаю «предоставить», браузер открывает адрес:
В котором по идее есть токен, тип, время жизни, т.е. всё по плану. Но вместо перехода в приложение остаюсь в браузере с текстом:
На страничке настройки приложения https://oauth.yandex.ru/ есть так же чекбокс «Веб-сервисы» если отметить который появляется ещё одной поле ввода «Callback URI #1» и кнопка «Подставить URL для разработки» по нажатию на которую в поле ввода подставляется «https://oauth.yandex.ru/verification_code». В некоторых инструкциях по авторизации в Yandex OAuth так и написано было сделать, я оставил. Тоже не заработало, но есть некоторые изменения. После предоставления приложению доступа к ресурсам пользования (Диску в данном случае) редиректит на
А токен таже дублируется в теле самой странички в браузере. Но дальнейшего перехода в приложение тоже не происходит. onCreate/onResume не вызывается. По несколько раз всё перепроверил — id приложения, пакет, SHA256
Это какой-то тупик, кто-нибудь можнет подсказать где я ошибся, что-то со схемой, перехватом Intent’а и др? Настройки приложения из примера Яндекса не доступны, их же нельзя посмотреть, что бы сделать у себя по аналогии.
Яндекс карты и Яндекс MapKit
Передо мной стоят такие задачи: показать карту, на ней показать маркеры на определенных.
Ошибка minSDK(API 23, N preview) != deviceSDK(API 17)
Недавно начал учить андроид и возникла такая ошибка, когда я пытаюсь запустить проект на своем.
Яндекс Диск Api
Всем привет! Решил разобраться с Яндекс Диск Api, а именно WebDAV.
Источник