构建RESTful API:使用FastAPI实现高效的增删改查操作

简介: 构建RESTful API:使用FastAPI实现高效的增删改查操作


在现代Web开发中,构建RESTful API是一项常见且关键的任务。FastAPI是一个现代、快速(高性能)的Web框架,用于构建API,它基于Python 3.6+类型提示。我将详细介绍如何使用FastAPI框架来实现一个基本的增删改查(CRUD)接口。

环境搭建

在开始之前,请确保你的环境中安装了Python 3.6+和pip。使用以下命令安装FastAPI和Uvicorn,Uvicorn是一个轻量级的ASGI服务器。

pip install fastapi uvicorn

快速启动

创建一个main.py文件,并写入以下代码来启动一个简单的FastAPI应用:

from fastapi import FastAPI
app = FastAPI()
@app.get("/")
async def read_root():
    return {"Hello": "World"}

运行服务器:

uvicorn main:app --reload

打开浏览器访问http://127.0.0.1:8000/,你将看到返回的JSON响应。

定义数据模型

在实现CRUD操作之前,需要定义数据模型。在models.py文件中,定义一个Pydantic模型,用于请求和响应数据的验证。

from pydantic import BaseModel
# 创建一个Item模型
class Item(BaseModel):
    id: int
    name: str
    description: str = None
    price: float
    tax: float = None

创建CRUD操作

crud.py文件中,实现CRUD操作的函数。这里简单地使用一个字典来存储数据,实际应用中应该使用数据库。

from models import Item
items = {}
def create_item(item_id: int, item: Item):
    items[item_id] = item
    return items[item_id]
def read_item(item_id: int):
    return items.get(item_id)
def update_item(item_id: int, item: Item):
    if item_id in items:
        items[item_id] = item
        return items[item_id]
    return None
def delete_item(item_id: int):
    if item_id in items:
        del items[item_id]
        return True
    return False

实现API端点

main.py中,将使用CRUD操作函数来实现API端点。

from fastapi import FastAPI, HTTPException
from models import Item
from crud import create_item, read_item, update_item, delete_item
app = FastAPI()
# 创建Item
@app.post("/items/{item_id}")
async def create(item_id: int, item: Item):
    return create_item(item_id, item)
# 读取Item
@app.get("/items/{item_id}")
async def read(item_id: int):
    item = read_item(item_id)
    if item is None:
        raise HTTPException(status_code=404, detail="Item not found")
    return item
# 更新Item
@app.put("/items/{item_id}")
async def update(item_id: int, item: Item):
    updated_item = update_item(item_id, item)
    if updated_item is None:
        raise HTTPException(status_code=404, detail="Item not found")
    return updated_item
# 删除Item
@app.delete("/items/{item_id}")
async def delete(item_id: int):
    if not delete_item(item_id):
        raise HTTPException(status_code=404, detail="Item not found")
    return {"detail": "Item deleted"}

测试API

我们可以使用FastAPI提供的API文档来测试我们的接口。重新运行服务器:

uvicorn main:app --reload

转到http://127.0.0.1:8000/docs,你将看到Swagger UI,一个自动生成的交互式API文档,你可以在这里测试你的API端点。

进阶:使用数据库

为了让CRUD操作更加实际,我们将使用SQLite数据库来存储数据。首先,我们需要安装databasessqlalchemy

pip install databases sqlalchemy

接下来,在database.py文件中设置数据库连接和表:

import databases
import sqlalchemy
from sqlalchemy import create_engine, MetaData, Table, Column, Integer, String, Float
DATABASE_URL = "sqlite:///./test.db"
database = databases.Database(DATABASE_URL)
metadata = MetaData()
items = Table(
    "items",
    metadata,
    Column("id", Integer, primary_key=True),
    Column("name", String(50)),
    Column("description", String(50)),
    Column("price", Float),
    Column("tax", Float, default=None)
)
engine = create_engine(DATABASE_URL)
metadata.create_all(engine)

crud.py中,我们将函数更新为使用数据库:

from models import Item
from database import database, items
async def create_item(item_id: int, item: Item):
    query = items.insert().values(id=item_id, **item.dict())
    last_record_id = await database.execute(query)
    return {**item.dict(), "id": last_record_id}
async def read_item(item_id: int):
    query = items.select().where(items.c.id == item_id)
    return await database.fetch_one(query)
async def update_item(item_id: int, item: Item):
    query = items.update().where(items.c.id == item_id).values(**item.dict())
    await database.execute(query)
    return await read_item(item_id)
async def delete_item(item_id: int):
    query = items.delete().where(items.c.id == item_id)
    return await database.execute(query) > 0

最后,需要在main.py中启动和关闭数据库连接:

from fastapi import FastAPI, HTTPException
from models import Item
from crud import create_item, read_item, update_item, delete_item
from database import database
app = FastAPI()
@app.on_event("startup")
async def startup():
    await database.connect()
@app.on_event("shutdown")
async def shutdown():
    await database.disconnect()
# 其余的API端点保持不变

现在,CRUD操作已经可以与SQLite数据库交互,存储和检索数据。

我已经使用FastAPI框架成功创建了一个具有增删改查功能的RESTful API。FastAPI的异步支持和自动生成的文档使得构建和测试API变得更加简单和高效。虽然这个例子使用了SQLite数据库,FastAPI可以与多种数据库无缝集成,使其成为构建现代Web应用和微服务的强大工具。

在实际应用中,需要考虑更多的方面,如输入验证、错误处理、身份验证、授权以及数据库连接的适当管理等。


相关文章
|
2月前
|
人工智能 测试技术 API
构建AI智能体:二、DeepSeek的Ollama部署FastAPI封装调用
本文介绍如何通过Ollama本地部署DeepSeek大模型,结合FastAPI实现API接口调用。涵盖Ollama安装、路径迁移、模型下载运行及REST API封装全过程,助力快速构建可扩展的AI应用服务。
643 6
|
4月前
|
运维 NoSQL Serverless
|
4月前
|
XML JSON API
识别这些API接口定义(http,https,api,RPC,webservice,Restful api ,OpenAPI)
本内容介绍了API相关的术语分类,包括传输协议(HTTP/HTTPS)、接口风格(RESTful、WebService、RPC)及开放程度(API、OpenAPI),帮助理解各类API的特点与应用场景。
|
2月前
|
人工智能 API 开发工具
构建AI智能体:一、初识AI大模型与API调用
本文介绍大模型基础知识及API调用方法,涵盖阿里云百炼平台密钥申请、DashScope SDK使用、Python调用示例(如文本情感分析、图像文字识别),助力开发者快速上手大模型应用开发。
1094 16
构建AI智能体:一、初识AI大模型与API调用
|
5月前
|
机器学习/深度学习 JSON 监控
如何通过API技术提升电商客户忠诚度:构建智能化客户关系引擎
在电商竞争激烈的当下,客户忠诚度成为核心壁垒。通过API技术构建智能化客户关系系统,整合全渠道数据,实现个性化推荐与自动化运营,提升用户黏性与复购率。结合实时行为分析、差异化定价、积分系统等手段,打造高效忠诚度管理体系,助力企业实现长期增长。
101 1
|
6月前
|
数据采集 机器学习/深度学习 搜索推荐
利用通义大模型构建个性化推荐系统——从数据预处理到实时API部署
本文详细介绍了基于通义大模型构建个性化推荐系统的全流程,涵盖数据预处理、模型微调、实时部署及效果优化。通过采用Qwen-72B结合LoRA技术,实现电商场景下CTR提升58%,GMV增长12.7%。文章分析了特征工程、多任务学习和性能调优的关键步骤,并探讨内存优化与蒸馏实践。最后总结了大模型在推荐系统中的适用场景与局限性,提出未来向MoE架构和因果推断方向演进的建议。
1008 11
|
5月前
|
监控 安全 数据挖掘
构建自定义电商数据分析API
在电商业务中,构建自定义数据分析API可实现销售、用户行为等指标的实时分析。本文介绍如何设计并搭建高效、可扩展的API,助力企业快速响应市场变化,提升决策效率。
154 0
|
6月前
|
缓存 安全 API
RESTful与GraphQL:电商API接口设计的技术细节与适用场景
本文对比了RESTful与GraphQL这两种主流电商API接口设计方案。RESTful通过资源与HTTP方法定义操作,简单直观但可能引发过度或欠获取数据问题;GraphQL允许客户端精确指定所需字段,提高灵活性和传输效率,但面临深度查询攻击等安全挑战。从性能、灵活性、安全性及适用场景多维度分析,RESTful适合资源导向场景,GraphQL则适用于复杂数据需求。实际开发中需根据业务特点选择合适方案,或结合两者优势,以优化用户体验与系统性能。
|
2月前
|
存储 监控 安全
132_API部署:FastAPI与现代安全架构深度解析与LLM服务化最佳实践
在大语言模型(LLM)部署的最后一公里,API接口的设计与安全性直接决定了模型服务的可用性、稳定性与用户信任度。随着2025年LLM应用的爆炸式增长,如何构建高性能、高安全性的REST API成为开发者面临的核心挑战。FastAPI作为Python生态中最受青睐的Web框架之一,凭借其卓越的性能、强大的类型安全支持和完善的文档生成能力,已成为LLM服务化部署的首选方案。
|
3月前
|
安全 Java API
使用 Java 构建强大的 REST API 的四个基本技巧
本文结合探险领域案例,分享Java构建REST API的四大核心策略:统一资源命名、版本控制与自动化文档、安全防护及标准化异常处理,助力开发者打造易用、可维护、安全可靠的稳健API服务。
215 2