我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Python进行Restful API开发实例详解

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Python进行Restful API开发实例详解

1. Flask-RESTful

1.安装pip依赖

[root@bigdata001 ~]#
[root@bigdata001 ~]# pip3 install flask
[root@bigdata001 ~]#
[root@bigdata001 ~]# pip3 install flask_restful
[root@bigdata001 ~]#

2.运行程序如下:

#!/usr/bin/python3
from flask import Flask
from flask_restful import Resource, Api, reqparse
host = '0.0.0.0'
port = 5600
app = Flask(__name__)
api = Api(app)
class HelloWorld(Resource):
    def __init__(self):
        self.parser = reqparse.RequestParser()
        self.parser.add_argument("key1", type = str)
        self.parser.add_argument("key2", type = str)
    def get(self):
        data = self.parser.parse_args()
        value1 = data.get("key1")
        value2 = data.get("key2")
        return {'hello':'world', value1:value2}
api.add_resource(HelloWorld, '/query')
if __name__ == '__main__':
    app.run(host = host, port = port, debug = True)

3.请求URL: http://192.168.23.21:5600/query?key1=fruit&key2=apple

4.查看Web页面返回结果如下:

{
    "hello": "world",
    "fruit": "apple"
}

2. fastapi + nacos服务注册

1.安装pip依赖

[root@bigdata001 ~]#
[root@bigdata001 ~]# pip install fastapi
[root@bigdata001 ~]#
[root@bigdata001 ~]# pip install uvicorn
[root@bigdata001 ~]#
[root@bigdata001 ~]# pip3 install nacos-sdk-python
[root@bigdata001 ~]#

2.router模块程序如下:

from typing import Optional
from fastapi import APIRouter, Query, Path
fastapi_router=APIRouter()
@fastapi_router.get(path="/")
async def read_root():
    return {"Hello": "World"}
@fastapi_router.get(path = "/items/{my_item_id}",
                    summary='路径测试',
                    description='路径测试',
                    tags=['测试模块'],
                    response_description='{"my_item_id": my_item_id, "q": q}')
async def read_item(my_item_id: int=Path(None, description="我的item id"),
                    q: Optional[str] = Query(None, description="查询参数")):
    return {"my_item_id": my_item_id, "q": q}

3.app模块程序如下:

import nacos
from fastapi import FastAPI
import fastapi_router
def register_server_to_nacos():
    nacos_server_addresses = '192.168.8.246:8848'
    nacos_namespace = 'public'
    nacos_user = 'xxxxxx'
    nacos_password = '123456'
    nacos_cluster_name = 'DEFAULT'
    nacos_group_name = 'DEFAULT_GROUP'
    nacos_project_service_name = 'data-quality-system'
    nacos_project_service_ip = '192.168.8.111'
    nacos_project_service_port = 6060
    
    client = nacos.NacosClient(nacos_server_addresses,
                               namespace=nacos_namespace,
                               username=nacos_user,
                               password=nacos_password)
    client.add_naming_instance(nacos_project_service_name,
                               nacos_project_service_ip,
                               nacos_project_service_port,
                               cluster_name = nacos_cluster_name,
                               weight = 1,
                               metadata = None,
                               enable = True,
                               healthy = True,
                               ephemeral = False,
                               group_name = nacos_group_name)
    client.send_heartbeat(nacos_project_service_name,
                          nacos_project_service_ip,
                          nacos_project_service_port,
                          cluster_name=nacos_cluster_name,
                          weight=1,
                          metadata=None,
                          ephemeral=False,
                          group_name=nacos_group_name)
app = FastAPI(title='my_fastapi_docs',description='my_fastapi_docs')
app.include_router(router=fastapi_router.fastapi_router)
if __name__ == '__main__':
	register_server_to_nacos()
	
    import uvicorn
    uvicorn.run(app=app, host="0.0.0.0",port=8080, workers=1)

4.请求URL: http://192.168.43.50:8080/items/6?q=fastapi

5.查看Web页面返回结果如下:

{"my_item_id":6,"q":"fastapi"}

查看fastapi docs路径:http://192.168.43.50:8080/docs,结果如下:

fastapi doc

tag部分

response

查看nacos页面如下:

nacos服务

服务详情

2.1 post

post代码片段如下:

from pydantic import BaseModel

class Item(BaseModel):
    name: str
    description: Optional[str] = None
    price: float
    tax: Optional[float] = None

@fastapi_router.post("/items/")
async def create_item(item: Item):
    print(item.dict())
    return item

执行requestTest.py

import requests
url = "http://192.168.88.177:6060/items"
data = {
    "name" : "bigdataboy",
    "price": 100,
}
response = requests.post(url=url,json=data)
print(response.json())

post代码片段和requestTest.py的执行结果都是

{'name': 'bigdataboy', 'description': None, 'price': 100.0, 'tax': None}

2.2 get请求接收list参数

get代码片段如下:

from typing import List

@fastapi_router.get(path = "/items/get_list")
async def get_list(id: int = Query(None),
                    names: List[str] = Query(None)
                   ):
    return {"id":id, "names":names}

访问http://192.168.88.177:8080/items/get_list?id=3&names=test1&names=test2,得到的结果如下:

get list的结果

2.3 请求URL进行文件下载

get代码片段如下:

from starlette.responses import FileResponse
@fastapi_router.get(path = "/items/downloadFile")
async def downloadFile():
    return FileResponse('C:\\Users\\dell\\Desktop\\test.txt', filename='test.txt')

访问http://192.168.88.177:8080/items/downloadFile,得到的结果如下:

下载文件

2.4 获取Request Headers的Authorization,并使用JWT解析

使用浏览器F12查看的Authorization如下:

Authorization

以上URL的请求是公司的前端向后端请求数据,只是记录下来,并自己并没有做模拟测试

jwt的安装

from starlette.responses import FileResponse

@fastapi_router.get(path = "/items/downloadFile")
async def downloadFile():
    return FileResponse('C:\\Users\\dell\\Desktop\\test.txt', filename='test.txt')

demo如下:

from fastapi import Request
import jwt
@fastapi_router.get(path = "/items/get_authorization")
async def get_authorization(request:Request,
                       name: str):
                       
    authorization = request.headers.get('authorization')
    token = authorization[7:]
    token_dict = jwt.decode(token, options={"verify_signature": False})
	return token_dict

访问http://192.168.88.177:8080/items/get_authorization?name=zhang_san,得到的结果如下:

{
'key1': value1, 
'key2': 'value2'
}

到此这篇关于Python进行Restful API开发实例的文章就介绍到这了,更多相关Python Restful API开发内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Python进行Restful API开发实例详解

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

RESTful API设计原则与实现示例详解

这篇文章主要为大家介绍了RESTful API设计原则与实现示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
2023-05-16

Python+flask实现restful接口的示例详解

这篇文章主要为大家详细介绍了Python如何利用flask实现restful接口,文中的示例代码讲解详细,具有一定的借鉴价值,需要的可以参考一下
2023-02-08

java开发Activiti进阶篇流程实例详解

这篇文章主要为大家介绍了java开发Activiti进阶篇流程实例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
2022-11-13

python开发之for循环操作实例详解

本文实例讲述了python开发之for循环操作。分享给大家供大家参考,具体如下: 下面是我做的一些学习记录供大家参考:#基本的for循环语句 test_list = [2,"Jone",3,6,7,'hongten','hanyuan','
2022-06-04

Maven聚合开发实例详解

这篇文章主要介绍了Maven聚合开发实例代码,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
2023-03-20

快速使用node.js进行web开发详解

首先关于node.js的学习,这里推荐一本比较好的教程,nodejs web开发指南,该书通俗易懂地将node.js语言特性讲解完之后,又从一个项目角度带领读者使用node.js学习web开发。相信这是一个比较好的学习模式和过程。由于这本书
2022-06-04

详解Kotlin和anko融合进行Android开发

kotlin是一门基于jvm的编程语言,最近进行了关于kotlin和 anko的研究。并且结合现在的APP设计模式,设想了初步的开发方式。并且准备应用在新的项目中。Kotlin和ankoKotlin是大名鼎鼎的JB公司开发的jvm语言,官网
2023-05-30

使用ChatGPT进行Abaqus二次开发详解

这篇文章主要为大家介绍了使用ChatGPT进行Abaqus二次开发详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
2023-03-19

Python进行ffmpeg推流和拉流rtsp、rtmp实例详解

Python推流本质是调用FFmpeg的推流进程,下面这篇文章主要给大家介绍了关于Python进行ffmpeg推流和拉流rtsp、rtmp的相关资料,需要的朋友可以参考下
2023-01-06

Python 中开发pattern的string模板(template) 实例详解

定制pattern的string模板(template) 详解 string.Template的pattern是一个正则表达式, 可以通过覆盖pattern属性, 定义新的正则表达式.如: 使用新的定界符"{{", 把{{var}}作为变量
2022-06-04

详解Python发送邮件实例

Python发送邮件需要smtplib和email两个模块。也正是由于我们在实际工作中可以导入这些模块,才使得处理工作中的任务变得更加的简单。今天,就来好好学习一下使用Python发送邮件吧。 SMTP是发送邮件的协议,Python内置对S
2022-06-04

Python进行文件处理的示例详解

这篇文章主要通过几个简单的示例,为大家详细介绍一下Python实现文件处理的方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
2023-02-27

Android 开发中Volley详解及实例

Android 开发中Volley详解及实例 最近在做项目的时候,各种get和post。简直要疯了,我这种啥都不了解的,不知道咋办了,然后百度看了下,可以用volley进行网络请求与获取,下面就介绍下volley的用法。 volley有三种
2022-06-06

android app进行代码混淆实例详解

接到一个新的任务,对现有项目进行代码混淆。之前对混淆有过一些了解,但是不够详细和完整,知道有些东西混淆起来还是比较棘手的。不过幸好目前的项目不是太复杂(针对混淆这块来说),提前完成~~现总结之。 第一部分 介绍下操作流程(eclipse)
2022-06-06

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录