7个版本

0.2.5 2024年7月17日
0.2.4 2023年11月17日
0.2.3 2023年8月18日
0.2.1 2023年7月30日
0.1.0 2023年7月24日

#144 in HTTP服务器

每月 30 次下载

MIT 协议

220KB
4.5K SLoC

ggapi

用于与start.gg的API通信的库。

使用方法

您可以使用辅助函数从start.gg获取值

let data = ggapi::get_tournament_info(
    "evo-2023","INSERT_TOKEN_HERE"
).await;

match data {
    ggapi::GGResponse::Data(data) => {
        println!("{}", data.tournament().name());
        println!("{}", data.tournament().start_at().to_string());
        println!("{}", data.tournament().slug());
        println!("{}", data.tournament().short_slug());
    }
    ggapi::GGResponse::Error(data) => {
        println!("ggapi error: {}", data);
    }
}

每个辅助函数将获取一组小的特定值,而不是大查询。请参阅下面的注释以了解原因。

这些辅助函数是API的一些最常见用法,应该能够有效地处理甚至最大的锦标赛。

如果这些辅助函数不够用,您可以像这样直接执行查询


let query = r#"
query GetTournamentInfo($slug: String!) {
    tournament(slug: $slug) {
        id
        name
        slug
        shortSlug
        startAt
        events {
            id
            name
            phases {
                id
                name
                phaseGroups(query: { page: 1, perPage: 100 }) {
                    nodes {
                        id
                        displayIdentifier
                    }
                }
            }
            slug
        }
    }
}
"#;

let vars = Vars { slug: slug.to_string(), page: 1, per_page: 100 };
let data = execute_query(&token, &query, vars).await;

println!("{}", data.tournament().name());
println!("{}", data.tournament().start_at().to_string());
println!("{}", data.tournament().slug());
println!("{}", data.tournament().short_slug());

此示例与辅助函数get_tournament_info()执行相同的操作,但它允许您根据需要自定义查询。

直接使用execute_query()的方式,您不能保证返回一个安全值。除了潜在的错误之外,如果您正在处理大型锦标赛,您可能会遇到1000个对象的限制,因此尽可能使用辅助函数!

注释

  • start.gg有一个速率限制,并且每个查询响应还有一个1000个对象的限制。如果您正在处理具有大量事件和参与者的大型锦标赛,您可能会遇到此限制。
    • ggapi已经设计成希望避免这个问题:查询以更小、更分散的方式进行。而不是执行一个获取锦标赛所有信息的单个大型查询,该库将拆分查询以分而治之。
    • 例如,get_tournament_info()函数只返回关于锦标赛的基本信息(名称、日期等)。它不会获取所有参赛者的信息,他们参加的比赛或任何锦标赛排名。这些是通过单独的查询实现的,这不仅可以减少执行查询所需的时间,还可以减少接收到的对象数量,以希望避免速率限制。

贡献

如果您想为项目做出贡献,我们鼓励您发起拉取请求!这个项目的大部分方面相对简单,但任何程度的帮助都十分感激!只需尽量遵循现有文件的风格,这个约定在整个库中(大部分)是一致的。

待办事项

  • 完成库中缺失的剩余结构
    • action_set(ActionSet)
    • bracket_config(BracketConfig)
    • league(League, LeagueConnection)
    • match_config(MatchConfig)
    • set(Set, SetConnection)
    • set_slot(SetSlot)
    • shop(Shop)
    • shop_level(ShopLevel, ShopLevelConnection)
    • shop_order_message(ShopOrderMessage, ShopOrderMesageConnection)
    • standing(Standing, StandingConnection)
    • standing_stats(StandingStats)
    • stations(Stations, StationsConnection)
    • wave(Wave)
  • 通过添加缺失的类型来完成现有结构的实现
    • 一些最初创建的类型在其余结构实现时缺少一些值。它们在每个结构中将放置的位置上都有注释,但尚未完成实现。一旦所有结构都实现完毕,就对每个结构进行一次全面检查,并填写剩余的结构。
  • 为start.gg类型实现枚举
    • activity_state(ActivityState)
    • authorization_type(AuthorizationType)
    • bracket_type(BracketType)
    • comparator(Comparator)
    • game_selection_type(GameSelectionType)
    • match_config_verification_method(MatchConfigVerificationMethod)
    • race_limit_mode(RaceLimitMode)
    • race_type(RaceType)
    • set_sort_type(SetSortType)
    • social_connection_type(SocialConnectionType)
    • stream_source(StreamSource)
    • stream_type(StreamType)
    • team_member_status(TeamMemberStatus)
    • team_member_type(TeamMemberType)
    • tournament_pagination_sort(TournamentPaginationSort)
  • 找出如何处理JSON类型
  • 错误处理
    • 找出如何处理过大的查询
  • 未计划
    • 突变?
    • 输入对象?

依赖关系

~5–20MB
~254K SLoC