首页 > 其他分享 >08-接口文档和JWT

08-接口文档和JWT

时间:2024-04-18 23:12:38浏览次数:29  
标签:编码 08 base64 JWT 接口 framework 文档 import

接口文档

楔子

接口文档对于协调前后端开发非常重要,可以避免因为开发习惯不同而导致的意外情况。在项目中,如果前后端开发各自为战,可能会出现不一致的情况。因此,接口文档可以约束双方,确保他们按照统一的规范进行开发,从而提高协同开发的效率和一致性。

规范

接口文档一般包括以下内容:

  1. 接口描述: 对每个接口进行描述,包括其功能、输入参数、输出格式和预期行为。

  2. 请求方法: 每个接口支持的请求方法,例如 GET、POST、PUT、DELETE 等。

  3. 请求参数: 每个接口所需的请求参数,包括参数名、类型、是否必需等信息。

  4. 响应格式: 每个接口的响应格式,包括响应数据的结构、类型等信息。

  5. 错误处理: 定义了接口可能返回的错误状态码和对应的错误信息,以及客户端应该如何处理这些错误。

  6. 示例: 可能包括一些请求和响应的示例,以便开发人员更好地理解接口的使用方式。

  7. 安全要求: 如果接口需要进行身份验证或授权,接口文档应包括相应的安全要求和机制。

  8. 版本控制: 如果接口存在多个版本,接口文档应该明确标明每个版本的区别和兼容性信息。

接口文档展现形式

  1. word形式
  2. markdown形式
  3. json和yaml
  4. 公司自研
  5. 开源的接口文档平台
    1. 比如Yapi 百度开源的
  6. 通过项目,自动生成接口文档平台
    1. coreapi
    2. drf-yasg
  7. 接口文档命名,建议包含版本字样,比如:书籍请求接口-v1.md

一个简单的接口文档实例

# 1. 用户相关
## 1.1 登录接口
	# 请求地址
	# 请求参数
	# 编码格式
	# 响应字段详解
## 1.2 注册接口
	# 请求地址
	# 请求参数
	# 编码格式
	# 响应字段详解

	# ...
	

image-20240418185146775

自动生成接口文档 coreapi (了解)

安装

pip install coreapi

使用

# 路由层
from rest_framework.documentation import include_docs_urls

urlpatterns = [
    path("docs/", include_docs_urls(title="书籍查询接口文档"))
]

# 视图层
from rest_framework.viewsets import ModelViewSet
from .serializer import BookSerializer
from .models import Book

class BookViewSet(ModelViewSet):
    queryset = Book.objects.all()
    serializer_class = BookSerializer

如果遇到报错

#AttributeError: 'AutoSchema' object has no attribute 'get_link'
REST_FRAMEWORK = {
 'DEFAULT_SCHEMA_CLASS': 'rest_framework.schemas.coreapi.AutoSchema',
    # 新版drf schema_class默认用的是rest_framework.schemas.openapi.AutoSchema
}

启动项目:http://127.0.0.1:8000/app01/docs/

image-20240418200748921

说明

  1. 模型层种的 help_text 控制描述文本,即上图种的出版社
  2. 因为序列化层和模型层的字段基本一样,所以序列化层设置一样的,二选一即可。
  3. 必填和不必填,取决于序列化类中的required参数默认为True,不必填写成False即可。
  4. 方法下的3引号注释,会生成介绍,response的文本会返回结果
def list(self, request):
    """
        查询全部书籍的接口
        """
    return Response("接口描述")

image-20240418202428219

jwt

详细介绍:https://www.ruanyifeng.com/blog/2018/07/json_web_token-tutorial.html

JSON Web Token(缩写 JWT)是目前最流行的跨域认证解决方案。

  1. 使用jwt 必须使用django自带的user表。

  2. 并不限制语言,所有的web框架都可以采用这种认证方式。

  3. 三段式,用 . 去分割 每一段使用base64编码 (base64不是加密方案,只是编码方案)

    1. 头 一般放:公司信息,加密方式,是jwt,一般都是固定的
      1. header
    2. 荷载 一般放:登录用户的信息:用户名,用户id,过期时间,签发时间,是否是超级用户。。
      1. payload
    3. 签名 signature 二进制数据 校验阶段主要是第三段。
      1. 签发阶段:通过头和荷载 使用 某种加密方式[HS256,md5,sha1等]加密得到。
      2. 校验阶段:拿到token,取出第一和第二部分,通过同样的加密方式获得新前面,用新的签名对比第三段(老签名)比较,如果一样,说明数据没有被修改,信任,正常处理。如果不一样,说明数据被篡改或者是模拟生成的,不能信任,返回错误。
        1. 注:这个生成的token 浏览器可以截获,不修改,然后模拟发送请求,不能避免。
  4. jwt实现了,数据不在后端,但是比cookie更安全。

  5. access token默认只有5分钟有效。

  6. 浏览器大部分可以看到荷载,但是看不到第一阶段的数据(盐)

  7. django中的盐默认在setting中

    SECRET_KEY = "django-insecure-b_$m3)zmrq5sy&j_4l&qwylk%&-bkn5k1!-a^!j_#*-!gw37!1"
    
-是一种前后端登陆认证的方案,区别于之前的 cookie,session
-它有 签发阶段--》登陆成功后签发
-它有 认证阶段--》需要登陆后才能访问的接口,通过认证后,才能继续操作

三段式 使用  . 去分割 
这三段分别代表什么?

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ

base64编码

用途:

  1. 网络中传输
  2. 图片传输
  3. jwt使用

如何使用:

  1. 编码:
    1. 文字或者图片编码成二进制
    2. 使用base64.继续编码即可
  2. 解码:
    1. 使用base64.b64decode(二进制即可)
    2. 如果是文本,再转成文本即可。

base64编码一长度一定是4的倍数,如果不是用=号补齐,正常情况下=号最多3为,如果解不出可以尝试加=号,如果已经满足了,后面可以写N个等号。

编码文本

In [2]: import base64

In [3]: name = '小满'

In [4]: base64.b64encode(name.encode("utf-8"))
Out[4]: b'5bCP5ruh'

In [5]: base64.b64decode(b'5bCP5ruh').decode()
Out[5]: '小满'

编码图片

import base64

# 输入图片文件路径
input_path = r"C:\小满\Pictures\best.jpg"

# 输出的 base64 编码后的文本文件路径
output_path = "./结果.txt"

# 将图片文件编码为 base64 并写入到文本文件中
with open(input_path, "rb") as f1, open(output_path, "wb") as f2:
    while data := f1.read():
        # 编码为 base64
        encoded_data = base64.b64encode(data)
        # 将编码后的数据写入文本文件
        f2.write(encoded_data)

# 从 base64 编码的文本文件解码并写入到新的图片文件中
with open(output_path, "rb") as f1, open("./小满.jpg", "wb") as f2:
    while data := f1.read():
        # 解码 base64 数据
        decoded_data = base64.b64decode(data)
        # 将解码后的数据写入新的图片文件
        f2.write(decoded_data)

jwt开发重点

-签发token---》登陆接口
-校验token---》认证类

如何使用

  1. 登陆签发:默认使用auth的user表
# 自己写:登录 认证
# 第三方:方便快捷

# python的django框架中使用jwt
	- 安装
    - pip install djangorestframework-simplejwt
    
# 路由层
from rest_framework_simplejwt.views import token_obtain_pair

urlpatterns = [
    path("login/", token_obtain_pair)  # http:127.0.0.1:8000/login/  --> post请求 即可
]

# 视图层
from rest_framework.views import APIView
from rest_framework.mixins import CreateModelMixin


# 测试jwt
class LoginView(APIView, CreateModelMixin):
    queryset = Book.objects.all()
    serializer_class = BookSerializer
    

必须登录后才能发送post 比如新增一本图书 其他的视图(路由按上面的配置即可)

from rest_framework.permissions import IsAuthenticated  # 第一个模块
from rest_framework_simplejwt.authentication import JWTAuthentication  # 第二个模块



# 书籍 测试接口工具
class BookViewSet(ModelViewSet):
    queryset = Book.objects.all()
    serializer_class = BookSerializer
    
     # 必须登录后才能新增
    authentication_classes = [JWTAuthentication] # 第一位
    permission_classes = [IsAuthenticated]  # 第二位 

image-20240418221031110

指定请求头

加了验证正常新增成功 注意 这里的key必须是 Authorization value必须加上 Bearer 的前缀

image-20240418221321364

image-20240418221311194

标签:编码,08,base64,JWT,接口,framework,文档,import
From: https://www.cnblogs.com/ccsvip/p/18144725

相关文章

  • 【高级RAG技巧】在大模型知识库问答中增强文档分割与表格提取
    前言文档分割是一项具有挑战性的任务,它是任何知识库问答系统的基础。高质量的文档分割结果对于显著提升问答效果至关重要,但是目前大多数开源库的处理能力有限。这些开源的库或者方法缺点大致可以罗列如下:只能处理文本,无法提取表格中的内容缺乏有效的分割策略,要么是一整个文档......
  • 异常处理、接口文档、 jwt介绍、
    【异常处理详见excel的异常处理的源码总结】#APIView--->dispatch--->三大认证,视图类的方法,如果出了异常,#会被异常捕获,捕获后统一处理#关键就是dispatch里面的response=self.handle_exception(exc)这行代码#drf内置了一个函数,只要上面过程出了异常,就会执行这个函......
  • 一款还不错的文档系统
    一款还不错的文档系统功能不复杂,如果不会就去看看官方的说明吧地址:https://mindoc.com.cn/docs/mindochelp参考文档mindoc-org/mindoc:Golang实现的基于beego框架的接口在线文档管理系统地址:https://github.com/mindoc-org/mindocMinDoc文档管理系统-PoweredbyMinDoc......
  • VuePress搭建文档网站
    VuePress官方文档:https://v2.vuepress.vuejs.org/zh/guide/getting-started.html以下是官方文档复制过来的步骤,加上了我的一些经验注释。1、依赖环境Node.jsv18.16.0+(我试了v14是运行不了的,必须这个版本及以上,建议安装nvm,方便切换node版本)包管理器,如pnpm、yarn、npm等(我安......
  • jwt json web token
    签发----登录成功后签发认证---需要登录才能访问的接口,通过认证才能继续操作2原理-----jwt和session,cookie区别2.1cookies2.2session2.2.1sessionmiddleware2.3jwttooken长什么样?三段式,用.分割每段b64编码 1st段:公司信息,加密方式就是jwt,一般固定 2nd......
  • JTCR-异常处理-08
    异常处理基础try{//可能产生异常的代码块}catch(ExceptionTypeex){//处理异常}catch(ExceptionTypeex){//处理异常}...finally{//无论是否发生异常,必须执行的代码块}异常类型所有异常类型的超类是Throwable,该类有两个直接子类,一个是Excepti......
  • LeetCode 面试经典150题---008
    ####151.反转字符串中的单词给你一个字符串s,请你反转字符串中单词的顺序。单词是由非空格字符组成的字符串。s中使用至少一个空格将字符串中的单词分隔开。返回单词顺序颠倒且单词之间用单个空格连接的结果字符串。注意:输入字符串s中可能会存在前导空格、尾随空格......
  • keycloak~jwt的rs256签名的验证方式
    接口地址keycloak开放接口地址:/auth/realms/fabao/.well-known/openid-configurationrsa算法相关术语RSA算法是一种非对称加密算法,其安全性基于大整数分解的困难性。在RSA算法中,有以下几个关键参数:n(模数):n是一个大整数,通常为两个大素数p和q的乘积,即n=p*q。n用......
  • 自动生成接口文档coreapi
    drf-yasg只能用于drf去看官方文档2coreapipipinstallcoreapi2.1配置路由fromrest_framework.documentationimportinclude_docs_urlsurlpatterns=[...path('docs/',include_docs_urls(title='站点页面标题'))]2.2drf配置#AttributeError:'......
  • Hive - [08] 数据仓库物理模型设计
     分区分区是将表的数据按照某个列的值进行划分和存储的一种方式。通过分区,可以将数据按照特定的维度进行组织,提高查询效率和数据管理的灵活性。 一、分区的优势提高查询性能:通过分区,可以将数据按照特定的列值进行划分,使得查询只需要扫描特定分区的数据,减少了全表扫描的......