要将你的 Python 程序封装为一个 API 服务,使得前后端 Java 系统能够通过 HTTP 调用,你可以使用 FastAPI 框架来实现。这是一个现代的、快速的 Web 框架,特别适合用于构建 APIs。FastAPI 支持自动生成 OpenAPI 文档,且性能非常高,能够帮助你快速将 Python 逻辑暴露为 HTTP 服务。
以下是一个详细的步骤说明,指导你如何用 FastAPI 将 Python 程序封装为 HTTP API,以便 Java 程序通过 HTTP 进行访问。
1. 安装 FastAPI 和 Uvicorn
首先,你需要安装 FastAPI 和 Uvicorn(FastAPI 推荐的 ASGI 服务器):
pip install fastapi uvicorn
2. 创建一个简单的 FastAPI 应用
假设你已经有了一些 Python 的业务逻辑代码,接下来你可以将这些代码通过 FastAPI 封装成 API。假设你有一个简单的 Python 函数如下:
# 假设这是你的 Python 逻辑代码
def process_data(data):
return {"message": f"Processed data: {data}"}
你可以将这个函数暴露为一个 HTTP 接口,通过 FastAPI 来实现。创建一个 main.py
文件,作为 FastAPI 应用的入口。
# main.py
from fastapi import FastAPI
from pydantic import BaseModel
from your_module import process_data # 引入你的业务逻辑函数
# 创建 FastAPI 应用
app = FastAPI()
# 定义一个请求体的 Pydantic 模型,表示接收的数据
class DataRequest(BaseModel):
data: str
# 定义一个 POST 请求的接口
@app.post("/process/")
async def process(request: DataRequest):
# 调用你的 Python 业务逻辑
result = process_data(request.data)
return result
3. 运行 FastAPI 应用
运行 FastAPI 应用,你可以通过 Uvicorn 启动它:
uvicorn main:app --reload
这个命令会启动一个开发服务器,默认情况下,FastAPI 会在 http://127.0.0.1:8000
上运行。
-
--reload
选项是用来在代码变动时自动重启服务器,适合开发时使用。
4. Java 客户端调用 FastAPI 接口
假设你已经将 FastAPI 应用成功运行在某个服务器上,Java 前后端可以通过 HTTP 请求调用这个 API。你可以使用 Java 中的 HTTP 客户端(如 HttpClient
或第三方库如 OkHttp
)来发送请求。
使用 Java 的 HttpClient 发送请求
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.net.http.HttpHeaders;
import java.nio.charset.StandardCharsets;
import com.fasterxml.jackson.databind.ObjectMapper;
public class FastAPIClient {
public static void main(String[] args) {
try {
// 创建 HttpClient
HttpClient client = HttpClient.newHttpClient();
// 构造请求体
String jsonRequest = "{\"data\": \"Hello, FastAPI!\"}";
// 创建 POST 请求
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("http://127.0.0.1:8000/process/"))
.header("Content-Type", "application/json")
.POST(HttpRequest.BodyPublishers.ofString(jsonRequest))
.build();
// 发送请求并接收响应
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
// 输出响应
System.out.println("Response status code: " + response.statusCode());
System.out.println("Response body: " + response.body());
} catch (Exception e) {
e.printStackTrace();
}
}
}
使用 OkHttp 发送请求
OkHttp 是一个常用的第三方 HTTP 客户端库,可以简化 HTTP 请求的代码:
import okhttp3.*;
public class FastAPIClient {
public static void main(String[] args) throws Exception {
// 创建 OkHttpClient 实例
OkHttpClient client = new OkHttpClient();
// 创建 JSON 请求体
String json = "{\"data\": \"Hello, FastAPI!\"}";
RequestBody body = RequestBody.create(MediaType.get("application/json; charset=utf-8"), json);
// 创建 POST 请求
Request request = new Request.Builder()
.url("http://127.0.0.1:8000/process/")
.post(body)
.build();
// 发送请求并获取响应
try (Response response = client.newCall(request).execute()) {
// 输出响应
System.out.println("Response code: " + response.code());
System.out.println("Response body: " + response.body().string());
}
}
}
5. 添加 CORS 支持(可选)
如果你的前后端 Java 系统和 FastAPI 后端部署在不同的域名或端口上,可能需要启用 CORS(跨源资源共享)。可以通过 FastAPI 内置的 CORSMiddleware
来解决这个问题:
from fastapi.middleware.cors import CORSMiddleware
# 设置允许的跨域来源
app.add_middleware(
CORSMiddleware,
allow_origins=["*"], # 允许所有域名跨域访问(也可以指定具体的域名)
allow_credentials=True,
allow_methods=["*"], # 允许所有HTTP方法
allow_headers=["*"], # 允许所有请求头
)
6. API 文档和测试
FastAPI 提供了自动生成的 OpenAPI 文档,你可以在浏览器中访问以下 URL 来查看和测试你的 API:
- http://127.0.0.1:8000/docs — Swagger UI 界面
- http://127.0.0.1:8000/redoc — Redoc 文档界面
你可以通过这些文档页面来测试接口、查看请求/响应示例等。
总结
通过上述步骤,你可以使用 FastAPI 将你的 Python 程序封装为一个 HTTP API,使得 Java 客户端能够通过 HTTP 请求来调用你的 Python 服务。FastAPI 的高性能、易用性和自动文档生成使得它成为一个非常适合用来构建 RESTful APIs 的框架。
在实际应用中,你可能还需要考虑其他功能,如认证、日志记录、异常处理等,FastAPI 都能很好地支持这些需求。