【白嫖GitHub(二)】使用fastapi搭建api接口

Github Action的问题

上一篇文章我们简要介绍了Github Action的使用,再次以天气邮件为例,如果我们需要使用githubAction给很多人发信息,就需要收集很多人的地址/电子邮箱等私人信息,作为一个公有仓库,我们是不希望这些信息被公开的,当然有些小伙伴会说,github可以讲仓库设置为不公开,当然是可以的,不过github作为一个开源社区,为了防止私人白嫖,github对不公开仓库的Github Action有很大的限制,因此我们需要一些办法来解决信息存储的问题。

可能的解决方案

Github Secret

Github Secret可以设置一个私人的环境变量,在GitHub action中配置后可以将其作为环境变量导入

在仓库->settings-> Secrets and variables->Action中可以看到可以为整个仓库设置Secrets,也可以自己创建环境后设置环境变量,我们在这里就使用Repository secrets来创建。

那这里我们就可以想到我们可以利用这个键值对来储存用户信息,但是这样显然是不好的,扩展性非常差而且存储的信息很有限,CRUD也十分麻烦,所以我们需要一点其他方法

实际上这个secret更常见的作用是用于存储一些秘密、cookie等敏感信息等,所以我们可以考虑建设一个api接口作为用户的接口

当然都有服务器了为什么不直接在服务器上运行这个项目呢,咳咳,这个嘛,能白嫖一点是一点,主要是折腾嘛不寒碜<\del>

Fastapi

目前我们的需求非常简单,我们只需要创建一个接口来输出用户信息,因此我们不需要非常复杂的框架,作为一个只需要CRUD的api,目前最火最简便的解决方案就是fastapi了

fastapi特点

 

  • 高性能: 基于Starlette和Pydantic,利用异步(asynchronous)编程,提供出色的性能。
  • 自动文档生成: 自动生成交互式API文档,支持Swagger UI和ReDoc,让API的理解和测试更加直观。
  • 类型注解支持: 利用Python的类型提示,提供更严格的输入验证和更好的代码提示。
  • 异步支持: 支持异步请求处理,使得处理IO密集型任务更加高效。

fastapi的配置和编码都非常简单,有多简单呢:

pip install fastapi, unicorn #unicorn用于运行服务
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def read_users():
       return {'坤坤':'鸡'}
unicorn main:app --reload

这7行,你就已经搭建了一个api服务,当然也只是实现了返回一个键值对

但是有了这个实践,对于返回用户来说,如果需求不大,甚至直接用一个文件来存储用户就行,写下来也就几十行

 

from fastapi import FastAPI
from Utils import *
import json
app = FastAPI()
@app.get("/users/")
async def read_users(key: str):
if key == 'api930080':
return get_users_dict('users')
else:
return {"error": "key error"}
@app.get("/users/test")
async def read_users_test(key: str):
if key == 'api930080':
return {'21307130326@m.fudan.edu.cn': '上海市'}
else:
return {"error": "key error"}

这样一个简单的api就实现了,只要使用一个ASGI web server简单部署就可以运行了

当然了,如果只是使用一个API的话似乎也不能防止信息泄露,其他人一样可以调用接口获得信息,这时候我们使用一个key的参数,相当于一个密码,来控制访问,fastapi添加参数的方式也很简单,只需要在装饰器下的函数添加参数即可,参数名就是get的参数名,直接在函数逻辑中判断即可

这时我们就可以将这个key放在github actions的环境中,这下离完成白嫖github更近一步啦