4 个版本 (破坏性更新)
0.4.0 | 2022年4月3日 |
---|---|
0.3.0 | 2022年3月20日 |
0.2.0 | 2021年11月7日 |
0.1.0 | 2021年10月27日 |
110 在 国际化 (i18n) 中排名
每月23次下载
125KB
2K SLoC
Traduora API 绑定
本包实现了与 Traduora 实例通信的 API 绑定。以下列出了实现的端点。Traduora 的通用 API 文档可在他们的文档中找到 此处,最新端点文档可在此处找到 此处。
API最初是为版本v0.19.1实现的,并已使用此版本进行了测试。当你阅读此内容时,它可能不再积极维护,但它应该仍然被动维护。欢迎您提出问题或提交PR,它可能会在几天内得到回答。
所有端点都包含在api
模块中。要使用它们,您可以简单地实例化一个,创建一个Traduora
客户端并调用endpoint.query(&client)
或异步等效的AsyncTraduora
客户端和endpoint.query_async(&async_client)
。如果成功,端点将返回一个针对端点特定的结构体,提供从 Traduora 的响应中解析出的数据。为了更精细的控制,您可以选择自己的类型将响应反序列化到,通过调用endpoint.query_custom(&client)
代替。只需实现 serde::DeserializeOwned
即可。
某些端点在Traduora允许您访问它们之前需要身份验证。在这个crate中,这已在类型级别进行建模。在不进行身份验证的情况下调用需要身份验证的端点会导致编译时错误,而不是仅在运行时出现错误。如果您有一个 Traduora<Unauthenticated>
实例,这意味着您尚未登录,而一个 Traduora<Authenticated>
实例表示一个经过身份验证的客户端。然而,这种检查并不完美,因此您可能仍然会收到与无效身份验证相关的错误。这可能发生在您的客户端长时间存活,以至于其访问令牌过期,或者您通过传递访问令牌自行构建客户端(参见 TraduoraBuilder::with_access_token
)的情况下。
使用示例
创建新术语
use traduora::{
api::{terms::CreateTerm, ProjectId},
Login, Query, Traduora,
};
let client = Traduora::with_auth(
"localhost:8080",
Login::password("[email protected]", "password"),
).unwrap();
let term = CreateTerm::new(
"hello.world",
ProjectId::new("b1001dd9-e1c0-4fb0-a60d-eaaec304d332"),
);
let new_term = term.query(&client).unwrap();
assert!(new_term.labels.is_empty());
assert_eq!("hello.world", new_term.value);
设计
这个crate的设计在很大程度上受到GitLab API crate的启发(=直接抄袭)。有关详细信息,您可以阅读Ben Boeckel的出色博客文章Designing Rust bindings for REST APIs。这个crate调用GitLab crate的Query
和AsyncQuery
trait的CustomQuery
和AsyncCustomQuery
,而不是正常的Query
和AsyncQuery
trait,因为这些trait返回一个DefaultModel
类型,从而使crate更容易使用。
实现进度
此列表中的端点来自此处
状态值: ✅ 完成 | ☑ 完成但缺少文档,因为API文档不清晰 | ❌ 尚未实现
状态 | 方法 | 端点 | 类型 |
---|---|---|---|
✅ | POST | /api/v1/auth/change-password |
api::auth::ChangePassword |
❌ | POST | /api/v1/auth/forgot-password |
|
✅ | GET | /api/v1/auth/providers |
api::auth::Providers |
❌ | POST | /api/v1/auth/reset-password |
|
❌ | POST | /api/v1/auth/signup-provider |
|
✅ | POST | /api/v1/auth/signup |
api::auth::Signup |
✅ | POST | /api/v1/auth/token |
api::auth::Token |
✅ | GET | /api/v1/locales |
api::locales::AllLocales |
❌ | POST | /api/v1/projects/{projectId}/clients/{clientId}/rotate-secret |
|
❌ | DELETE | /api/v1/projects/{projectId}/clients/{clientId} |
|
❌ | PATCH | /api/v1/projects/{projectId}/clients/{clientId} |
|
❌ | GET | /api/v1/projects/{projectId}/clients |
|
❌ | POST | /api/v1/projects/{projectId}/clients |
|
❌ | GET | /api/v1/projects/{projectId}/exports |
|
❌ | POST | /api/v1/projects/{projectId}/imports |
|
❌ | DELETE | /api/v1/projects/{projectId}/invites/{inviteId} |
|
❌ | PATCH | /api/v1/projects/{projectId}/invites/{inviteId} |
|
❌ | GET | /api/v1/projects/{projectId}/invites |
|
❌ | POST | /api/v1/projects/{projectId}/invites |
|
❌ | DELETE | /api/v1/projects/{projectId}/labels/{labelId}/terms/{termId}/translations/{localeCode} |
|
❌ | POST | /api/v1/projects/{projectId}/labels/{labelId}/terms/{termId}/translations/{localeCode} |
|
❌ | DELETE | /api/v1/projects/{projectId}/labels/{labelId}/terms/{termId} |
|
❌ | POST | /api/v1/projects/{projectId}/labels/{labelId}/terms/{termId} |
|
❌ | DELETE | /api/v1/projects/{projectId}/labels/{labelId} |
|
❌ | PATCH | /api/v1/projects/{projectId}/labels/{labelId} |
|
❌ | GET | /api/v1/projects/{projectId}/labels |
|
❌ | POST | /api/v1/projects/{projectId}/labels |
|
❌ | GET | /api/v1/projects/{projectId}/plan |
|
❌ | GET | /api/v1/projects/{projectId}/stats |
|
✅ | DELETE | /api/v1/projects/{projectId}/terms/{termId} |
api::terms::DeleteTerm |
✅ | PATCH | /api/v1/projects/{projectId}/terms/{termId} |
api::terms::EditTerm |
✅ | GET | /api/v1/projects/{projectId}/terms |
api::terms::Terms |
✅ | POST | /api/v1/projects/{projectId}/terms |
api::terms::CreateTerm |
✅ | DELETE | /api/v1/projects/{projectId}/translations/{localeCode} |
api::translations::DeleteLocale |
✅ | GET | /api/v1/projects/{projectId}/translations/{localeCode} |
api::translations::Translations |
✅ | PATCH | /api/v1/projects/{projectId}/translations/{localeCode} |
api::translations::EditTranslation |
✅ | GET | /api/v1/projects/{projectId}/translations |
api::translations::Locales |
✅ | POST | /api/v1/projects/{projectId}/translations |
api::translations::CreateLocale |
❌ | DELETE | /api/v1/projects/{projectId}/users/{userId} |
|
❌ | PATCH | /api/v1/projects/{projectId}/users/{userId} |
|
❌ | GET | /api/v1/projects/{projectId}/users |
|
✅ | DELETE | /api/v1/projects/{projectId} |
api::projects::DeleteProject |
✅ | GET | /api/v1/projects/{projectId} |
api::projects::ShowProject |
✅ | PATCH | /api/v1/projects/{projectId} |
api::projects::EditProject |
✅ | GET | /api/v1/projects |
api::projects::Projects |
✅ | POST | /api/v1/projects |
api::projects::CreateProject |
✅ | DELETE | /api/v1/users/me |
api::users::DeleteMe |
✅ | GET | /api/v1/users/me |
api::users::Me |
✅ | PATCH | /api/v1/users/me |
api::users::EditMe |
License
Licensed under either of
- Apache License, Version 2.0 (LICENSE-APACHE or https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT许可证(LICENSE-MIT 或 http://opensource.org/licenses/MIT)
您的选择。
依赖项
~5–17MB
~257K SLoC