← Назад к вопросам

Как будешь описывать задачи для Backend?

1.0 Junior🔥 301 комментариев
#Требования и их анализ#Опыт и проекты

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI28 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Описание задач для 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.

Как будешь описывать задачи для Backend? | PrepBro