【api】java和python联动

要在 Java 中连接到 Python 的 API,你可以使用以下几种方法。最常见的方式是通过 HTTP 请求连接到一个运行中的 Python web 服务,通常是 Flask 或 FastAPI 等框架提供的 API。以下是通过 HTTP 请求的两种常见方法:

方法 1: 使用 Flask 创建 Python API,并通过 Java 进行调用

1. 在 Python 中创建一个简单的 API(使用 Flask)

首先,你需要在 Python 中创建一个 API,假设你使用的是 Flask 框架。

Python Flask 代码(app.py

from flask import Flask, jsonifyapp = Flask(__name__)@app.route('/api/data', methods=['GET'])
def get_data():# 返回 JSON 数据return jsonify({"message": "Hello from Python API!"})if __name__ == '__main__':app.run(debug=True, host='0.0.0.0', port=5000)

这个代码启动了一个简单的 Flask web 服务器,监听 http://localhost:5000/api/data,并返回一个 JSON 响应。

你可以通过以下命令来运行 Flask 应用:

python app.py
2. 在 Java 中调用 Python API

在 Java 中,你可以使用 HttpURLConnection 或第三方库(如 OkHttp)来发起 HTTP 请求,访问 Python 创建的 API。

Java 代码(使用 HttpURLConnection

import java.net.HttpURLConnection;
import java.net.URL;
import java.io.InputStreamReader;
import java.io.BufferedReader;public class JavaToPythonAPI {public static void main(String[] args) {try {// Python API URLURL url = new URL("http://localhost:5000/api/data");HttpURLConnection connection = (HttpURLConnection) url.openConnection();// 设置请求方法connection.setRequestMethod("GET");// 获取响应BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));String inputLine;StringBuffer response = new StringBuffer();while ((inputLine = in.readLine()) != null) {response.append(inputLine);}in.close();// 打印响应内容System.out.println("Response from Python API: " + response.toString());} catch (Exception e) {e.printStackTrace();}}
}

方法 2: 使用 FastAPI 创建 Python API,并通过 Java 进行调用

Python FastAPI 代码(app.py

from fastapi import FastAPI
from pydantic import BaseModelapp = FastAPI()class Item(BaseModel):name: strdescription: str@app.get("/api/data")
def read_data():return {"message": "Hello from FastAPI!"}@app.post("/api/data")
def create_item(item: Item):return {"message": f"Item {item.name} created"}

与 Flask 示例一样,你可以运行 python app.py 启动 FastAPI 服务。

Java 代码(使用 HttpURLConnection

import java.net.HttpURLConnection;
import java.net.URL;
import java.io.InputStreamReader;
import java.io.BufferedReader;public class JavaToPythonFastAPI {public static void main(String[] args) {try {// Python FastAPI API URLURL url = new URL("http://localhost:8000/api/data");HttpURLConnection connection = (HttpURLConnection) url.openConnection();// 设置请求方法connection.setRequestMethod("GET");// 获取响应BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));String inputLine;StringBuffer response = new StringBuffer();while ((inputLine = in.readLine()) != null) {response.append(inputLine);}in.close();// 打印响应内容System.out.println("Response from FastAPI: " + response.toString());} catch (Exception e) {e.printStackTrace();}}
}

方法 3: 使用 Python 和 Java 通过消息队列进行通信

如果你想让 Python 和 Java 实现更复杂的通信,可以考虑使用消息队列(如 RabbitMQKafka)来实现异步消息传递。这适合更复杂的场景。

总结

  1. Flask 或 FastAPI:这两者是常用的 Python Web 框架,可以很方便地创建 API,供 Java 调用。
  2. Java 调用 Python API:使用 Java 的 HttpURLConnectionOkHttp 等库向 Python API 发送请求,并接收响应数据。
    最推荐的方法是 使用 Flask 或 FastAPI 创建 Python API,并通过 Java 进行 HTTP 调用,因为这个方法是最简单且容易上手的。它不需要额外的工具或配置,适合快速开发和调试。特别是对于初学者,理解 HTTP 请求的基本概念以及如何在不同语言之间传递数据是非常有用的。

为什么推荐这种方法?

  1. Flask/FastAPI 简单易用

    • FlaskFastAPI 都是非常轻量级且易于上手的 Python Web 框架。你可以在几分钟内创建一个基本的 API。
    • Flask 适合快速原型开发,而 FastAPI 提供了更好的性能和自动文档生成功能。两者都很容易使用。
  2. HTTP 请求非常常见

    • Java 与 Python 之间通过 HTTP 进行通信是非常常见的做法,类似的技术在现代 Web 开发中广泛应用。
    • 这种方式的最大优点是跨语言、跨平台,适用于任何支持 HTTP 协议的环境。
  3. 没有额外依赖

    • 只需安装 Flask 或 FastAPI 和 Java 的 HTTP 请求库,无需复杂的配置或学习其他工具。
    • 这种方法不涉及消息队列、Socket 或复杂的进程间通信,适合快速开始。

推荐步骤

  1. 在 Python 中创建 API:使用 Flask 或 FastAPI 来创建简单的 API 服务。
  2. 在 Java 中发送 HTTP 请求:使用 HttpURLConnection 或第三方库(如 OkHttp)来从 Java 发送 HTTP 请求,访问 Python 提供的 API。

详细步骤:

1. 使用 Flask 创建 Python API

安装 Flask:

pip install flask

创建 app.py

from flask import Flask, jsonifyapp = Flask(__name__)@app.route('/api/data', methods=['GET'])
def get_data():return jsonify({"message": "Hello from Python API!"})if __name__ == '__main__':app.run(debug=True, host='0.0.0.0', port=5000)

启动 Flask 服务:

python app.py
2. 使用 Java 调用 API

Java 代码(使用 HttpURLConnection):

import java.net.HttpURLConnection;
import java.net.URL;
import java.io.InputStreamReader;
import java.io.BufferedReader;public class JavaToPythonAPI {public static void main(String[] args) {try {// Python API URLURL url = new URL("http://localhost:5000/api/data");HttpURLConnection connection = (HttpURLConnection) url.openConnection();// 设置请求方法connection.setRequestMethod("GET");// 获取响应BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));String inputLine;StringBuffer response = new StringBuffer();while ((inputLine = in.readLine()) != null) {response.append(inputLine);}in.close();// 打印响应内容System.out.println("Response from Python API: " + response.toString());} catch (Exception e) {e.printStackTrace();}}
}

总结

  • Flask/FastAPI + Java HTTP 请求 这种方法既简单又易于理解,非常适合快速上手。它也非常适用于实际应用场景,且是最常见的跨语言通信方式。
  • 如果你需要更高的性能和自动文档功能,FastAPI 会是一个更好的选择,但如果只需要一个简单的 API,Flask 已经足够。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/13769.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

大模型面试熬夜爆肝整理,附八股文和答案,这次换我手撕面试官了吧?

导读 自ChatGPT开启大模型时代以来,大模型正迎来飞速发展,现在从事大模型开发相关工作可谓是处在时代的风口。那么大模型面试需要哪些技能和技巧呢,本文详细整理了全套的面试问题及答案,希望对大家有所帮助! 目录 [x…

刷题笔记——栈和队列互相冒充

刷题笔记——栈和队列互相冒充 5.3 用队列实现栈两队列实现栈一个队列实现栈 5.4 用栈实现队列两栈实现队列push栈和pop栈一个栈实现队列 5.3 用队列实现栈 原OJ题:225. 用队列实现栈 - 力扣(LeetCode) 两队列实现栈 入栈的实现 选非空的…

【Linux】网络编程3

文件描述符的作用 在TCP通信的过程,服务器端会产生两类不同的文件描述符,一个是监听的文件描述符;另一个是用于通信的文件描述符。它们有什么不同呢? 监听的文件描述符: 只有一个,它不负责与客户端的通信&…

番外-JDBC:2024年最新java连接数据库教程

前言 JavaScript的内容晚点更新,今天继续更新一点番外,今天更新的是jdbc,如何用java连接数据库 1.导包 要使java能够连接数据库我们需要导入一个包,请按照以下操作安装并导包 1.进入官网 MySQL 以上为官网链接进去后点击下载…

LIMA模型——大模型对齐的新方法

人工智能咨询培训老师叶梓 转载标明出处 大模型通常在两个阶段进行训练:首先是从原始文本中进行无监督预训练,以学习通用表示;其次是通过大规模的指令微调和强化学习,以更好地适应最终任务和用户偏好。来自Meta AI、卡内基梅隆大…

向量数据库PGVECTOR安装

文章目录 前提向量数据库介绍PGVECTOR安装1、pgvector下载2、编译安装3、创建vector扩展 前提 已经安装好了pg14版本。 其他版本也可以。 pg安装教程:https://blog.csdn.net/yushaoyyds/article/details/138855306?spm1001.2014.3001.5502 向量数据库介绍 向量数…

Spring Boot框架助力电商系统设计

2 相关技术 2.1 SpringBoot框架介绍 Spring Boot是一种不需要代码生成的一种框架,并且可以不需要配置任何的XML文件就可以,因为Spring Boot里面自带了很多接口,只需要配置不同的接口就会自动的应用并且识别需要的依赖,在配置方面非…

双十一之夜:珠海体育中心悲剧,极端行为下的反思

双十一,这个原本充满购物狂欢与期待的节日,在珠海市香洲区的珠海市体育中心,被一场突如其来的极端事件所笼罩,让欢乐的氛围即刻凝固。62岁男子的一时冲动,驾车冲撞行人,导致35条宝贵生命戛然而止&#xff0…

常用环境部署(二十三)——Docker部署ERPNext

1、介绍 ERPNext 是一种业务财务集成一体的现代管理关键。 与传统会计和 ERP 相比,它具有许多优势。相对于传统记账软件的优势: ​不仅仅是会计! 管理库存、账单、报价、销售线索、工资单等。所有数据存放在同一个地方安全存储, 所有用户都在…

黑马程序员——Vue3小兔鲜项目(5. Home页)

静态结构搭建和分类实现 1. 整体结构创建 1- 按照结构新增五个组件&#xff0c;准备最简单的模版&#xff0c;分别在Home模块的入口组件中引入 HomeCategoryHomeBannerHomeNewHomeHotHomeProduct <script setup> </script><template><div> HomeCate…

nginx部署H5端程序与PC端进行区分及代理多个项目及H5内页面刷新出现404问题。

在项目中会碰见需要在nginx代理多个项目&#xff0c;如果在加上uniapp开发的H5端的项目&#xff0c;你还要在nginx中区分PC端和手机H5端&#xff0c;这就会让人很头大&#xff01;网上大部分的资料都是采用在nginx的conf配置文件中添加区分pc和手机端的变量例如&#xff1a;set…

【miniMax开放平台-注册安全分析报告-无验证方式导致安全隐患】

前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 暴力破解密码&#xff0c;造成用户信息泄露短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨大&#xff0c;造成亏损无底洞…

除了 Postman,还有什么好用的 API 调试工具吗

尽管 Postman 拥有团队协作等实用特性&#xff0c;其免费版提供的功能相对有限&#xff0c;而付费版的定价可能对小团队或个人开发者而言显得偏高。此外&#xff0c;Postman 的访问速度有时较慢&#xff0c;这可能严重影响使用体验。 鉴于这些限制&#xff0c;Apifox 成为了一…

缓存(四)指标

这张图总结了缓存性能的三个主要指标&#xff1a;未命中率&#xff08;Miss Rate&#xff09;、命中时间&#xff08;Hit Time&#xff09; 和 未命中惩罚&#xff08;Miss Penalty&#xff09;。这些指标用于评估缓存系统的效率和性能。 1. 未命中率&#xff08;Miss Rate&am…

AI赋能电商:提升用户体验与销售效率的创新应用与未来展望

目录 前言1. AI在电商中的核心应用领域1.1 智能购物推荐1.2 精准的会员分类1.3 智能定价系统1.4 提升用户体验的智能客服系统 2. AI应用中的挑战与应对策略2.1 数据安全与隐私保护2.2 算法的公平性与透明度 3. AI在电商行业的未来发展趋势3.1 虚拟购物助手与元宇宙体验3.2 基于…

苹果音乐因为忘记续期,禁用了自己服务器...

我在《从零开始搭建博客》中有提到如何续费 SSL 证书&#xff0c;以及如何自动续费。当时我只是顺带提一嘴&#xff0c;没想到这么快&#xff0c;就有大厂因为忘记续费证书了… 然后&#xff0c;苹果是第一个被打脸的&#xff0c;忘记续期了&#xff0c;而且影响是非常重要的 …

CACTER诚邀您参加2024高交会

11月14-16日 第二十六届中国国际高新技术成果交易会 于深圳国际会展中心&#xff08;宝安&#xff09; 隆重开幕 CACTER于12号馆D12展位诚邀各位莅临 关于高交会 中国国际高新技术成果交易会&#xff08;简称“高交会”&#xff09;由深圳市人民政府主办&#xff0c;是目前…

微信多账号管理,让你的管理更轻松,效率更高!

现在微信账号越来越多&#xff0c;工作生活里头的微信一多&#xff0c;管理起来就头疼。各种消息、好友请求、群发消息一大堆&#xff0c;手忙脚乱的。 这时候&#xff0c;有个给力的微信管理工具就太重要了&#xff0c;它能帮你搞定社交&#xff0c;管理起来也轻松。 先说说…

Unity图形学之Shader2.0 OutLine实例

1.轮廓&#xff1a; &#xff08;1&#xff09;直接 渲染两个物体&#xff1a;一个大 一个小&#xff0c;大的是轮廓&#xff0c;直接返回一个颜色&#xff1b;小的物体按照纹理采样返回颜色 两个Pass { } 第一个Pass 渲染大的物体边缘第二个Pass 渲染小的物品 Shader "…

基于Springboot+微信小程序的农产品销售小程序 (含源码数据库)

1.开发环境 开发系统:Windows10/11 架构模式:MVC/前后端分离 JDK版本: Java JDK1.8 开发工具:IDEA 数据库版本: mysql5.7或8.0 数据库可视化工具: navicat 服务器: SpringBoot自带 apache tomcat 主要技术: Java,Springboot,mybatis,mysql,vue 2.视频演示地址 3.功能 这个系…