8 个版本 (4 个破坏性更新)
0.5.0 | 2022年12月12日 |
---|---|
0.4.2 | 2022年12月12日 |
0.4.1 | 2022年9月6日 |
0.3.0 | 2022年1月14日 |
0.1.0 | 2020年8月31日 |
#4 in #lms
每月下载 28 次
60KB
1.5K SLoC
canvasapi
这是访问Canvas LMS API的库的Rust版本(非官方)。官方API的文档可以在这里找到。
用于执行调用此客户端的库是reqwest。API调用默认为异步。测试使用Tokio运行时。
canvas
二进制文件
此二进制文件允许与Canvas API交互。二进制文件的输出是JSON。要安装
cargo install canvasapi --bin canvas
功能标志
blocking
:启用阻塞请求。devel
:启用仍在开发中的函数。
快速入门
首先,需要将Canvas LMS服务器的信息存储在CanvasInformation
结构体中。使用这些信息,创建正确的请求URL,并使用有效的API令牌执行。
let base_url = std::env::var("CANVAS_BASE_URL").unwrap();
let canvas_token = std::env::var("CANVAS_ACCESS_TOKEN").unwrap();
let canvas = CanvasInformation::new(&base_url, &canvas_token);
let course = Canvas::get_course(13369).fetch(&canvas).await.unwrap().inner();
贡献
此crate仅支持GET请求,并非所有这些请求都已实现。仅实现了我使用的那些。欢迎添加更多。
要添加对新请求的支持,请按照以下步骤操作
- Canvas将以JSON的形式返回数据。需要将这些数据反序列化为结构体。如果结构体尚未定义,请在此库的
models
下定义此结构体。可以使用官方Canvas API检索此信息。 - 在结构体的实现中添加API请求函数。这些请求可以是方法或函数。要定义新的请求,请使用
api_get!
宏。以下示例显示了宏的用法。
impl Course {
api_get! {
/// Get all courses from the current user.
courses():
"courses" =>
() -> () -> [Course]
}
api_get! {
/// Return the assignment with the given id.
get_assignment(self):
"courses/{id}/assignments/{assignment_id}" =>
(id: self.id) -> (assignment_id: usize) -> Assignment
}
api_get! {
/// Get only the students from the course.
get_students(self):
"courses/{id}/search_users" =>
(id: self.id) -> () -> [User]
[EnrollmentType::Student]
}
api_get! {
/// This is still in development.
function_in_developmen():
"test" =>
() -> () -> Test
features = [(name = "devel", reason = "Function is not ready yet.")]
}
api_todo! {
/// This function still needs to be fully implemented.
function_that_is_todo()
}
}
首先,您编写可选的文档字符串,用于生成文档,然后是函数/方法名称。如果是方法,则在括号中使用self
关键字。接下来,您编写请求URL,不包括基础URL和不包括/api/v1/
。使用CanvasInformation
结构体生成完整的请求。请求URL可以包含命名参数。在第一组中定义了self
参数,在第二组中传递函数参数。最后,通过传递返回的结构体来定义请求的返回类型。当API返回Vec
时,使用方括号。可选地,可以添加请求参数。
许可证:MIT OR Apache-2.0
依赖关系
~5–16MB
~250K SLoC