Python进行Restful API开发实例详解

目录
  • 1. Flask-RESTful
  • 2. fastapi + nacos服务注册
    • 2.1 post
    • 2.2 get请求接收list参数
    • 2.3 请求URL进行文件下载
    • 2.4 获取Request Headers的Authorization,并使用JWT解析

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,结果如下:

查看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,得到的结果如下:

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如下:

以上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开发内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Python实现Restful API的例子

    最近写了一个网络验证登录的爬虫,需要发布为Rest服务,然后发现Flask是一个很好的Web框架,使用Python语言实现. 1. 安装flask pip install flask 2.编写简单的HelloWorld app.py from flask import Flask app = Flask(__name__) @app.route('/') def index(): return "Hello, World!" if __name__ == '__main__': app

  • Python中Flask-RESTful编写API接口(小白入门)

    1.API接口:hello world 案例 from flask import Flask from flask_restful import Api, Resource app = Flask(__name__) api = Api(app) class HelloWorld(Resource): def get(self): return {'hello': 'world'} api.add_resource(HelloWorld, '/') if __name__ == '__main_

  • Python进行Restful API开发实例详解

    目录 1. Flask-RESTful 2. fastapi + nacos服务注册 2.1 post 2.2 get请求接收list参数 2.3 请求URL进行文件下载 2.4 获取Request Headers的Authorization,并使用JWT解析 1. Flask-RESTful 1.安装pip依赖 [root@bigdata001 ~]# [root@bigdata001 ~]# pip3 install flask [root@bigdata001 ~]# [root@bigd

  • python+requests+unittest API接口测试实例(详解)

    我在网上查找了下接口测试相关的资料,大都重点是以数据驱动的形式,将用例维护在文本或表格中,而没有说明怎么样去生成想要的用例, 问题: 测试接口时,比如参数a,b,c,我要先测a参数,有(不传,为空,整形,浮点,字符串,object,过短,超长,sql注入)这些情况,其中一种情况就是一条用例,同时要保证b,c的正确,确保a的测试不受b,c参数的错误影响 解决思路: 符合接口规范的参数可以手动去填写,或者准备在代码库中.那些不符合规范的参数(不传,为空,整形,浮点,字符串,object,过短,超长,

  • yii2的restful api路由实例详解

    yii\rest\UrlRule 使用yii\rest\UrlRule来自动映射控制器的 restful 路由,简单快捷,缺点是必须得按规定好的方法名去写业务. 映射的规则如下,当然,你可以修改源码为你的习惯: public $patterns = [ 'PUT,PATCH {id}' => 'update', 'DELETE {id}' => 'delete', 'GET,HEAD {id}' => 'view', 'POST' => 'create', 'GET,HEAD' =

  • Python中的Django基本命令实例详解

    一.新建项目 $django-admin.py  startproject  project_name # 特别是在 windows 上,如果报错,尝试用 django-admin 代替 django-admin.py 试试 注意 project_name 是自己的项目名称,需要为合法的 Python 包名,如不能为 1a 或 a-b. 二.新建APP 要先进入项目目录下,cd project_name 然后执行下面的命令: $ python manage.py startapp app_nam

  • python中的decimal类型转换实例详解

    [Python标准库]decimal--定点数和浮点数的数学运算 作用:使用定点数和浮点数的小数运算.         Python 版本:2.4 及以后版本 decimal 模块实现了定点和浮点算术运算符,使用的是大多数人所熟悉的模型,而不是程序员熟悉的模型,即大多数计算机硬件实现的 IEEE 浮点数运算.Decimal 实例可以准确地表示任何数,对其上取整或下取整,还可以对有效数字个数加以限制. Decimal 小数值表示为 Decimal 类的实例.构造函数取一个整数或字符串作为参数.使用

  • Python实现格式化输出的实例详解

    目录 一.format格式输出字符串 二.format格式输出字符串实例 实例1.网站名称 实例2.数值格式化为不同的形式 实例3.{}中不设参数 实例4. {}中设参数 实例5.str.format() 格式化数字 三.%格式化输出实例 实例3.1.整数的输出 实例3.2. 浮点数输出 实例3.3.字符串输出 实例3.4.格式化输出用户信息 四.完整程序 一.format格式输出字符串 使用 % 操作符对各种类型的数据进行格式化输出,这是早期 Python提供的方法. 字符串类型(str)提供

  • Python 通过URL打开图片实例详解

    Python 通过URL打开图片实例详解 不论是用OpenCV还是PIL,skimage等库,在之前做图像处理的时候,几乎都是读取本地的图片.最近尝试爬虫爬取图片,在保存之前,我希望能先快速浏览一遍图片,然后有选择性的保存.这里就需要从url读取图片了.查了很多资料,发现有这么几种方法,这里做个记录. 本文用到的图片URL如下: img_src = 'http://wx2.sinaimg.cn/mw690/ac38503ely1fesz8m0ov6j20qo140dix.jpg' 1.用Open

  • Python命令启动Web服务器实例详解

    Python命令启动Web服务器实例详解 利用Python自带的包可以建立简单的web服务器.在DOS里cd到准备做服务器根目录的路径下,输入命令: python -m Web服务器模块 [端口号,默认8000] 例如: python -m SimpleHTTPServer 8080 然后就可以在浏览器中输入 http://localhost:端口号/路径 来访问服务器资源. 例如: http://localhost:8080/index.htm(当然index.htm文件得自己创建) 其他机器

  • python 二分查找和快速排序实例详解

    思想简单,细节颇多:本以为很简单的两个小程序,写起来发现bug频出,留此纪念. #usr/bin/env python def binary_search(lst,t): low=0 height=len(lst)-1 quicksort(lst,0,height) print lst while low<=height: mid = (low+height)/2 if lst[mid] == t: return lst[mid] elif lst[mid]>t: height=mid-1 e

  • Python探索之URL Dispatcher实例详解

    URL dispatcher简单点理解就是根据URL,将请求分发到相应的方法中去处理,它是对URL和View的一个映射,它的实现其实也很简单,就是一个正则匹配的过程,事先定义好正则表达式和该正则表达式对应的view方法,如果请求的URL符合这个正则表达式,那么就分发这个请求到这个view方法中. 有了这个base,我们先抛出几个问题,提前思考一下: 这个映射定义在哪里?当映射很多时,如果有效的组织? URL中的参数怎么获取,怎么传给view方法? 如何在view或者是template中反解出UR

随机推荐