This repository provides parsed C# models for the STRATZ.com GraphQL-API. They can be used for deserializing responses from the STRATZ-API. All models are generated with nullable types in oder to support the nature of GraphQL and its possiblilty to select only a handfull of fields.
The models are being updated daily by a program. It is advisable to poll this repository daily in order to keep in sync with the schema and not getting unexpected API-responses. I might add a CI to automatically release and push a NuGet-Packet once new models are available.
The model-generator not only generates useable models but also generates so called GraphQlQueryBuilder.
I highly recommend using those instead of fixed query-strings!
The benefits of using the GraphQlQueryBuilder are:
- IDEs can provide you with IntelliSense (auto-completion).
- Once the models get updated, the current code of your
GraphQlQueryBuilderwill produce errors (only incase of breaking changes). - It will generate correct GraphQL-Query-Strings. Every time!
- It works with necesarry and optional Query-Parameter out of the box.
Include the models in your source-code by cloning them into it.
I would recommend doing this as a submodule1 via:
git submodule add https://github.com/TheAmazingLooser/STRATZ_ModelsTo update your submodules simply use
git submodule updateOnce included you can freely design you queries incode (use the namespace STRATZ to be able to use them).
This is a basic example:
//...
using STRATZ;
//...
public string GenerateGraphQL_QueryString()
{
DotaQueryQueryBuilder dqqb =
new DotaQueryQueryBuilder().WithConstants(new ConstantQueryQueryBuilder()
.WithHeroes(new HeroTypeQueryBuilder().WithAllFields())
.WithAbilities(new AbilityTypeQueryBuilder().WithAllFields())
.WithModifiers(new ModifierTypeQueryBuilder().WithAllFields())
.WithClusters(new ClusterTypeQueryBuilder().WithAllFields())
.WithItems(new ItemTypeQueryBuilder().WithAllFields())
.WithNpcs(new NpcTypeQueryBuilder().WithAllFields())
.WithRegions(new RegionTypeQueryBuilder().WithAllFields())
.WithRoles(new RoleTypeQueryBuilder().WithAllFields())
.WithCustomAbilities(new AbilityCustomGameTypeQueryBuilder().WithAllFields())
.WithGameModes(new GameModeTypeQueryBuilder().WithAllFields())
.WithGameVersions(new GameVersionTypeQueryBuilder().WithAllFields())
.WithLobbyTypes(new LobbyTypeTypeQueryBuilder().WithAllFields())
.WithProSteamAccounts(new ProSteamAccountTypeQueryBuilder().WithAllFields().WithTeam(new TeamTypeQueryBuilder().WithAllFields().ExceptMatches().ExceptSeries().WithMembers(new SteamAccountTeamMemberTypeQueryBuilder().WithAllScalarFields()))));
return dqqb.Build();
}Footnotes
-
Be sure you initialized a (atleast local) repository with
git initin order to be able to add a submodule. ↩