262 lines
9.2 KiB
Markdown
262 lines
9.2 KiB
Markdown
|
|
# Готовые API и решения для построения визардов
|
|||
|
|
|
|||
|
|
**Дата:** 2025-01-XX
|
|||
|
|
**Цель:** Найти готовые API/сервисы для генерации структуры визарда
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 🔍 Результаты поиска
|
|||
|
|
|
|||
|
|
### ❌ Готовых API для генерации структуры визарда НЕТ
|
|||
|
|
|
|||
|
|
**Что найдено:**
|
|||
|
|
- Библиотеки для **рендеринга** визардов на фронтенде (React, Vue, JS)
|
|||
|
|
- Сервисы для **создания форм** программно (Form.io, Typeform)
|
|||
|
|
- Но **НЕТ** API, который принимает описание проблемы и возвращает структуру визарда
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 📦 Найденные решения (для рендеринга)
|
|||
|
|
|
|||
|
|
### 1. **React-jsonschema-form** / **@rjsf/core**
|
|||
|
|
**Что это:** Библиотека для рендеринга форм из JSON Schema
|
|||
|
|
|
|||
|
|
**Плюсы:**
|
|||
|
|
- ✅ Готовая библиотека для React
|
|||
|
|
- ✅ Поддержка валидации
|
|||
|
|
- ✅ Условная логика (show/hide полей)
|
|||
|
|
- ✅ Кастомизация виджетов
|
|||
|
|
|
|||
|
|
**Минусы:**
|
|||
|
|
- ❌ Нужно самому генерировать JSON Schema
|
|||
|
|
- ❌ Не решает проблему генерации структуры
|
|||
|
|
|
|||
|
|
**Использование:**
|
|||
|
|
```typescript
|
|||
|
|
import Form from "@rjsf/core";
|
|||
|
|
|
|||
|
|
const schema = {
|
|||
|
|
type: "object",
|
|||
|
|
properties: {
|
|||
|
|
item: { type: "string", title: "Название товара" },
|
|||
|
|
purchase_date: { type: "string", format: "date", title: "Дата покупки" }
|
|||
|
|
}
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
<Form schema={schema} />
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**Вывод:** Полезно для рендеринга, но структуру всё равно нужно генерировать самим.
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 2. **Form.io** (платный сервис)
|
|||
|
|
**Что это:** Платформа для создания форм с API
|
|||
|
|
|
|||
|
|
**Плюсы:**
|
|||
|
|
- ✅ Есть API для создания форм программно
|
|||
|
|
- ✅ Поддержка условной логики
|
|||
|
|
- ✅ Готовые компоненты
|
|||
|
|
|
|||
|
|
**Минусы:**
|
|||
|
|
- ❌ Платный (от $99/месяц)
|
|||
|
|
- ❌ Нет генерации структуры из описания
|
|||
|
|
- ❌ Нужно самому создавать формы через API
|
|||
|
|
|
|||
|
|
**API пример:**
|
|||
|
|
```javascript
|
|||
|
|
// Создание формы через API
|
|||
|
|
POST https://api.form.io/v1/form
|
|||
|
|
{
|
|||
|
|
"title": "Claim Form",
|
|||
|
|
"components": [
|
|||
|
|
{
|
|||
|
|
"type": "textfield",
|
|||
|
|
"key": "item",
|
|||
|
|
"label": "Название товара"
|
|||
|
|
}
|
|||
|
|
]
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**Вывод:** Дорого и не решает задачу генерации структуры.
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 3. **Typeform API**
|
|||
|
|
**Что это:** API для создания Typeform форм
|
|||
|
|
|
|||
|
|
**Плюсы:**
|
|||
|
|
- ✅ Есть API
|
|||
|
|
- ✅ Красивый UI
|
|||
|
|
|
|||
|
|
**Минусы:**
|
|||
|
|
- ❌ Платный (от $25/месяц)
|
|||
|
|
- ❌ Нет генерации структуры
|
|||
|
|
- ❌ Своя экосистема (не встраивается в наш проект)
|
|||
|
|
|
|||
|
|
**Вывод:** Не подходит для нашей задачи.
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 4. **JSON Schema Form Generators**
|
|||
|
|
|
|||
|
|
**Библиотеки:**
|
|||
|
|
- `react-jsonschema-form`
|
|||
|
|
- `@rjsf/core`
|
|||
|
|
- `formik` + `yup` (схемы валидации)
|
|||
|
|
|
|||
|
|
**Плюсы:**
|
|||
|
|
- ✅ Стандарт JSON Schema
|
|||
|
|
- ✅ Гибкость в описании форм
|
|||
|
|
- ✅ Валидация из коробки
|
|||
|
|
|
|||
|
|
**Минусы:**
|
|||
|
|
- ❌ Нужно самому генерировать схему
|
|||
|
|
- ❌ Не решает задачу генерации структуры
|
|||
|
|
|
|||
|
|
**Пример JSON Schema:**
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"type": "object",
|
|||
|
|
"properties": {
|
|||
|
|
"item": {
|
|||
|
|
"type": "string",
|
|||
|
|
"title": "Название товара",
|
|||
|
|
"required": true
|
|||
|
|
},
|
|||
|
|
"purchase_date": {
|
|||
|
|
"type": "string",
|
|||
|
|
"format": "date",
|
|||
|
|
"title": "Дата покупки"
|
|||
|
|
},
|
|||
|
|
"documents_available": {
|
|||
|
|
"type": "array",
|
|||
|
|
"title": "Какие документы есть?",
|
|||
|
|
"items": {
|
|||
|
|
"type": "string",
|
|||
|
|
"enum": ["receipt", "contract", "photos"]
|
|||
|
|
},
|
|||
|
|
"uniqueItems": true
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**Вывод:** Можно использовать для рендеринга, но генерацию структуры нужно делать самим.
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 🎯 Вывод: Нет готового решения
|
|||
|
|
|
|||
|
|
### Почему нет готового API?
|
|||
|
|
|
|||
|
|
1. **Специфичность задачи:** Генерация визарда на основе описания проблемы - это очень специфичная задача для юридической сферы
|
|||
|
|
2. **Контекст:** Нужно понимать контекст дела, типы документов, требования законодательства
|
|||
|
|
3. **Кастомизация:** Каждый проект имеет свои требования к структуре визарда
|
|||
|
|
|
|||
|
|
### Что есть:
|
|||
|
|
- ✅ Библиотеки для **рендеринга** форм (React, Vue, JS)
|
|||
|
|
- ✅ Сервисы для **создания** форм программно (Form.io, Typeform)
|
|||
|
|
- ❌ API для **генерации структуры** визарда из описания - **НЕТ**
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 💡 Рекомендации
|
|||
|
|
|
|||
|
|
### Вариант 1: Свой генератор (рекомендуется)
|
|||
|
|
|
|||
|
|
**Архитектура:**
|
|||
|
|
```
|
|||
|
|
Описание → ИИ (классификация) → Бэкенд (шаблоны) → JSON Schema → Фронтенд (рендеринг)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**Плюсы:**
|
|||
|
|
- ✅ Полный контроль
|
|||
|
|
- ✅ Оптимизация под наши нужды
|
|||
|
|
- ✅ Нет зависимости от внешних сервисов
|
|||
|
|
- ✅ Бесплатно
|
|||
|
|
|
|||
|
|
**Реализация:**
|
|||
|
|
1. ИИ классифицирует случай
|
|||
|
|
2. Бэкенд выбирает шаблон
|
|||
|
|
3. Генерируем JSON Schema или наш формат
|
|||
|
|
4. Фронтенд рендерит через `react-jsonschema-form` или свой компонент
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### Вариант 2: Гибридный подход
|
|||
|
|
|
|||
|
|
**Использовать готовые библиотеки для рендеринга:**
|
|||
|
|
- `@rjsf/core` для рендеринга форм
|
|||
|
|
- Свой генератор JSON Schema в бэкенде
|
|||
|
|
|
|||
|
|
**Плюсы:**
|
|||
|
|
- ✅ Готовая валидация и UI
|
|||
|
|
- ✅ Меньше кода на фронтенде
|
|||
|
|
- ✅ Стандартный формат (JSON Schema)
|
|||
|
|
|
|||
|
|
**Минусы:**
|
|||
|
|
- ❌ Нужно адаптировать под наш формат визарда
|
|||
|
|
- ❌ Может быть избыточно
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### Вариант 3: Использовать Form.io (если бюджет есть)
|
|||
|
|
|
|||
|
|
**Если готовы платить $99+/месяц:**
|
|||
|
|
- Использовать Form.io API для создания форм
|
|||
|
|
- Но генерацию структуры всё равно делать самим через ИИ
|
|||
|
|
|
|||
|
|
**Вывод:** Не стоит того, так как генерацию структуры всё равно нужно делать самим.
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 🚀 Итоговая рекомендация
|
|||
|
|
|
|||
|
|
### Использовать свой генератор + готовые библиотеки для рендеринга
|
|||
|
|
|
|||
|
|
**Стек:**
|
|||
|
|
1. **Генерация структуры:** Свой бэкенд (ИИ + шаблоны)
|
|||
|
|
2. **Формат:** JSON Schema или наш формат
|
|||
|
|
3. **Рендеринг:** `@rjsf/core` или свой компонент
|
|||
|
|
|
|||
|
|
**Почему:**
|
|||
|
|
- ✅ Нет готовых API для генерации структуры
|
|||
|
|
- ✅ Готовые библиотеки для рендеринга есть
|
|||
|
|
- ✅ Полный контроль над процессом
|
|||
|
|
- ✅ Оптимизация под наши нужды
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 📚 Полезные ссылки
|
|||
|
|
|
|||
|
|
### Библиотеки для рендеринга:
|
|||
|
|
- [react-jsonschema-form](https://github.com/rjsf-team/react-jsonschema-form)
|
|||
|
|
- [@rjsf/core](https://github.com/rjsf-team/react-jsonschema-form)
|
|||
|
|
- [Formik](https://formik.org/) - управление формами в React
|
|||
|
|
- [React Hook Form](https://react-hook-form.com/) - производительные формы
|
|||
|
|
|
|||
|
|
### JSON Schema:
|
|||
|
|
- [JSON Schema Specification](https://json-schema.org/)
|
|||
|
|
- [JSON Schema Examples](https://json-schema.org/learn/examples-guide)
|
|||
|
|
|
|||
|
|
### Сервисы (для справки):
|
|||
|
|
- [Form.io](https://form.io/) - платный, от $99/мес
|
|||
|
|
- [Typeform API](https://developer.typeform.com/) - платный, от $25/мес
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## ✅ Вывод
|
|||
|
|
|
|||
|
|
**Готовых API для генерации структуры визарда нет.**
|
|||
|
|
**Нужно делать свой генератор**, но можно использовать готовые библиотеки для рендеринга.
|
|||
|
|
|
|||
|
|
**Рекомендуемый подход:**
|
|||
|
|
1. ИИ классифицирует случай (5-10 сек)
|
|||
|
|
2. Бэкенд генерирует структуру из шаблонов (0.1 сек)
|
|||
|
|
3. Фронтенд рендерит через `@rjsf/core` или свой компонент
|
|||
|
|
|
|||
|
|
**Это оптимальный баланс скорости, контроля и стоимости.**
|
|||
|
|
|