#api-wrapper #igdb #internet #twitch #database-access #requests #game

rusty_igdb

为 Rust 用户提供的简单 IGDB (Internet Game Database) API 包装器

6 个版本 (3 个稳定版)

2.0.0 2023 年 8 月 2 日
1.0.1 2023 年 7 月 13 日
0.3.2 2023 年 7 月 7 日
0.2.0 2023 年 7 月 5 日

#1777 in 网页编程

每月 45 次下载

Apache-2.0

61KB
1.5K SLoC

IGDB API Rust 包装器

Crates.io CI/CD Apache-2 licensed

Internet Game Database API crate。使用 igdb crate,您可以检索 IGDB API 任何端点的信息。

如果您想帮助这个项目,欢迎提交拉取请求和建议 :)

目录

安装

此 crate 使用 cargo-features,因此您的项目仅编译与您将要使用的端点相关的代码。例如,如果您只想查询 gamescharacters 端点,Cargo.toml 应该看起来像这样

[dependencies]
rusty_igdb = { "2.0.0", default-features = false, features = ["game", "character"]}

除非您想从包含所有端点方法和结构的 crate 中获取整个代码库,否则请将以下内容添加到您的 Cargo.toml

[dependencies]
rusty_igdb = "2.0.0"

此外,此包使用 rust nightly build。请确保已安装。

使用方法

基本的 Rust 使用

IGDB 需要Twitch访问凭据才能运行。

您可以在这里阅读如何获取这些凭据。在获取 Twitch 访问令牌Twitch 客户端 ID 后,我们可以将 IGDB API 包装器引入作用域,如下所示

// Along with the wrapper, bring the endpoint Structs to scope so your code knows the return type of the Vector
use rusty_igdb::{ APIWrapper, models::{ Game, GameResult, Character, CharacterResult  } };
use std::env;

fn main() {
  // Using stored environment variables to unwrap our credentials
  let access_token = env::var("TWITCH_ACCESS_TOKEN").unwrap();
  let client_id = env::var("TWITCH_CLIENT_ID").unwrap();

  // Authenticating with our API wrapper
  let api_wrapper = APIWrapper::new(&access_token, &client_id).unwrap();

  // Using the API wrapper methods to query for Zelda games
  // Here we are expecting a vector of Game struct, so we used the imported Struct.
  let zelda_games: GameResult = api_wrapper
    .build("games") // endpoint
    .search("zelda")
    .limit("2")
    .fields("name")
    .request()
    .unwrap();

  // Using the API wrapper methods to query for Characters named Mario
  // Here we are expecting a vector of Character struct.
  let characters_named_mario: CharacterResult = api_wrapper
    .build("characters") // endpoint
    .search("mario")
    .fields("name")
    .request()
    .unwrap();
}

此示例使用 环境变量 存储从 Twitch 获取的凭据,然后使用 rust 标准功能 std::env 进行访问。在您的个人项目中,您可以根据需要管理这些凭据。

如果您想要完整的字段响应,可以省略 fields() 查询方法。这将返回包含 Solid Snake 的所有相关字段

  // no .fields() query method returns every field from endpoint
  let solid_snake_chars_vec: CharacterResult = api_wrapper
    .build("characters")
    .search("Solid Snake")
    .request()
    .unwrap();

JSON 响应

该软件包提供了一个JSON公共方法,因此您可以自定义响应内容以适应您的项目。以下示例中的Value代表serde_json::Value结构体。有关更多信息,请参阅serde_json软件包。

所有IGDB端点都应通过request_json()方法使用。

    let test_characters: Vec<Value> = api_wrapper
      .build("search")
      .fields("name, gender, country_name")
      .where_like("gender != null")
      .limit("2")
      .request_json()
      .unwrap();
    
    /*
    response should look like this:
      [{
        "gender": 0,
        "id": 4445,
        "name": "Beast"
      },
      {
        "gender": 0,
        "id": 8988,
        "name": "Mr. Wong"
      }],
    */

结果应如下所示

      [{
        "gender": 0,
        "id": 4445,
        "name": "Beast"
      },
      {
        "gender": 0,
        "id": 8988,
        "name": "Mr. Wong"
      }]
  let first_character = &test_characters[0]["gender"];

路线图

  • 剩余的IGDB端点(见里程碑
  • 添加代码覆盖率

许可

Cargo主要在Apache许可证(版本2.0)的条款下分发。

请参阅LICENSE-APACHE

依赖项

~4–16MB
~242K SLoC