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 次

MIT/Apache

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请求,并非所有这些请求都已实现。仅实现了我使用的那些。欢迎添加更多。

要添加对新请求的支持,请按照以下步骤操作

  1. Canvas将以JSON的形式返回数据。需要将这些数据反序列化为结构体。如果结构体尚未定义,请在此库的models下定义此结构体。可以使用官方Canvas API检索此信息。
  2. 在结构体的实现中添加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