Разработка сервисов внешнего api и встраиваемого виджета для сайта

500 руб. за проект
28 февраля 2023, 15:21 • 3 отклика • 100 просмотров
Техническое задание на разработку сервисов внешнего 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...
Общие требования к статусам ответов и ошибок.
Ошибки возвращаются в виде кода статуса 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 должен логировать все запросы и ошибки.