0


接口学习(1)

学习FASTAPI接口调用

什么是接口

接口,后端传数据给前端的一个桥梁。
接口地址一般是一个http(url)

接口展示

代码中,接口由url和请求方式构成(get请求、post请求)
get请求:

# 当下绝大部分的接口是HTTP# 少部分接口 RPC 远程过程调用# RPC 是一个接口的请求过程from fastapi import FastAPI

app = FastAPI()defadd(a,b):#RPC提供的功能return a + b

@app.get("/")defindex():return{"msg":"Hello,world"}@app.get("/add_by_get")#接口地址defadd_get():#接口
    c = add(1,2)return{"c":c}# res = add(1,2) #本地调用

post请求:

@app.get("/add_by_get") #接口地址

部分替换为

@app.post("/add_by_post")defadd_post():
    c = add(1,2)return{"c":c}

运行:

uvicorn main:app --reload

网页上的网址:
在这里插入图片描述
这就是一个接口(使用postman进行测试)
一般使用postman进行接口测试,因为网页上一般是默认get请求,post请求会爆错。

接口调用过程详解

针对get请求,接口调用的过程可以分为三个部分

1、先到

@app.get("/add_by_get") #接口地址

发送HTTP请求

2、执行接口逻辑

c = add(1,2)

3、调用add函数

defadd(a,b):#RPC提供的功能return a + b

总结

相当于提供一个接口
当客户端请求接口地址:/add_by_get
就会执行本函数,实现远程调用add
:return

GET 和 POST 区别:

● 请求方法不一样(HTTP请求头)
● 参数

  • GET参数通过查询字符串(HTTP请求头)
    在这里插入图片描述
  • POST
  • 参数通过json(HTTP正文)
    在这里插入图片描述
  • 参数通过查询字符串(HTTP请求头)
    在这里插入图片描述

接口的安全性

接口的安全,一定是基于密码学,而不是HTTP请求方法

  • HTTPS
  • 接口加密和签名

什么是幂等和不幂等

幂等:

  • 请求N次,效果一样 幂等的例子:删除ID=1的文章 不幂等的例子:注册账号,使用POST
  • 浏览器通过POST知道这个请求不幂等,不会重复发送

接口鉴权

接口最重要的四个要素:接口的地址,请求方式,参数和接口的返回值
定义一个login接口,临时定义一个用户(不使用数据库)

_data ={'user':{"username":"beifan","password":"123123"}}@app.post("/login")deflogin(login_info:LoginInfo):if login_info.username != _data['user']['username']:# 用户名错误,提前返回响应结果raise HTTPException(status_code=400,detail='用户名错误')if login_info.password != _data['user']['password']:# 提前返回 密码错误raise HTTPException(status_code=400, detail='密码错误')#生成token,应该是安全的,要使用密码学return{"token":create_token(login_info.username)}# res = add(1,2) #本地调用

定义一个libs文件,使用JWT中的密码学加密

import datetime
from jose import JWT

KEY ="djhiscojscojsdcjsdc"#随机内容,作为加密的key
TOKEN_EXPORE =60*24*7#token有效期 一周defcreate_token(username:str):
    d ={"useername": username,"exp": datetime.datetime.utcnow()+datetime.timedelta(minutes=TOKEN_EXPORE)}

    encoded = JWT.encode(d,KEY,algorithm='HS256')return encoded

其中安装jose的方法pip install python-jose
利用postman测试,得到如下结果:
在这里插入图片描述
上图得到的就是我们使用jwt后,这个用户得到的token值

如何使用token保护接口

from fastapi import FastAPI, HTTPException, Depends
@app.post("/add_by_post")defadd_post(a:int,b:int,user:str= Depends(get_user)):#接口
    c = add(a,b)return{"c":c}
defget_user(token:str= Depends((OAuth2PasswordBearer(tokenUrl='/login')))):# 根据token,解析用户信息try:
        d = jwt.decode(token,KEY,algorithms='HS256')
        username = d.get("username","-1")except(jwt.JWTError,):raise HTTPException(status_code=403,detail='token鉴权失败')if username =='-1':raise HTTPException(status_code=400,detail='用户信息有误')return username
标签: 学习 postman java

本文转载自: https://blog.csdn.net/zzzzqqqq00/article/details/127467024
版权归原作者 zzzzqqqq00 所有, 如有侵权,请联系我们删除。

“接口学习(1)”的评论:

还没有评论