RPC规范&接口实现模块Flask-JSONRPC

本文介绍了RPC的概念,以及JSON-RPC作为轻量级的远程调用协议的工作原理。重点讲解了Flask-JSONRPC模块,包括其在Python Flask应用中的使用方法,如定义RPC接口函数、请求响应格式以及安装和基础使用示例。此外,还提供了请求和响应的JSON格式实例,并给出了查看接口文档的URL。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. RPC介绍

  • 所谓的RPC,Remote Procedure Call的简写,中文译作远程过程调用或者远程服务调用
  • 直观的理解就是,通过网络请求远程服务,获取指定接口的数据,而不用知晓底层网络协议的细节。
  • RPC支持的格式很多,比如XML格式,JSON格式等等。最常用的肯定是json-rpc。

2. Flask-JSONRPC模块介绍

2.1 介绍

  • JSON-RPC是一个无状态的、轻量级的远程过程调用(RPC)协议。
  • JSON-RPC协议中的客户端一般是为了向远程服务器请求执行某个方法/函数。
  • 客户端向实现了JSON-RPC协议的服务端发送请求,多个输入参数能够通过数组或者对象传递到远程方法,这个远程方法也能返回多个输出数据,具体是什么,当然要看具体的方法实现。因为RPC可以通俗理解为:
  • 客户端请求服务端完成某一个服务行为,所以RPC规范要求: 客户端发送的所有请求都是POST请求!!!
  • 所有的传输数据都是单个对象,用JSON格式进行序列化。

2.2 请求响应格式

2.2.1 请求要求包含三个特定属性:

  • jsonrpc: 用来声明JSON-RPC协议的版本,现在基本固定为“2.0”
  • method,方法,是等待调用的远程方法名,字符串类型
  • params,参数,对象类型或者是数组,向远程方法传递的多个参数值
  • id,任意类型值,用于和最后的响应进行匹配,也就是这里设定多少,后面响应里这个值也设定为相同的
  • 响应的接收者必须能够给出所有请求以正确的响应。这个值一般不能为Null,且为数字时不能有小数。

2.2.2 响应三个属性:

  • jsonrpc, 用来声明JSON-RPC协议的版本,现在基本固定为“2.0”
  • result,结果,是方法的返回值,调用方法出现错误时,必须不包含该成员。
  • error,错误,当出现错误时,返回一个特定的错误编码,如果没有错误产生,必须不包含该成员。
  • id,就是请求带的那个id值,必须与请求对象中的id成员的值相同。请求对象中的id时发生错误(如:转换错误或无效的请求),它必须为Null.
  • 当然,有一些场景下,是不用返回值的,比如只对客户端进行通知,由于不用对请求的id进行匹配,所以这个id就是不必要的,置空或者直接不要了。

3. 使用

3.1 安装

pip3 install Flask-JSONRPC==0.3.1 -i https://pypi.douban.com/simple/

4. 基础使用

4.1 view

from flask import Flask
# 导入模块
from flask_jsonrpc import JSONRPC

app = Flask(__name__)
# 初始化jsonrpc模块--->路由前缀
jsonrpc = JSONRPC(service_url='/api')


# 普通函数
@app.route('/index')
def index():
    return 'hello word'


# RPC接口规范函数 name="Home.home"---> 函数路由
@jsonrpc.method(name="Home.home")
def home():
    return {
        "errno": 200,
        "errmsg": "ok",
        "data": "hello world!"
    }


if __name__ == '__main__':
    # 初始化json-rpc
    app.jsonrpc = jsonrpc
    jsonrpc.init_app(app)
    app.run()

4.2 请求格式

# 请求格式
# 访问路由post  http://127.0.0.1:5000/api
# 请求体
"""
{
    "jsonrpc": "2.0",
    "method": "Home.home",
    "id": "1"
}
"""

4.3 响应格式

# 响应数据
"""
{
    "id": "1",
    "jsonrpc": "2.0",
    "result": {
        "data": "hello world!",
        "errmsg": "ok",
        "errno": 200
    }
}
"""

4.4 请求响应案例 

4.5 提供的接口文档

# 格式
http://服务器地址:端口/api/browse/
# 案例
http://127.0.0.1:5000/api/browse/

4.6 官方文档

4.6.1 git地址:

GitHub - cenobites/flask-jsonrpc: Basic JSON-RPC implementation for your Flask-powered sitesicon-default.png?t=M276https://github.com/cenobites/flask-jsonrpc

4.6.2 中文文档:

(译) JSON-RPC 2.0 规范(中文版) - wiki . leozvcicon-default.png?t=M276http://wiki.geekdream.com/Specification/json-rpc_2.0.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

骑台风走

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值