Python中API调用的几种类型

本文介绍了API的基本概念及其重要性,并详细解析了几种常见的API类型,包括RESTAPI、RPCAPI及Library-BasedAPI等,同时提到了操作系统及硬件层面的API调用。

背景

API是对APP的包装,也就是通常所说的接口,APP和APP间的互相调用,包括读取数据,修改数据等,就通过调用API来实现,API的好处显而易见,标准化,service化,外部用户看不到里面的复杂的东西。一个成熟的产品必须要有API来给其他应用提供接口。

学习调用API是dev ops的必备技能,大家最熟悉的应该是REST API的调用吧,没错这是现在很通用很流行的一种API调用方式,还有一些其他的调用方式,这里给大家一一介绍。

类型

REST API

REST API是web service api的一种,其他的还有SOAP,XML-RPC, JSON-RPC。 SOAP使用的是WSDL语言,大家在一些PHP代码中偶尔可以看到,现在使用的不多了,因为它的安全性不是很好。

大家可以在我的另外一篇博文中详细了解这种API调用的案例

http://haohaozhang.blog.51cto.com/9176600/1668761

RPC API

比如gRpc , bRpc, 腾讯的tars等都是RPC的框架

Library-Based API

通过调用库的方式来调用API,这种方式也非常常用,比如你监控系统用的kafka,在client端会有个kafka client library ,你写的脚本用来抓取客户端的metrics,然后调用kafka client library来吧metrics吐给kafka。详细案例大家可以看我的另一篇博文

http://haohaozhang.blog.51cto.com/9176600/1792973

 

OS API / HARDWARE API

大家在操作系统上操作的时候,比如各种系统命令,其实也在调用OS的API,只是被忽略了而已,还有硬件层面的操作,也都是调用API。

 

 

 

 

 

### Go语言中调用Python脚本的方法 #### 方法一:使用`exec.Command` 一种简单的方式是利用Go标准库中的`os/exec`包来执行外部命令。这种方式适用于简单的场景,在这种情况下,可以像在终端里一样启动Python解释器并传递参数给它。 ```go package main import ( "fmt" "os/exec" ) func main() { args := []string{"script.py", "arg1"} out, err := exec.Command("python3", args...).Output() if err != nil { fmt.Printf("%s", out) return } fmt.Println(string(out)) } ``` 这种方法的优点在于实现起来非常直观和容易理解[^4]。然而,缺点也很明显——每次都需要创建新的进程,并且无法方便地处理复杂的交互逻辑或共享内存空间。 #### 方法二:嵌入CFFI接口 对于更复杂的需求,则可以通过CGO机制引入CPython API,从而允许Go程序直接加载.so文件形式存在的Python模块,甚至可以在同一个进程中运行两者之间的代码。这通常涉及到编写一些额外的封装层以便更好地管理资源生命周期等问题。 但是此方案较为底层,开发难度较大,维护成本高,除非有特殊需求一般不推荐采用此类做法[^3]。 #### 方法三:基于HTTP的服务化架构 另一种常见的模式就是服务化的思路,即把Python部分做成独立的服务端应用(比如Flask/Django RESTful APIs),而Go客户端则作为消费者发起请求获取数据。这样做的好处是可以充分利用各自的优势领域,同时也便于水平扩展和服务治理等方面的工作。 不过这样做会增加系统的整体复杂度以及网络延迟带来的性能损耗等因素的影响。 --- 综上所述,不同的应用场景决定了最适合哪种方式: - 如果只是偶尔调用几个函数或者执行一段短小精悍的任务,那么首选应该是`exec.Command()`; - 对于需要频繁通信的情况,考虑构建微服务体系可能更加合适; - 而当追求极致效率并且愿意承担相应的风险和技术债务时,才应该尝试深入研究如何借助低级API完成任务。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值