FastAPI支持的响应数据类型及案例

250 阅读2分钟

FastAPI是一个现代、快速的Web框架,它支持多种响应数据类型,使得开发者能够灵活地处理各种数据格式。以下是FastAPI支持的一些常见响应数据类型及其案例。

1. JSON格式

FastAPI默认返回JSON格式的数据。你也可以使用JSONResponse来返回JSON数据。

from fastapi import FastAPI
from fastapi.responses import JSONResponse
app = FastAPI()

@app.get("/json")
def get_json():
    return JSONResponse(content={"message""Hello, World!"})

2. HTML格式

使用HTMLResponse可以返回HTML内容。

from fastapi import FastAPI
from fastapi.responses import HTMLResponse
app = FastAPI()

@app.get("/html", response_class=HTMLResponse)
def get_html():
    return """
    <html>
        <head>
            <title>FastAPI HTML Response</title>
        </head>
        <body>
            <h1>Hello, HTML!</h1>
        </body>
    </html>
    """

3. 纯文本 (Plain Text) 格式

使用PlainTextResponse返回纯文本。

from fastapi import FastAPI
from fastapi.responses import PlainTextResponse
app = FastAPI()

@app.get("/text", response_class=PlainTextResponse)
def get_text():
    return "Hello, Plain Text!"

4. Markdown格式

虽然MarkdownResponse不直接存在,但可以先用markdown库将Markdown转换为HTML,然后使用HTMLResponse来返回。

from fastapi import FastAPI
from fastapi.responses import HTMLResponse
import markdown
app = FastAPI()

@app.get("/markdown", response_class=HTMLResponse)
def get_markdown():
    markdown_text = "# Hello, Markdown\nThis is some text in **Markdown**."
    return HTMLResponse(content=markdown.markdown(markdown_text))

5. PDF格式

使用FileResponse返回PDF文件。

from fastapi import FastAPI
from fastapi.responses import FileResponse
app = FastAPI()

@app.get("/pdf", response_class=FileResponse)
def get_pdf():
    pdf_path = "/path/to/your/file.pdf"
    return FileResponse(pdf_path, media_type='application/pdf', filename="your_file.pdf")

6. 图片格式 (Image)

使用FileResponse返回图片文件,例如PNG或JPG格式。

from fastapi import FastAPI
from fastapi.responses import FileResponse
app = FastAPI()

@app.get("/image", response_class=FileResponse)
def get_image():
    image_path = "/path/to/your/image.png"
    return FileResponse(image_path, media_type='image/png', filename="image.png")

7. 文件下载 (任何文件)

使用FileResponse返回任意文件类型,用户可以下载。

from fastapi import FastAPI
from fastapi.responses import FileResponse
app = FastAPI()

@app.get("/download")
def download_file():
    file_path = "/path/to/your/file.zip"
    return FileResponse(file_path, media_type='application/octet-stream', filename="file.zip")

8. 流式响应 (Streaming Response)

使用StreamingResponse返回流式数据,如大文件或音频、视频等。

from fastapi import FastAPI
from fastapi.responses import StreamingResponse
from io import BytesIO
app = FastAPI()

def fake_video_stream():
    for i in range(10):
        yield f"Streamed line {i}\n"

@app.get("/stream")
def stream_video():
    return StreamingResponse(fake_video_stream(), media_type="text/plain")

9. 重定向 (Redirect Response)

使用RedirectResponse实现URL重定向。

from fastapi import FastAPI
from fastapi.responses import RedirectResponse
app = FastAPI()

@app.get("/redirect")
def redirect_example():
    return RedirectResponse(url="/json")

10. XML格式

使用Response返回XML格式数据。

from fastapi import FastAPI, Response
app = FastAPI()

@app.get("/xml", response_class=Response)
def get_xml():
    xml_data = """
    <note>
        <to>User</to>
        <from>FastAPI</from>
        <heading>Reminder</heading>
        <body>Don't forget to try XML!</body>
    </note>
    """
    return Response(content=xml_data, media_type="application/xml")

11. CSV格式

使用Response返回CSV格式数据。

from fastapi import FastAPI, Response
app = FastAPI()

@app.get("/csv", response_class=Response)
def get_csv():
    csv_data = "name,age\nAlice,30\nBob,25"
    return Response(content=csv_data, media_type="text/csv")

12. 二进制数据 (Binary Data)

使用Response返回二进制数据。

from fastapi import FastAPI, Response
app = FastAPI()

@app.get("/binary", response_class=Response)
def get_binary():
    binary_data = b"\x00\x01\x02\x03"
    return Response(content=binary_data, media_type="application/octet-stream")

FastAPI的灵活性和强大的功能使其成为处理多种数据格式的理想选择。通过上述案例,我们可以看到FastAPI如何轻松地支持不同的响应数据类型,从而满足各种API开发需求。