Python進行Restful?API開發(fā)實例詳解
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頁面返回結(jié)果如下:
{
"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="查詢參數(shù)")):
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頁面返回結(jié)果如下:
{"my_item_id":6,"q":"fastapi"}
查看fastapi docs路徑:http://192.168.43.50:8080/docs,結(jié)果如下:



查看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執(zhí)行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的執(zhí)行結(jié)果都是
{'name': 'bigdataboy', 'description': None, 'price': 100.0, 'tax': None}
2.2 get請求接收list參數(shù)
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,得到的結(jié)果如下:

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,得到的結(jié)果如下:

2.4 獲取Request Headers的Authorization,并使用JWT解析
使用瀏覽器F12查看的Authorization如下:

以上URL的請求是公司的前端向后端請求數(shù)據(jù),只是記錄下來,并自己并沒有做模擬測試
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,得到的結(jié)果如下:
{
'key1': value1,
'key2': 'value2'
}
到此這篇關(guān)于Python進行Restful API開發(fā)實例的文章就介紹到這了,更多相關(guān)Python Restful API開發(fā)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- python模塊restful使用方法實例
- Python利用Django如何寫restful api接口詳解
- 在Python的框架中為MySQL實現(xiàn)restful接口的教程
- Python restful框架接口開發(fā)實現(xiàn)
- Python實現(xiàn)Restful API的例子
- Python中Flask-RESTful編寫API接口(小白入門)
- 使用Python & Flask 實現(xiàn)RESTful Web API的實例
- python用post訪問restful服務接口的方法
- python Flask實現(xiàn)restful api service
- 探索?Python?Restful?接口測試的奧秘
相關(guān)文章
Python學習之.iloc與.loc的區(qū)別、聯(lián)系和用法
loc和iloc都是pandas工具中定位某一行的函數(shù),下面這篇文章主要給大家介紹了關(guān)于Python學習之.iloc與.loc的區(qū)別、聯(lián)系和用法的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下2022-05-05
Python連接Azure Storage進行數(shù)據(jù)交互的實現(xiàn)
本文主要介紹了Python連接Azure Storage進行數(shù)據(jù)交互的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2023-02-02
python發(fā)送多人郵件沒有展示收件人問題的解決方法
這篇文章主要為大家詳細介紹了python發(fā)送多人郵件沒有展示收件人問題的解決方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-06-06
Python發(fā)送郵件的幾種方式(最全總結(jié)!)
發(fā)送電子郵件是個很常見的開發(fā)需求,平時如果有什么重要的信息怕錯過,就可以發(fā)個郵件到郵箱來提醒自己,這篇文章主要給大家介紹了關(guān)于Python發(fā)送郵件的幾種方式,需要的朋友可以參考下2024-03-03
python如何實現(xiàn)讀取并顯示圖片(不需要圖形界面)
這篇文章主要介紹了python如何實現(xiàn)讀取并顯示圖片,文中示例代碼非常詳細,幫助大家更好的理解和學習,感興趣的朋友可以了解下2020-07-07

