Back-to-back GraphQL client using Linq-syntax
Using Package Manager:
Install-Package SmartGraphQLClientor
Using .NET CLI:
dotnet add package SmartGraphQLClientusing SmartGraphQLClient;
services.AddSmartGraphQLClient();using SmartGraphQLClient;
GraphQLHttpClient client = ... // from DI
var users = await client.Query<UserModel>("users")
    .Include(x => x.Roles)
        .ThenInclude(x => x.Users)
    .Where(x => x.UserName.StartsWith("A") || x.Roles.Any(r => r.Code == RoleCode.ADMINISTRATOR))
    .OrderBy(x => x.Id)
      .ThenByDescending(x => x.UserName)
    .Select(x => new 
    {
        x.Id,
        Name = x.UserName,
        x.Roles,
        IsAdministrator = x.Roles.Any(r => r.Code == RoleCode.ADMINISTRATOR)
    })
    .Skip(5)
    .Take(10)
    .Argument("secretKey", "1234")
    .ToListAsync();When you call materializing method (ToListAsync(), ToArrayAsync(), FirstAsync(), etc.), the GraphQLHttpClient will build a string query and send it to the GraphQL-server, get a response and materialize the result.
Query-string from example:
{ 
    users (
      where: {
        or: [ 
          { userName: { startsWith: "A" } }
          { roles: { some: { code: { eq: ADMINISTRATOR } } } }
        ]
      }
      order: [
        { id: ASC }
        { userName: DESC }
      ]
      skip: 5
      take: 10
      secretKey: "1234"
  ) {
        id
        userName
        roles {
            code
            name
            description
            id
            users {
                userName
                age
                id
            }
        }
    }
}See more examples in unit-tests directory:
- more requests (
ToListAsync(),ToPageAsync(),FirstOrDefaultAsync()) - attributes (
GraphQLEndpointAttribute,GraphQLIgnoreAttribute,GraphQLPropertyNameAttribute) - authorized graphql-http-client (
IGraphQLAuthorizationService<>for providing tokens in runtime and cache tokens) - and more
 
Requests were tested on HotChocolate GraphQL-server. See their documentation.
| feature's name | package's version | |
|---|---|---|
| Build Where-string | 1.0.0 | ✅ | 
| Build Select-string | 1.0.0 | ✅ | 
| Build Order-string | 1.0.0 | ✅ | 
| Offset paging (skip, take) | 1.0.0 | ✅ | 
| Custom arguments | 1.0.0 | ✅ | 
| Execute raw query | 1.1.0 | ✅ | 
| Cursor paging | ❌ |