FastAPI是一个现代、快速的Web框架,它支持多种响应数据类型,使得开发者能够灵活地处理各种数据格式。以下是FastAPI支持的一些常见响应数据类型及其案例。
1. JSON格式FastAPI默认返回JSON格式的数据。你也可以使用JSONResponse来返回JSON数据。
from fastapi import FastAPIfrom fastapi.responses import JSONResponseapp = FastAPI()@app.get("/json")def get_json(): return JSONResponse(content={"message": "Hello, World!"})
2. HTML格式使用HTMLResponse可以返回HTML内容。
from fastapi import FastAPIfrom fastapi.responses import HTMLResponseapp = 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 FastAPIfrom fastapi.responses import PlainTextResponseapp = FastAPI()@app.get("/text", response_class=PlainTextResponse)def get_text(): return "Hello, Plain Text!"
4. Markdown格式虽然MarkdownResponse不直接存在,但可以先用markdown库将Markdown转换为HTML,然后使用HTMLResponse来返回。
from fastapi import FastAPIfrom fastapi.responses import HTMLResponseimport markdownapp = 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 FastAPIfrom fastapi.responses import FileResponseapp = 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 FastAPIfrom fastapi.responses import FileResponseapp = 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 FastAPIfrom fastapi.responses import FileResponseapp = 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 FastAPIfrom fastapi.responses import StreamingResponsefrom io import BytesIOapp = 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 FastAPIfrom fastapi.responses import RedirectResponseapp = FastAPI()@app.get("/redirect")def redirect_example(): return RedirectResponse(url="/json")
10. XML格式使用Response返回XML格式数据。
from fastapi import FastAPI, Responseapp = 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, Responseapp = 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, Responseapp = 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开发需求。