本课程将深入学习API的进阶概念,并通过实际服务构建进行实践操作。课程采用理论与实践相结合的方式,旨在帮助学员掌握如何在实际项目中运用API。尚未了解API基础概念的学员,建议先阅读相关基础知识文章后再进行学习。
API进阶概念——服务构建的核心要义
1. API深化概念——服务构建的核心概念
1-1. API类型及实战应用方法
API根据目的和功能可分为多种类型。理解各类
API的使用场景,并在实战项目中选择合适的API至关重要。
1. REST API(表征状态转移)
- 这是最广泛使用的API架构。
- 通过HTTP请求实现客户端与服务端的数据交互。
- 特点:轻量级、标准化、支持多种客户端
- 示例:
GET /users/1→ 获取特定用户信息POST /reviews→ 添加新评论
2. GraphQL API
- 客户端可仅请求所需数据。
- 特点:比REST更灵活,可避免调用冗余数据。
- 示例:
{
user(id: "1") {
name
email
reviews {
title
rating
}
}
}
3. WebSocket API
- 适用于需要实时数据通信的场景(如聊天、实时通知)。
- 特点:通过持续连接实现快速响应。
- 示例:实现实时评论更新功能
4. Open API(公开API)
- 面向公众开放使用的API。
- 示例:
- TMDB API(提供影视剧数据)
- OpenWeather API(提供天气信息)
- ChatGPT API(AI文本生成API)
- 1-2. API认证(Authentication)与安全(Security)
- API的安全性至关重要。
- 必须防止未经授权的用户篡改或窃取数据。
- 1. API认证方式
- API密钥(简易方式)
- 用户请求API时需在请求头中包含API密钥。
- 示例:
Authorization: Bearer YOUR_API_KEY
- OAuth 2.0(社交登录、权限管理)
- 适用于Google、Facebook登录等场景。
- 通过获取访问令牌进行认证的方式。
- JWT(JSON Web Token)——增强安全性
- 客户端登录时,服务器会签发JWT令牌,
- 后续请求时需包含JWT进行认证。
- 2. API安全强化方案
- 使用HTTPS(SSL/TLS加密)
- API请求限制(速率限制)
- 配置CORS(跨源资源共享)
2. API实践——实际服务构建
实践项目:"悲伤剧集推荐API开发"
2-1. 项目目标与服务流程
项目目标
- 用户提交悲伤剧集评论后,API自动存储数据
- API通过AI分析推荐悲伤剧集
- 利用API在网站上展示推荐结果
服务流程
- 用户发表评论 → API存储至数据库
- API进行用户情感分析(运用AI技术)
- API从数据库推荐情感相似的剧集
- API将推荐剧集返回至网站
3. 实践1:API设计与数据建模
3-1. API设计(端点定义)
| HTTP方法 | 端点 | 说明 |
|---|---|---|
POST | /reviews | 添加用户评论 |
GET | /reviews/{drama} | 获取特定剧集的评论 |
GET | /recommend/{user} | 为用户推荐定制化悲伤剧集 |
3-2. 数据模型设计
数据库表结构(基于PostgreSQL)
| ID | 用户 | 剧集名称 | 情感评分 (0~1) | 评论内容 |
|---|---|---|---|---|
| 1 | 内容 | 我的叔叔 | 0.9 | 这是一部令人感动的剧集啊 ㅠㅠ |
| 2 | flow | 阳光先生 | 0.85 | 没有眼泪是看不下去的… |
4. 实践2:使用FastAPI构建API
4-1. FastAPI安装与基础配置
bash示例代码
pip install fastapi uvicorn psycopg2
4-2. API基础代码编写
python示例代码
from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI()
class Review(BaseModel):
user: str
drama: str
rating: int
review: str
@app.post("/reviews")
def add_review(review: Review):
return {"message": f"{review.drama}에 대한 리뷰가 저장되었습니다!"}
4-3. 运行与测试
bash示例代码
uvicorn main:app --reload
API调用示例(POST请求)
HTTP示例代码
POST /reviews
{
"user": "content",
"drama": "나의 아저씨",
"rating": 5,
"review": "정말 감동적이었어요!"
}
5. 实践3:添加AI情感分析与推荐功能
5-1. 情感分析API集成
Python示例代码
from transformers import pipeline
emotion_model = pipeline("text-classification", model="j-hartmann/emotion-english-distilroberta-base")
def analyze_emotion(text):
result = emotion_model(text)
return result[0]["score"] if result[0]["label"] == "sadness" else 0.0
5-2. 实现AI推荐系统
python示例代码
@app.get("/recommend/{user}")
def recommend_drama(user: str):
# 슬픈 감성 점수가 높은 드라마 추천
return {"recommended": ["나의 아저씨", "미스터 션샤인"]}
API请求与响应
示例HTTP示例代码
GET /recommend/content
{
"recommended": ["나의 아저씨", "미스터 션샤인"]
}
6. API部署与网站集成 – 实战应用
现在我们将学习如何将基于FastAPI构建的API部署到实际服务器,并在React网站中调用。
部署后将测试API是否正常运行,并进行性能优化。
6-1. FastAPI部署(利用AWS、Vercel、Heroku)
需将FastAPI构建的API部署至Web服务器以供公众使用。
主流部署方案包括AWS、Vercel、Heroku等平台。
FastAPI部署必备概念
- 服务器运行模式:FastAPI在本地开发环境中使用
uvicorn,但
部署时需使用gunicorn等WSGI服务器。 - 云服务器选择:需选择AWS、Vercel、Heroku等平台
- 域名绑定:部署后的API
http://localhost:8000,https://myapi.com在相同域名下运行。
方法1:通过AWS EC2部署
AWS EC2(弹性计算云)通过提供云端虚拟服务器实现API部署。
1. 创建EC2实例
- 在AWS控制台创建EC2实例。
- 选择 Ubuntu 20.04 或 Amazon Linux
- 最低配置:t2.micro(免费)
2. 在EC2上部署FastAPI
通过SSH连接至EC2实例执行以下代码
ssh -i your-key.pem ubuntu@your-ec2-ip
安装Python及相关包
sudo apt update && sudo apt upgrade -y
sudo apt install python3-pip -y
pip3 install fastapi uvicorn
启动 API
uvicorn main:app --host 0.0.0.0 --port 8000
配置防火墙
- 需在AWS安全组中开放8000端口。
http://your-ec2-ip:8000/docs验证API是否正常运行
3. 通过 Nginx & Gunicorn 优化部署
3-1. 安装并运行 Gunicorn
pip install gunicorn
gunicorn -w 4 -k uvicorn.workers.UvicornWorker main:app
3-2. Nginx配置(反向代理)
sudo apt install nginx -y
sudo nano /etc/nginx/sites-available/api
nginx복사편집server {
listen 80;
server_name your-api.com;
location / {
proxy_pass http://127.0.0.1:8000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
3-3. Nginx配置生效后启动服务
sudo ln -s /etc/nginx/sites-available/api /etc/nginx/sites-enabled
sudo systemctl restart nginx
3-4. 域名绑定与SSL证书配置
sudo apt install certbot python3-certbot-nginx -y
sudo certbot --nginx -d your-api.com
现在您可以在 https://your-api.com 使用 FastAPI 了!
方法二:通过Vercel部署
Vercel是可免费部署FastAPI应用的服务平台。
1. 创建Vercel账户并安装CLI
npm install -g vercel
vercel login
2. 将FastAPI项目连接至Vercel并部署
vercel
现在 https://your-api.vercel.app即可使用 API。
方法 3:通过 Heroku 部署
Heroku是可轻松部署API的云服务。
1. 安装 Heroku CLI
curl https://cli-assets.heroku.com/install.sh | sh
heroku login
2. 将FastAPI项目部署至Heroku
heroku create your-api-name
git push heroku main
现在您可以在https://your-api.herokuapp.com 中使用该API。
6-2. 在 React 网站中调用 API 并显示结果
我们将学习如何在 React 网站中调用通过 FastAPI 部署的 API 以获取数据。
1. React项目配置
npx create-react-app my-app
cd my-app
npm start
2. 在 React 中调用 API(使用 useEffect + fetch)
javascript
import { useEffect, useState } from "react";
function App() {
const [data, setData] = useState([]);
useEffect(() => {
fetch("https://your-api.com/recommend/content")
.then(response => response.json())
.then(result => setData(result.recommended));
}, []);
return (
<div>
<h1>추천 드라마</h1>
<ul>
{data.map((drama, index) => (
<li key={index}>{drama}</li>
))}
</ul>
</div>
);
}
export default App;
3. CORS配置(在FastAPI中允许React请求)
FastAPI默认出于安全考虑会阻止CORS请求。
要在 React 中正常调用 API,需在 FastAPI 中添加 CORS 配置。
from fastapi.middleware.cors import CORSMiddleware
app.add_middleware(
CORSMiddleware,
allow_origins=["*"], # 특정 도메인만 허용 가능
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
现在React已能正常调用API。
6-3. 测试与优化实施
确认API是否正常部署,并进行性能优化的过程。
1. 运用API测试工具
- Postman:直接发送API请求并验证响应
- cURL:在终端测试API调用
curl -X GET "https://your-api.com/recommend/content
- FastAPI内置
/docs功能:https://your-api.com/docs自动生成API文档
2. API响应速度优化
- 应用Redis缓存:将高频请求数据存储至Redis
- 数据库索引优化:通过SQL添加索引提升检索速度
- Gunicorn + Nginx组合:配置高性能Web服务器
3. 添加日志记录与监控功能
- 在FastAPI中
logging存储API调用日志 - 集成AWS CloudWatch、Grafana等监控工具
7. 项目最终整理
- 利用API将用户评论存储至数据库
- 运用AI进行情感分析后推荐悲伤剧集
- 通过网站调用API显示推荐结果
8. 实战学习中可实现的项目应用创意
- 基于AI的新闻摘要API
- 实时聊天API(WebSocket应用)
- 社交登录API(基于OAuth 2.0)
核心技术概念梳理(Nginx、Gunicorn、Vercel、Heroku、React、CORS、FastAPI)
| 术语 | 说明 | 主要作用 | 应用示例 |
|---|---|---|---|
| Nginx | Web服务器兼反向代理服务器 | 静态文件服务、负载均衡、安全增强 | 网站流量分发,API服务器前端请求管理 |
| Gunicorn | Python WSGI服务器 | 运行FastAPI、Django、Flask等应用程序 | FastAPI部署时, gunicorn -w 4 -k uvicorn.workers.UvicornWorker main:app 使用 |
| Vercel | 云部署平台 | 静态网站及后端服务器部署 | 免费支持 React、Next.js、FastAPI 等部署 |
| Heroku | PaaS(平台即服务) | 仅需上传代码即可自动部署服务器 | git push heroku main通过FastAPI部署 |
| React | 前端库 | 基于UI组件(Component)构建Web应用 | useState, useEffect使用数据管理 |
| CORS | 安全策略(防止跨源请求) | 允许外部域名发起API请求 | FastAPI中 allow_origins=["*"] 需配置 |
| FastAPI | 基于Python的Web框架 | 轻松快速实现API开发 | @app.get("/") 支持API路由 |
