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,
яку можна використовувати як основу для побудови більш складних додатків.

Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ