#bindings #rest-client #rest #localization #api-bindings #api

traduora

Traduora 开源翻译管理平台的 REST API 绑定

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次下载

MIT/Apache

125KB
2K SLoC

Traduora API 绑定

Crates.io docs.rs Crates.io CI

本包实现了与 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的QueryAsyncQuery trait的CustomQueryAsyncCustomQuery,而不是正常的QueryAsyncQuery 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

您的选择。

依赖项

~5–17MB
~257K SLoC