| Crates.io | wikibase_rest_api |
| lib.rs | wikibase_rest_api |
| version | 0.1.12 |
| created_at | 2025-03-12 15:38:33.542166+00 |
| updated_at | 2025-07-28 15:07:17.375151+00 |
| description | A Rust client for the Wikibase REST API. |
| homepage | |
| repository | https://github.com/magnusmanske/wikibase_rest_api |
| max_upload_size | |
| id | 1589933 |
| size | 3,177,247 |
This Rust crate provides a REST API for Wikibase. It is based on the Wikibase REST API. It works on any MediaWiki installation with the Wikibase extension and an enabled Wikibase REST API.
See also the examples.
// Create an API (use the Wikidata API shortcut)
let api = RestApi::wikidata()?;
// Use Q42 (Douglas Adams) as an example item
let id = EntityId::new("Q42")?;
// Get the label and sitelink of Q42
let q42_label_en = Label::get(&id, "en", &api).await?.value().to_owned();
let q42_sitelink = Sitelink::get(&id, "enwiki", &api).await?.title().to_owned();
println!("Q42 '{q42_label_en}' => [[enwiki:{q42_sitelink}]]");
// Create a new item
let mut item = Item::default();
item.labels_mut()
.insert(LanguageString::new("en", "My label"));
item.statements_mut()
.insert(Statement::new_string("P31", "Q42"));
let item: Item = item.post(&api).await.unwrap();
println!("Created new item {}", item.id());
// Load multiple entities concurrently
let entity_ids = [
"Q42", "Q1", "Q2", "Q3", "Q4", "Q5", "Q6", "Q7", "Q8", "Q9", "P214",
]
.iter()
.map(|id| EntityId::new(*id))
.collect::<Result<Vec<_>, RestApiError>>()?;
// A container will manage the concurrent loading of entities.
let api = Arc::new(api);
let entity_container = EntityContainer::builder()
.api(api)
.max_concurrent(50)
.build()?;
entity_container.load(&entity_ids).await?;
let q42 = entity_container
.items()
.read()
.await
.get("Q42")
.unwrap()
.to_owned();
let q42_label_en = q42.labels().get_lang("en").unwrap();
println!("Q42 label[en]: {q42_label_en}");
// Search for "Tim Berners-Lee" (in English) on Wikidata.
let query = "Tim Berners-Lee";
let language = Language::try_new("en").unwrap();
let api = RestApi::builder("https://www.wikidata.org/w/rest.php")
.unwrap()
.with_api_version(0) // Currently only works with v0 not v1
.build();
let results = Search::items(query, language).get(&api).await.unwrap();
println!("{}",results[0].id());
postgetpatchpostgetpatchget item_idpatchget itemid/sitelink_idput itemid/sitelink_iddelete itemid/sitelink_idget item_idpatch item_idget property_idpatch property_idget item_id/language_codeput item_id/language_codedelete item_id/language_codeget item_id/language_code with fallback languageget property_id/language_codeput property_id/language_codedelete property_id/language_codeget property_id/language_code with fallback languageget item_idpatch item_idget property_idpatch property_idget item_id/language_codeput item_id/language_codedelete item_id/language_codeget item_id/language_code with fallback languageget property_id/language_codeput property_id/language_codedelete property_id/language_codeget property_id/language_code with fallback languageget item_idpatch item_idget property_idpatch property_idget item_id/language_codepost item_id/language_codeget property_id/language_codepost property_id/language_codeget item_idpost item_idget item_id/statement_id as get statement_idput item_id/statement_id as put statement_idpatch item_id/statement_id as patch statement_iddelete item_id/statement_id as delete statement_idget property_idpost property_idget property_id/statement_id as get statement_idput property_id/statement_id as put statement_idpatch property_id/statement_id as patch statement_iddelete property_id/statement_id as delete statement_idget statement_idput statement_idpatch statement_iddelete statement_id/openapi.json/property-data-typesseach items (for Wikidata currently only in v0)Code analysis is run via analysis.sh.
cargo install cargo-tarpaulin # Once
cargo tarpaulin -o html
Lizard is a simple code analyzer, giving cyclomatic complexity etc. https://github.com/terryyin/lizard
lizard src -C 7 -V -L 40
Run rust-code-analysis.py (requires rust-code-analysis-cli to be installed) to generate analysis.tab.
This contains many metrics on code complexity and quality.
./rust-code-analysis.py
cargo tarpaulin -o html
Installation and usage: https://github.com/rust-lang/miri
cargo +nightly miri test