Веб-разработка. Доработка существующего продукта, разработка с нуля. Техническое задание на разработку сервисов внешнего api и встраиваемого виджета для сайта продажи билетов в музеи # 1. Цель Цель – разработать внешнее api для сайта avangard-travel.com; c его использованием разработать встраиваемый на другие веб-сайты функциональный блок покупки билетов (веб-виджет). # 2. Описание сервисов Внешнее api - модуль получения запросов от внешних источников с авторизацией и аутентификацией запросов. Для осуществления аутентификации и разделения прав доступов необходим механизм учета и выдачи / обновления / отзыва api ключей. (Интерфейс учета внешний приложений) Виджет является клиентом для подачи заявки с веб-страницы на которую он был добавлен. Продажа билетов через виджет принадлежит конкретному агенту avangard-travel, чьи учетные данные интерфейса (fid и api_key) передаются в ссылке. Соответсвенно, за эти продажи агент получает вознаграждение. Информация о сущностях необходимых для заказа должна передаваться посредством внешнего api. fid и api_key - механизм идентификации приложения и авторизации клиента сервером *Веб-виджет является частным случаем внешнего приложения/клиента который получает данные путем запросов на внешнее api с использованием выданного на него api_key* ## 2.1. Функционал внешнего api Внешнее api подразумевает возможность: - передачи внешнему ресурсу информации о сущностях системы необходимых для создания заказа: объекты продажи, билеты, цены, статическая информация об объектах (график работы, контакты, описание, информация как использовать билет, фото и т.д.) и т.д. - передачу информации о ценах на билеты с учетом добавленного процента стоимости, который устанавливается в интерфейсе учета внешних приложений - создания заказа во внутреней системе avangard-travel.com путем получения внешнего запроса - передачу сгенерированных билетов - проведения оплаты ## 2.2. Функционал виджета По наполнению виджет должен отображать: - форму создания заказа близкую / аналогичную к сайту avangard-travel.com: выбор объекта, даты, времени, кол-ва билетов, доп. услуг и тд - Должен отображать цены на виды билетов с учетом добавленного процента закрепленного за агентом в интерфейсе учета внешних приложений - Должен отображать статическую информацию об объекте (график, контакты, описание, как использовать билет и тд) Виджет должен позволять продавать билеты как в отдельный музей, так и во все музеи в городе или все музеи платформы. Для этого должна быть возможность выбрать один из трех вариантов использования: - для всех музеев в городе - для всех музеев платформы - только для выбранного музея ## 2.3. Требования к веб-виджету Добавление виджета на сторонний сайт должно происходить путем встраивания js скрипта. ## 2.4. Требования к внешнему api ### 2.4.1. Общие требования к типу запросов: - Все методы API с типом запроса GET для поддержки jsonp. Запрос авторизуется на сервере при помощи ключа API из кабинета учета внешних приложений в параметре входящего запроса api_key: Пример запроса: https://avangard-travel.com/api/v1/partner_api/get-museums?api_key=PARTNER_API_KEY Общие требования к статусам ответов и ошибок. Ошибки возвращаются в виде кода статуса HTTP и тела ответа. Например ошибка валидации входящих данных, HTTP code 422, тело ответа: { “error“: [{ “code“: 1422, “title“: “ошибка входящих данных“, “message“: “вы не ввели ФИО клиента“ }] } “error“: [...] может содержать более одного элемента в массиве, в случае, если в одном запросе несколько разных ошибок. ### 2.4.2. Схема оплаты заказа 1. Переадресация пользователя на платежную страницу билетариума (модульбанк), после выбора им билетов для покупки билетов. 2. Возможна вторая схема оплаты - Предусматривает проведение оплаты непосредственно внутри системы партнера и выписывание билета через API.(Под вопросом) # 3. Стек технологий django 2.1.2 postgresql celery # 4. Требования к дизайну Дизайн встраимового виджета для заказа билетов можно сделать приближенным к сайту avangard-travel.com # 5. Дополнительные требования - API должен обрабатывать все запросы асинхронно. - Для обработки запросов должен использоваться язык программирования Python и фреймворк Django. - Для хранения данных используйте реляционную базу данных PostgreSQL. - Все запросы должны быть защищены от атак XSS, SQL Injection и других уязвимостей. - API должен поддерживать кеширование для улучшения производительности. - Документация API должна быть предоставлена в формате Swagger. - API должен логировать все запросы и ошибки.