GraphQL.Client

当前版本: 3.2.0


GraphQL.Client是什么?

一种.NET标准的GraphQL客户端
A GraphQL Client for .NET Standard

许可协议

MIT

关键词

GraphQL , client , netstandard

安装方式

Install-Package GraphQL.Client -Version 3.2.0

相关网址


GraphQL.Client使用说明

GraphQL.Client

A GraphQL Client for .NET Standard over HTTP.

Provides the following packages:

Package Downloads Nuget Latest
GraphQL.Client Nuget Nuget
GraphQL.Client.Abstractions Nuget Nuget
GraphQL.Client.Abstractions.Websocket Nuget Nuget
GraphQL.Client.LocalExecution Nuget Nuget
GraphQL.Client.Serializer.Newtonsoft Nuget Nuget
GraphQL.Client.Serializer.SystemTextJson Nuget Nuget
GraphQL.Primitives Nuget Nuget

Specification:

The Library will try to follow the following standards and documents:

Usage: (用法)

Create a GraphQLHttpClient
// To use NewtonsoftJsonSerializer, add a reference to NuGet package GraphQL.Client.Serializer.Newtonsoft
var graphQLClient = new GraphQLHttpClient("https://api.example.com/graphql", new NewtonsoftJsonSerializer());
Create a GraphQLRequest:

Simple Request:

var heroRequest = new GraphQLRequest {
    Query = @"
    {
        hero {
            name
        }
    }"
};

OperationName and Variables Request:

var personAndFilmsRequest = new GraphQLRequest {
    Query =@"
    query PersonAndFilms($id: ID) {
        person(id: $id) {
            name
            filmConnection {
                films {
                    title
                }
            }
        }
    }",
    OperationName = "PersonAndFilms",
    Variables = new {
        id = "cGVvcGxlOjE="
    }
};

Be careful when using byte[] in your variables object, as most JSON serializers will treat that as binary data! If you really need to send a list of bytes with a byte[] as a source, then convert it to a List<byte> first, which will tell the serializer to output a list of numbers instead of a base64-encoded string.

Execute Query/Mutation:
public class ResponseType 
{
    public PersonType Person { get; set; }
}

public class PersonType 
{
    public string Name { get; set; }
    public FilmConnectionType FilmConnection { get; set; }    
}

public class FilmConnectionType {
    public List<FilmContentType> Films { get; set; }    
}

public class FilmContentType {
    public string Title { get; set; }
}

var graphQLResponse = await graphQLClient.SendQueryAsync<ResponseType>(personAndFilmsRequest);

var personName = graphQLResponse.Data.Person.Name;

Using the extension method for anonymously typed responses (namespace GraphQL.Client.Abstractions) you could achieve the same result with the following code:

var graphQLResponse = await graphQLClient.SendQueryAsync(personAndFilmsRequest, () => new { person = new PersonType()} );
var personName = graphQLResponse.Data.person.Name;
Use Subscriptions
public class UserJoinedSubscriptionResult {
    public ChatUser UserJoined { get; set; }

    public class ChatUser {
        public string DisplayName { get; set; }
        public string Id { get; set; }
    }
}

Create subscription

var userJoinedRequest = new GraphQLRequest {
    Query = @"
    subscription {
        userJoined{
            displayName
            id
        }
    }"
};

IObservable<GraphQLResponse<UserJoinedSubscriptionResult>> subscriptionStream 
    = client.CreateSubscriptionStream<UserJoinedSubscriptionResult>(userJoinedRequest);

var subscription = subscriptionStream.Subscribe(response => 
    {
        Console.WriteLine($"user '{response.Data.UserJoined.DisplayName}' joined")
    });

End Subscription

subscription.Dispose();

Useful Links:

Blazor WebAssembly Limitations

Blazor WebAssembly differs from other platforms as it does not support all features of other .NET runtime implementations. For instance, the following WebSocket options properties are not supported and will not be set:

项目热度

项目信息

分享到

基本信息
开发语言
C#
相关项目
39
相关仓库
21
Watchers
28
Stars
367
Forks
92
版本数量
30
最新发布
2020-10-15
首次发布
2017-12-10
仓库大小
783 KB

版本历史
3.2.0
2020-10-15
3.1.9
2020-09-17
3.1.8
2020-09-17
3.1.7
2020-09-15
3.1.6
2020-08-27
3.1.5
2020-08-24
3.1.4
2020-08-15
3.1.3
2020-06-22
3.1.2
2020-05-29
3.1.1
2020-05-26

贡献者
Alexander Rose Raul Hidalgo Caballero Steve Bjorg Ivan Maximov Maydayof Eilon Lipton Marius Wirtherle Jasmin Mistry Jasmin Mistry Jasmin Mistry Malav Dimitrie Stefanescu Martin Jul Simon Cropp Simon Cropp Stephane Delcroix Martin Jul