rsmycqu
是重庆大学校园信息查询库pymycqu
的rust版本,
几乎完全支持pymycqu
中所有已经支持的API
目前已经实现以下功能
- 所有下列接口响应的数据模型
- 重庆大学单点登陆(
SSO
) - 重庆大学教务网相关功能
- 获取访问教务网API权限
该库还在快速开发中,预计会在近期完成,届时我们会同步发布1.0版本至crates.io
我们封装了reqwest
中的Client
以保证库能正确运行并存储调用API所需的信息,因此,你需要首先创建一个
crate::session::Session
let session = crate::session::Session::new();
对于所有服务,你都需要先通过重庆大学单点登陆(SSO)验证
login(&mut session, "your_auth", "your_password", &false).await
值得一提的是,我们的所有API接口函数都是异步的,所以你需要一个异步框架来调用(比如tokio
),并记得添加await
所有接口都会返回某个Result
,具体类型可以查看相应接口的文档
我们只在确保不会出现异常的地方使用unwrap
,其余地方都使用Result
包裹,因此你可以不用担心panic
TODO: 添加成绩查询的相应示例
我们非常欢迎PR,以下是一些注意事项
所有API接口都应当设计为函数,接受我们自定义的Session、所需参数并回传一个用Result包裹的结果。
例如,login的声明如下
pub async fn login(
session: &mut Session,
auth: &str,
password: &str,
force_relogin: &bool,
) -> SSOResult<LoginResult>
因为本库需求reqwest::Client
禁用自动重定向且启用cookie_store
,我们通过new type实现了这点
不同模块登陆可能需要不同的token
(如mycqu
中需要设置http请求的Authorization
头),我们参照reqwest
中的HeaderMap
实现,设计了
AccessInfo
,你可以查看源码了解更多信息。为了在接口调用间,这些信息被存储在Session
中,**需要相应权限的接口应当在调用前检查相应权限,在缺少时报错并提前失败
**。
我们依照网址将所有API切分为多个模块sso
、mycqu
、card
、lib
分别对应单点登陆、教务网、校园卡、图书馆,如果你想添加新的接口应当符合当前模块的设计。
同时,我们为每个模块提供了相应feature
以支持仅使用需要的接口,默认feature
包括sso
、mycqu
,在编写代码时应当考虑代码在不同
feature
下的情况
我们在errors
中声明错误,并为每个模块声明了不同的错误类型,将常见错误提升至Error
枚举中,所有API接口对外暴露该类型,并通过泛型指定接口所在模块拥有的错误类型。
模块独有的错误类型会包裹在Error::InnerError
中,常见错误则为Error
中其他枚举项
我们定义了内部trait
——error_handle_help
以简化模块间错误转换的问题(这主要出现在其他模块调用sso
中的access_service
时需要进行错误转换)
我们为所有接口即重要或容易出现异常的工具函数编写了测试,在你编写或修改新接口时请别忘了添加/修改对应接口。
我们使用rstest
以支持测试夹具,如果你想运行测试,你应当将crate::utils::test_tools
中login_data
夹具返回的账号密码修改为你自己的
请不要在代码中上传自己的账号密码,这极容易造成数据泄漏
AGPL 3.0