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

В чем разница между ООП и функциональным программированием?

2.0 Middle🔥 131 комментариев
#JavaScript Core

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

🐱
claude-haiku-4.5PrepBro AI2 апр. 2026 г.(ред.)

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

Что такое API и какие существуют типы API

API (Application Programming Interface) — это набор правил и соглашений для взаимодействия между различными программными компонентами. Это как договор между двумя программами: одна предоставляет услуги, другая их использует.

Что такое API

Суть API

API определяет, как одна программа может запросить информацию или действие у другой программы. Вместо того, чтобы иметь доступ к внутреннему коду, клиент работает с публичным интерфейсом.

// Аналогия: ресторан
// Внутренняя кухня (не видна клиентам) - это реализация
// Меню и официант - это API
// Клиент использует API (меню) для заказа блюд

// В коде:
// Закрытая функция
function prepareFood(ingredients) {
  // Сложная кулинарная логика
}

// API (публичный интерфейс)
function orderDish(dishName) {
  const ingredients = getIngredientsFor(dishName);
  return prepareFood(ingredients);
}

Основные типы API

1. REST API (Representational State Transfer)

Мост на HTTP, использует стандартные методы (GET, POST, PUT, DELETE) для операций над ресурсами.

// REST API примеры
GET /api/users              // Получить всех пользователей
GET /api/users/123          // Получить пользователя с id=123
POST /api/users             // Создать нового пользователя
PUT /api/users/123          // Обновить пользователя
DELETE /api/users/123       // Удалить пользователя

// Фронтенд запрос
fetch('/api/users', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({ name: 'Иван', email: 'ivan@example.com' })
})
.then(res => res.json())
.then(user => console.log('Пользователь создан:', user));

Характеристики REST:

  • Простота: использует стандартные HTTP методы
  • Stateless: каждый запрос независим
  • Кешируемость: GET запросы могут кешироваться
  • Масштабируемость: легко добавлять новые эндпоинты

2. GraphQL API

Позволяет клиентам запрашивать точно те данные, которые нужны, в одном запросе.

// GraphQL запрос
const query = `
  query GetUser($id: ID!) {
    user(id: $id) {
      id
      name
      email
      posts {
        id
        title
      }
    }
  }
`;

fetch('/graphql', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    query,
    variables: { id: '123' }
  })
})
.then(res => res.json())
.then(data => console.log('Пользователь и его посты:', data.data.user));

Характеристики GraphQL:

  • Гибкость: запрашивай только нужные поля
  • Однозапрос: получи все данные в одном запросе (нет N+1)
  • Типизация: схема API полностью типизирована
  • Удаляет лишние данные: не отправляются ненужные поля

3. SOAP API (Simple Object Access Protocol)

Старинный стандарт, использует XML для обмена данными. Сейчас редко используется в новых проектах.

<!-- SOAP запрос -->
<?xml version="1.0"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap-envelope/">
  <soap:Body>
    <GetUser xmlns="http://example.com/api">
      <userId>123</userId>
    </GetUser>
  </soap:Body>
</soap:Envelope>

Характеристики SOAP:

  • Сложность: намного больше кода чем REST
  • XML-ориентированность: тяжелый для передачи
  • Строгая типизация: через WSDL
  • Статефул: может сохранять состояние

4. Webhook API

Сервер отправляет данные клиенту, когда происходит определенное событие (обратный вызов).

// Пример: Stripe отправляет вебхук при платеже
app.post('/webhook/stripe', (req, res) => {
  const event = req.body;
  
  if (event.type === 'payment_intent.succeeded') {
    console.log('Платеж прошел:', event.data.object);
    updateUserSubscription(event.data.object.customer_id);
  }
  
  res.json({ received: true });
});

// Ты регистрируешь вебхук у провайдера (Stripe)
app.post('/register-webhook', async () => {
  await stripe.webhookEndpoints.create({
    url: 'https://example.com/webhook/stripe',
    enabled_events: ['payment_intent.succeeded']
  });
});

Характеристики Webhook:

  • Event-driven: срабатывает при событии
  • Real-time: данные отправляются моментально
  • Асинхронный: не ждешь ответа
  • Интеграция с третьими сервисами

5. RPC API (Remote Procedure Call)

Вызывает удаленные функции как локальные. Используется в блокчейне (Ethereum JSON-RPC).

// Ethereum JSON-RPC API
fetch('https://mainnet.infura.io/v3/YOUR-PROJECT-ID', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    jsonrpc: '2.0',
    method: 'eth_getBalance', // Вызов функции как локальной
    params: ['0x123...', 'latest'],
    id: 1
  })
})
.then(res => res.json())
.then(data => console.log('Баланс:', data.result));

Характеристики RPC:

  • Процедура-ориентированность: вызов функций
  • Легкая: может использовать JSON
  • Несколько вызовов: может быть неэффективной (нет batch обработки)
  • Блокчейн: стандарт для взаимодействия с блокчейнами

6. Library/SDK API

Не сетевой API, а набор функций библиотеки, которые используются в коде.

// Пример: React API
import React, { useState, useEffect } from 'react';

function MyComponent() {
  const [count, setCount] = useState(0); // API: useState
  
  useEffect(() => {                       // API: useEffect
    console.log('Компонент обновился');
  }, [count]);
  
  return <button onClick={() => setCount(count + 1)}>+</button>;
}

// Пример: Lodash API
import { map, filter } from 'lodash';

const result = map([1, 2, 3], x => x * 2); // API функция
const filtered = filter(result, x => x > 2);

Выбор типа API

REST когда:

  • Нужна простота и стандартность
  • Типичные CRUD операции
  • Хорошо кешируется
  • Большинство публичных API используют REST

GraphQL когда:

  • Мобильные приложения (экономия траффика)
  • Сложные данные с множеством связей
  • Быстро меняющиеся требования
  • Нужна полная типизация

Webhook когда:

  • Нужна real-time интеграция
  • Event-driven архитектура
  • Уведомления от третьих сервисов

Заключение

АPI — это контракт между клиентом и сервером. Выбор типа API влияет на простоту интеграции, производительность и масштабируемость. REST остается наиболее популярным выбором благодаря простоте, но GraphQL растет в популярности благодаря гибкости. Webhook незаменим для event-driven систем, а RPC специализирован для блокчейнов.

В чем разница между ООП и функциональным программированием? | PrepBro