Как будешь описывать задачи для Backend?
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Описание задач для Backend разработчиков
Описание требований для Backend — это критически важный процесс, определяющий качество и скорость разработки серверной части. System Analyst должен предоставить полную, точную и однозначную спецификацию.
1. API Specification (OpenAPI/Swagger)
Это самый важный документ для Backend разработчика. OpenAPI (Swagger) стандарт позволяет описать API полностью.
Структура спецификации:
openapi: 3.0.0
info:
title: Order Management API
version: 1.0.0
description: API для управления заказами
servers:
- url: https://api.example.com/v1
description: Production
- url: https://api-staging.example.com/v1
description: Staging
paths:
/orders:
get:
summary: Получить список заказов
operationId: getOrders
parameters:
- name: limit
in: query
schema:
type: integer
minimum: 1
maximum: 100
description: Количество результатов
- name: offset
in: query
schema:
type: integer
minimum: 0
responses:
200:
description: Список заказов
content:
application/json:
schema:
type: object
properties:
data:
type: array
items:
$ref: "#/components/schemas/Order"
total:
type: integer
400:
description: Неверные параметры
content:
application/json:
schema:
$ref: "#/components/schemas/Error"
post:
summary: Создать новый заказ
operationId: createOrder
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
customer_id:
type: string
format: uuid
items:
type: array
items:
type: object
properties:
product_id:
type: string
format: uuid
quantity:
type: integer
minimum: 1
required:
- customer_id
- items
responses:
201:
description: Заказ создан
content:
application/json:
schema:
$ref: "#/components/schemas/Order"
400:
description: Неверные данные
components:
schemas:
Order:
type: object
properties:
id:
type: string
format: uuid
customer_id:
type: string
format: uuid
status:
type: string
enum: [pending, confirmed, shipped, delivered, cancelled]
total_amount:
type: number
format: double
created_at:
type: string
format: date-time
items:
type: array
items:
$ref: "#/components/schemas/OrderItem"
required:
- id
- customer_id
- status
OrderItem:
type: object
properties:
id:
type: string
format: uuid
order_id:
type: string
format: uuid
product_id:
type: string
format: uuid
quantity:
type: integer
price:
type: number
Error:
type: object
properties:
error:
type: string
description: Описание ошибки
code:
type: string
description: Код ошибки
timestamp:
type: string
format: date-time
required:
- error
- code
2. Data Models (Модели данных)
Entity Relationship диаграмма или DDL скрипты:
CREATE TABLE customers (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
email VARCHAR(255) UNIQUE NOT NULL,
name VARCHAR(255) NOT NULL,
phone VARCHAR(20),
created_at TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE orders (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
customer_id UUID NOT NULL REFERENCES customers(id) ON DELETE RESTRICT,
status VARCHAR(50) NOT NULL DEFAULT pending,
total_amount DECIMAL(10, 2),
notes TEXT,
created_at TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE order_items (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
order_id UUID NOT NULL REFERENCES orders(id) ON DELETE CASCADE,
product_id UUID NOT NULL REFERENCES products(id),
quantity INT NOT NULL CHECK (quantity > 0),
price DECIMAL(10, 2) NOT NULL,
created_at TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP
);
CREATE INDEX idx_orders_customer ON orders(customer_id);
CREATE INDEX idx_order_items_order ON order_items(order_id);
3. Business Logic Requirements
Описание правил обработки данных:
### Создание заказа
Шаги:
1. Валидация входных данных
- customer_id должен существовать
- items не должен быть пустым
- quantity каждого товара >= 1
2. Проверка наличия товара
- Для каждого товара проверить stock > quantity
- Если недостаточно — вернуть 400 ошибку
3. Расчёт стоимости
- Для каждого товара: price = product.price * quantity
- total_amount = SUM(price)
4. Создание заказа в БД
- INSERT в таблицу orders (со статусом pending)
- INSERT в таблицу order_items
5. Резервирование товара
- UPDATE products SET stock = stock - quantity WHERE id = product_id
- Использовать SELECT FOR UPDATE для избежания race condition
6. Отправка уведомления
- Отправить асинхронное событие (message queue или webhook)
- Email: подтверждение заказа
- SMS: опционально
### Изменение статуса заказа
Переходы статусов:
pending -> confirmed (вручную или автоматически)
confirmed -> shipped (упаковано)
shipped -> delivered (доставлено)
Любой статус -> cancelled (отмена)
При отмене:
- Вернуть товар в stock
- Отправить уведомление
- Проверить если уже доставлен — ошибка
4. Database Queries
Примеры сложных запросов:
-- Получить заказы клиента со статистикой
SELECT
o.id,
o.status,
o.total_amount,
COUNT(oi.id) as item_count,
SUM(oi.quantity) as total_quantity,
o.created_at
FROM orders o
LEFT JOIN order_items oi ON o.id = oi.order_id
WHERE o.customer_id = @customer_id
GROUP BY o.id
ORDER BY o.created_at DESC
LIMIT @limit OFFSET @offset;
-- Получить товары в заказе с информацией о продукте
SELECT
oi.id,
oi.quantity,
oi.price,
p.name,
p.description,
p.current_price
FROM order_items oi
JOIN products p ON oi.product_id = p.id
WHERE oi.order_id = @order_id
ORDER BY oi.created_at;
5. Integration Requirements
Внешние системы и интеграции:
### Payment Processing
API: Stripe API (https://api.stripe.com/v1/...)
Метод: POST /v1/payment_intents
Параметры:
- amount: integer (в центах)
- currency: USD
- customer_id: строка
- metadata: {order_id}
Обработка:
- При успехе (status: succeeded) — обновить заказ
- При ошибке — логировать и вернуть клиенту
- Webhook от Stripe для обработки асинхронных событий
### Email Notifications
Сервис: SendGrid
Метод: POST /v3/mail/send
Шаблоны:
- order_confirmed.html
- order_shipped.html
- order_delivered.html
Параметры:
- to: customer.email
- template_id: из SendGrid
- dynamic_data: {order_id, tracking_number}
### Logging & Monitoring
- Логировать все ошибки БД в структурированном формате
- Метрики: время обработки запроса, количество ошибок
- Алерты: если время ответа > 1s или rate limit достигнут
6. Performance Requirements
Требования производительности:
- GET /orders должен выполняться за < 100ms
- POST /orders должен выполняться за < 500ms
- Поддержка 1000 одновременных соединений
- Database connection pooling: 20 connections
- Redis cache для часто запрашиваемых товаров
- Batch operations: максимум 100 items в одном запросе
- Rate limiting: 100 requests/minute per IP
7. Error Handling
Стандартная обработка ошибок:
{
"error": "Product not found",
"code": "PRODUCT_NOT_FOUND",
"status": 404,
"timestamp": "2024-01-01T12:00:00Z",
"path": "/api/v1/products/invalid-id"
}
Коды ошибок:
- INVALID_REQUEST: 400
- UNAUTHORIZED: 401
- FORBIDDEN: 403
- NOT_FOUND: 404
- CONFLICT: 409
- INTERNAL_ERROR: 500
- SERVICE_UNAVAILABLE: 503
8. Authentication & Authorization
Требования безопасности:
- Все endpoints требуют JWT токена в заголовке Authorization
- Format: Authorization: Bearer <token>
- Token expiration: 1 час
- Refresh token: 7 дней
Права доступа:
- CUSTOMER: может просматривать и создавать только свои заказы
- MANAGER: может просматривать и редактировать все заказы
- ADMIN: полный доступ
9. Testing Requirements
Тестовые сценарии:
Unit тесты:
- Валидация входных данных
- Расчёт стоимости
- Логика изменения статуса
Integration тесты:
- Создание заказа с реальной БД
- Интеграция с платёжной системой
- Отправка email
E2E тесты:
- Полный сценарий от создания заказа до доставки
10. Deployment & Configuration
Переменные окружения:
DATABASE_URL=postgresql://...
REDIS_URL=redis://...
STRIPE_API_KEY=sk_test_...
SENDGRID_API_KEY=SG...
LOG_LEVEL=info
PORT=8000
Лучшие практики при описании Backend задач
1. Используйте OpenAPI/Swagger — это стандарт, который понимают все
2. Будьте конкретны в деталях:
- Типы данных (не просто "string", а VARCHAR(255))
- Ограничения (не отрицательные числа)
- Обязательные и опциональные поля
- Примеры запросов и ответов
3. Покройте все сценарии:
- Happy path (успех)
- Error scenarios (ошибки)
- Edge cases (пограничные случаи)
- Concurrency (конкурирующие операции)
4. Думайте о производительности:
- Какой максимальный размер данных?
- Какие индексы нужны?
- Нужен ли кэш?
- Какая пропускная способность требуется?
5. Документируйте зависимости:
- Какие внешние API используются?
- Какие асинхронные операции?
- Какие очереди сообщений?
6. Обсудите с разработчиком:
- Убедитесь, что требования понятны
- Выясните технические ограничения
- Согласуйте timeline
Правильное описание задач для Backend экономит недели доработок и предотвращает критические баги в production.