Реализация шлюза API с FastAPI
Научитесь создавать шлюз API с помощью FastAPI для маршрутизации запросов и объединения ответов от нескольких микросервисов.
«Реализация шлюза API с FastAPI» — бесплатный урок FastAPI Backend Development Bootcamp на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения FastAPI Backend Development Bootcamp, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс FastAPI Backend Development Bootcamp содержит 4 уроков всего.
Части этого урока еще не переведены и отображаются на английском.
What's an API Gateway?
Imagine your microservices are different shops in a mall. An API Gateway is like the mall's main entrance or information desk.
- It's a single entry point for all client requests.
- It routes requests to the correct backend service.
- It can combine responses from multiple services.
- It handles shared tasks like authentication or logging.
This keeps your client apps simpler and your backend services focused.
Why FastAPI for a Gateway?
FastAPI is an excellent choice for building an API Gateway due to its modern features:
- Asynchronous nature: It can handle many requests concurrently without blocking, perfect for proxying.
- High performance: Built on Starlette and Pydantic, it's very fast.
- Easy routing: FastAPI's intuitive routing makes directing requests simple.
- Dependency Injection: Helps manage shared resources and logic efficiently.
It acts as a lightweight, powerful reverse proxy.
The Core Idea: Proxying Requests
The main job of an API Gateway is to act as a proxy. This means it receives a request from a client, forwards it to a backend service, and then sends the backend's response back to the client.
We'll use the httpx library in Python to make asynchronous HTTP requests to our backend services from within our FastAPI gateway.
First, make sure you have httpx installed: pip install httpx
Basic GET Request Proxy
Let's create a simple FastAPI gateway that proxies a GET request to a public dummy API. Our gateway endpoint /proxy-todo will fetch a todo item from jsonplaceholder.typicode.com.
import httpx
from fastapi import FastAPI
import uvicorn
app = FastAPI()
BACKEND_SERVICE_URL = "https://jsonplaceholder.typicode.com/todos/1"
@app.get("/proxy-todo")
async def proxy_todo_item():
async with httpx.AsyncClient() as client:
response = await client.get(BACKEND_SERVICE_URL)
response.raise_for_status() # Raises HTTPStatusError for 4xx/5xx responses
return response.json()
if __name__ == "__main__":
uvicorn.run(app, host="0.0.0.0", port=8000)Forwarding Path Parameters
Often, backend services require dynamic data in their URLs, known as path parameters. Your API Gateway needs to capture these parameters from the client request and forward them to the correct backend URL.
Here, we proxy requests to /proxy-todos/{todo_id}, passing todo_id to the backend.
import httpx
from fastapi import FastAPI
import uvicorn
app = FastAPI()
BACKEND_BASE_URL = "https://jsonplaceholder.typicode.com"
@app.get("/proxy-todos/{todo_id}")
async def proxy_todo_item_by_id(todo_id: int):
async with httpx.AsyncClient() as client:
backend_url = f"{BACKEND_BASE_URL}/todos/{todo_id}"
response = await client.get(backend_url)
response.raise_for_status()
return response.json()
if __name__ == "__main__":
uvicorn.run(app, host="0.0.0.0", port=8000)Handling POST/PUT Request Bodies
For requests like POST or PUT, clients send data in the request body. Your API Gateway must receive this body and forward it to the backend service. FastAPI's Request object allows us to access the raw request body.
We'll use request.json() to get the JSON body and pass it to httpx.
import httpx
from fastapi import FastAPI, Request
import uvicorn
app = FastAPI()
BACKEND_POST_URL = "https://jsonplaceholder.typicode.com/posts"
@app.post("/proxy-post")
async def proxy_create_post(request: Request):
body = await request.json() # Get the raw JSON body from the client
async with httpx.AsyncClient() as client:
# Forward the body to the backend service
response = await client.post(BACKEND_POST_URL, json=body)
response.raise_for_status()
return response.json()
if __name__ == "__main__":
uvicorn.run(app, host="0.0.0.0", port=8000)Aggregating Multiple Responses
One powerful feature of an API Gateway is response aggregation. This means the gateway can call multiple backend services, combine their individual responses, and return a single, unified response to the client.
This reduces the number of requests a client needs to make, simplifying client-side logic and potentially improving performance.
Example: User & Order Aggregation
Let's see an example where our gateway fetches user details from one backend and then a list of todos for that user from another, combining them into a single response.
import httpx
from fastapi import FastAPI
import uvicorn
app = FastAPI()
BACKEND_USERS_URL = "https://jsonplaceholder.typicode.com/users"
BACKEND_TODOS_URL = "https://jsonplaceholder.typicode.com/todos"
@app.get("/user-with-todos/{user_id}")
async def get_user_with_todos(user_id: int):
async with httpx.AsyncClient() as client:
# Fetch user details
user_response = await client.get(f"{BACKEND_USERS_URL}/{user_id}")
user_response.raise_for_status()
user_data = user_response.json()
# Fetch todos for that user
todos_response = await client.get(f"{BACKEND_TODOS_URL}?userId={user_id}")
todos_response.raise_for_status()
todos_data = todos_response.json()
# Combine the data before returning
user_data["todos"] = todos_data
return user_data
if __name__ == "__main__":
uvicorn.run(app, host="0.0.0.0", port=8000)Cross-Cutting Concerns at Gateway
Besides routing and aggregation, API Gateways are perfect for handling cross-cutting concerns. These are features needed by many services but not central to any one service's business logic.
- Authentication & Authorization: Validate tokens once at the gateway.
- Logging & Monitoring: Centralized request logging.
- Rate Limiting: Protect backend services from overload.
- Caching: Cache common responses to speed up delivery.
This offloads work from individual microservices.
Gateway Benefits Check
Which of the following are key benefits of using an API Gateway in a microservices architecture?
API Gateway with FastAPI Recap
You've learned how to build a powerful API Gateway using FastAPI!
- We understood what an API Gateway is and its benefits.
- We leveraged FastAPI's async capabilities for efficient proxying.
- We implemented basic GET, path parameter, and POST body forwarding.
- We explored how to aggregate responses from multiple backend services.
- You also saw how gateways centralize cross-cutting concerns.
FastAPI provides a robust and performant foundation for your microservice entry point!
Часто задаваемые вопросы
Урок «Реализация шлюза API с FastAPI» бесплатный?
Да — полный текст урока «Реализация шлюза API с FastAPI» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс FastAPI Backend Development Bootcamp, подпишись на CoddyKit PRO. Курс FastAPI Backend Development Bootcamp содержит 4 уроков всего.
Чему я научусь в уроке «Реализация шлюза API с FastAPI»?
Научитесь создавать шлюз API с помощью FastAPI для маршрутизации запросов и объединения ответов от нескольких микросервисов. Ты практикуешь FastAPI Backend Development Bootcamp с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать FastAPI Backend Development Bootcamp?
Предыдущий опыт не требуется. FastAPI Backend Development Bootcamp на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.
Сколько времени занимает урок «Реализация шлюза API с FastAPI»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке FastAPI Backend Development Bootcamp?
Да. Каждый урок FastAPI Backend Development Bootcamp включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Проектирование микросервисной архитектуры
- Взаимодействие между сервисами
- Реализация шлюза API с FastAPI
- Обнаружение служб и проверки работоспособности