Как оптимизировать несколько запросов API в один вызов

При работе с API обычно выполняется несколько запросов GET для получения разных наборов данных. Однако выполнение нескольких вызовов API может повлиять на производительность и увеличить задержку в сети. В этой статье мы рассмотрим различные методы оптимизации нескольких запросов API в один вызов, сокращая накладные расходы и повышая эффективность.

Метод 1: Пакетные запросы
Многие API поддерживают пакетные запросы, что позволяет объединять несколько отдельных запросов в один вызов. Этот метод особенно полезен, когда вам нужно получить данные из разных конечных точек или ресурсов. Вот пример использования библиотеки запросов Python:

import requests
import json
url = 'https://api.example.com/batch'
requests_data = [
    {'method': 'GET', 'endpoint': '/users/1'},
    {'method': 'GET', 'endpoint': '/posts/42'},
    {'method': 'GET', 'endpoint': '/comments?postId=42'}
]
response = requests.post(url, json.dumps(requests_data))
data = response.json()
user_data = data[0]['response']
post_data = data[1]['response']
comment_data = data[2]['response']

Метод 2: GraphQL
Если API поддерживает GraphQL, вы можете использовать его для получения нескольких наборов данных в одном запросе. GraphQL позволяет указать точные данные, которые вам нужны, и получить их за один запрос, сокращая объем данных, передаваемых по сети. Вот пример использования пакета graphqlв Node.js:

const { graphql, buildSchema } = require('graphql');
const schema = buildSchema(`
  type User {
    id: ID
    name: String
  }
  type Post {
    id: ID
    title: String
  }
  type Query {
    user(id: ID!): User
    post(id: ID!): Post
  }
`);
const root = {
  user: ({ id }) => {
    // Fetch user data from the API
  },
  post: ({ id }) => {
    // Fetch post data from the API
  },
};
const query = `
  query {
    user(id: "1") {
      id
      name
    }
    post(id: "42") {
      id
      title
    }
  }
`;
graphql(schema, query, root).then((response) => {
  const userData = response.data.user;
  const postData = response.data.post;
});

Метод 3: агрегирование данных на серверной стороне.
Если у вас есть контроль над серверной частью API, вы можете реализовать собственную конечную точку, которая объединяет данные из нескольких источников и возвращает их в одном ответе. Такой подход уменьшает количество вызовов API, совершаемых клиентами. Вот пример использования Node.js и Express:

const express = require('express');
const axios = require('axios');
const app = express();
app.get('/data', async (req, res) => {
  try {
    const userData = await axios.get('https://api.example.com/users/1');
    const postData = await axios.get('https://api.example.com/posts/42');
    const commentData = await axios.get('https://api.example.com/comments?postId=42');
    const aggregatedData = {
      user: userData.data,
      post: postData.data,
      comments: commentData.data
    };
    res.json(aggregatedData);
  } catch (error) {
    res.status(500).json({ error: 'Internal server error' });
  }
});
app.listen(3000, () => {
  console.log('Server started on port 3000');
});

Оптимизируя несколько запросов API в один вызов, вы можете значительно повысить производительность и снизить нагрузку на сеть. Будь то пакетные запросы, GraphQL или агрегирование данных на серверной стороне, эти методы позволяют эффективно получать необходимые данные. Выберите метод, который лучше всего соответствует требованиям вашего проекта, и воспользуйтесь преимуществами оптимизированного взаимодействия через API.