Python 程序与 Java 系统集成:通过 FastAPI 实现 HTTP 接口

server/2024/12/16 2:29:45/

要将你的 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"># 假设这是你的 Python 逻辑代码
def process_data(data):return {"message": f"Processed data: {data}"}

你可以将这个函数暴露为一个 HTTP 接口,通过 FastAPI 来实现。创建一个 main.py 文件,作为 FastAPI 应用的入口。

python"># 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 发送请求
java">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 {// 创建 HttpClientHttpClient 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 请求的代码:

java">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 来解决这个问题:

python">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 都能很好地支持这些需求。


http://www.ppmy.cn/server/150506.html

相关文章

linux下的posix信号量

目录 引言 信号量背景知识 PV操作 信号量接口 基于环形队列的PC模型 代码实现 demo模型 具体实现 引言 在多线程编程领域&#xff0c;同步机制是确保数据一致性和避免竞态条件的关键技术。Linux操作系统作为开源软件的杰出代表&#xff0c;提供了多种同步原语&#xf…

scala的Array

特性 类型安全&#xff1a;Scala 中的数组是类型安全的&#xff0c;这意味着一旦声明了数组的类型&#xff0c;就只能存储该类型的元素。 大小固定&#xff1a;数组的大小在创建时确定&#xff0c;之后不能改变。 零索引&#xff1a;Scala 数组与 Java 数组一样&#xff0c;都…

Centos 私有化部署示例——离线安装 screen

方式方法 在CentOS系统中&#xff0c;如果你无法直接使用yum或dnf命令进行在线安装&#xff0c;你可以采取以下步骤进行离线安装screen&#xff1a; 1. 在另一台有网络连接的机器上下载screen的rpm包。 2. 将下载的rpm包复制到你的CentOS机器上。 3. 使用rpm命令进行本地安…

OpenCV--特征检测

OpenCV--特征检测 代码和笔记 代码和笔记 import cv2 import numpy as np""" 特征检测和匹配 1. 定义&#xff1a;提取图像信息&#xff0c;决定每个图像的点是否属于一个图像特征。 特征检测的结果是把图像上的点分为不同的子集&#xff0c;这些子集往往属于孤…

SQL实现百分数转小数格式

MySQL 在MySQL中,可以使用CAST()函数将百分数转换为小数点格式。下面是一个示例: SELECT CAST(50% AS DECIMAL(4,2)) / 100;在上面的示例中,CAST(‘50%’ AS DECIMAL(4,2))将字符串’50%转换为DECIMAL类型,并指定小数点位数

XSS(跨站攻击)

XSS漏洞&#xff08;跨站脚本&#xff09; 1.XSS 漏洞简介 ​ XSS又叫CSS&#xff08;Cross Site Script&#xff09;跨站脚本攻击是指恶意攻击者往Web页面里插入恶意Script代码&#xff0c;当用户浏览该页之时&#xff0c;嵌入其中Web里面的Script代码会被执行&#xff0c;从…

Vue的渲染机制深度解析

作为一名高级Vue程序员&#xff0c;对Vue的渲染机制有着深入的理解是至关重要的。Vue的渲染机制是其核心特性之一&#xff0c;它涉及到模板解析、虚拟DOM的创建、差异对比以及最终的DOM更新。以下是Vue渲染机制的详细解析。 1. 模板解析与抽象语法树&#xff08;AST&#xff0…

[WiFi] WiFi安全加密WEP Vs WPA Vs WPA2 Vs WPA3整理

WiFi安全标准时间线 WEP&#xff08;Wired Equivalent Privacy&#xff09; WEP最早于1997年推出&#xff0c;是为了保护无线网络上的数据通信而设计的。当时&#xff0c;Wi-Fi技术还处于起步阶段&#xff0c;人们开始意识到需要一种安全协议来防止未经授权的访问和窃听。WEP被…