JavaRush /Курсы /Модуль 4: FastAPI /Пример интеграции FastAPI с Google Sheets для записи данн...

Пример интеграции FastAPI с Google Sheets для записи данных

Модуль 4: FastAPI
17 уровень , 8 лекция
Открыта

В этой лекции мы создадим мини-приложение на FastAPI, которое будет:

  • Принимать от пользователя данные через POST-запрос.
  • Записывать эти данные в Google Sheet.
  • Убедимся, что всё работает гладко и безопасно: настроим валидацию данных, а также разграничим доступ.

Каждый этап будет сопровождаться кодом, комментариями и пояснениями.

И да, в конце — у вас на руках будет приложение, которое можно продемонстрировать на собеседовании.


Подготовка к работе

Если вы ещё не создали Google Cloud проект и сервисный аккаунт для доступа к Google Sheets API — настоятельно рекомендую вернуться к лекции 72 и 74. Вам понадобятся:

  • JSON-файл с ключами сервисного аккаунта.
  • Доступ к Google Sheet (создайте любую таблицу вручную для демонстрации).

Для более детальной информации по Google Sheets API — обратитесь к официальной документации.


Установка библиотек

Наше приложение потребует нескольких библиотек. Убедитесь, что у вас установлены:

  • fastapi для создания API.
  • httpx для асинхронных запросов.
  • google-auth и google-auth-oauthlib для работы с авторизацией.
  • google-api-python-client для взаимодействия с Google Sheets API.

Установим всё через pip:

pip install fastapi httpx google-auth google-auth-oauthlib google-api-python-client uvicorn

Теперь у вас есть все инструменты. Время кодить!


Настройки Google Sheets API

Создайте в папке проекта файл settings.py и добавьте туда настройки для проекта:


# settings.py
SERVICE_ACCOUNT_FILE = "path/to/your/service_account.json"  # Укажите путь к JSON с ключами
SPREADSHEET_ID = "your-spreadsheet-id"  # ID таблицы Google Sheets
Где взять SPREADSHEET_ID?

Откройте Google Sheets в браузере, скопируйте часть URL между /d/ и /edit.


Создание FastAPI-приложения

Приступим к созданию FastAPI-приложения. Начнём с базовой структуры.

Базовый проект: main.py


from fastapi import FastAPI
from google.oauth2.service_account import Credentials
from googleapiclient.discovery import build

# Импортируем настройки
from settings import SERVICE_ACCOUNT_FILE, SPREADSHEET_ID

# Инициализация приложения
app = FastAPI()

# Настраиваем авторизацию с использованием сервисного аккаунта
credentials = Credentials.from_service_account_file(SERVICE_ACCOUNT_FILE)
service = build('sheets', 'v4', credentials=credentials)

@app.get("/")
def root():
    return {"message": "Добро пожаловать в API для работы с Google Sheets!"}

Запустите приложение командой:

uvicorn main:app --reload

И проверьте в браузере: http://127.0.0.1:8000 — вы должны увидеть сообщение. Базовая настройка готова.


Реализация записи данных в Google Sheet

Теперь создадим эндпоинт (/add-data), который будет принимать данные и записывать их в Google Sheet. Для демонстрации мы предположим, что пользователь отправляет JSON с полями name и age.

Код для добавления данных


from fastapi import FastAPI, HTTPException
from pydantic import BaseModel
from googleapiclient.errors import HttpError

# Импортируем всё из базового примера
from settings import SERVICE_ACCOUNT_FILE, SPREADSHEET_ID
from google.oauth2.service_account import Credentials
from googleapiclient.discovery import build

# Обновляем приложение
app = FastAPI()

credentials = Credentials.from_service_account_file(SERVICE_ACCOUNT_FILE)
service = build('sheets', 'v4', credentials=credentials)

# Модель данных для валидации
class UserData(BaseModel):
    name: str
    age: int

@app.post("/add-data")
async def add_data(user_data: UserData):
    """
    Эндпоинт для добавления данных в Google Sheet.
    """
    try:
        # Формируем запрос для записи данных
        values = [[user_data.name, user_data.age]]
        body = {
            'values': values
        }
        result = service.spreadsheets().values().append(
            spreadsheetId=SPREADSHEET_ID,
            range='Sheet1!A1:B1',  # Указываем диапазон (A1:B1 для простоты)
            valueInputOption='RAW',
            body=body
        ).execute()

        return {"status": "success", "updatedCells": result.get('updates').get('updatedCells')}
    except HttpError as e:
        raise HTTPException(status_code=500, detail=f"Ошибка при работе с Google API: {e}")

Отлично, давайте проверим, как это работает.


Тестирование эндпоинта

  1. Откройте Postman, Curl или любой другой инструмент.
  2. Отправьте POST-запрос на эндпоинт http://127.0.0.1:8000/add-data со следующим телом запроса:
{
    "name": "Иван Иванов",
    "age": 25
}
  1. Проверьте таблицу Google Sheets. Данные должны появиться в первых двух колонках (A и B).

Разграничение прав доступа

Для безопасности вы можете дополнительно разграничить доступ, добавив JWT-токены или ограничив IP-адреса, которые могут вызывать API.

Мы рассмотрим это в следующих лекциях (см. темы по JWT и OAuth2).


Расширение функциональности

Наше приложение работает, но что если пользователь захочет добавить ещё столбцы? Или у нас будут сложные таблицы

Вот некоторые идеи для улучшения:

  • Указывать диапазон в запросе (например, range="Sheet1!A1:D1").
  • Добавить возможность чтения данных в отдельном эндпоинте.
  • Валидация данных перед записью для предотвращения некорректного ввода.
  • Создание логов для отслеживания всех операций.

Полезные ресурсы

Теперь у вас есть рабочая интеграция FastAPI и Google Sheets,
которую можно использовать как основу для построения более сложных приложений.

1
Задача
Модуль 4: FastAPI, 17 уровень, 8 лекция
Недоступна
Настройка базового FastAPI-приложения для интеграции с Google Sheets
Настройка базового FastAPI-приложения для интеграции с Google Sheets
1
Задача
Модуль 4: FastAPI, 17 уровень, 8 лекция
Недоступна
Создание POST-эндпоинта для добавления данных в Google Sheets
Создание POST-эндпоинта для добавления данных в Google Sheets
Комментарии
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ