private static async Task <SchemaFeatures> GetSchemaFeaturesAsync( HttpClient httpClient, HttpQueryClient queryClient) { var features = new SchemaFeatures(); var request = new HttpQueryRequest { Query = GetIntrospectionQuery(_phase1) }; string json = await queryClient.FetchStringAsync( request, httpClient) .ConfigureAwait(false); IntrospectionResult result = JsonConvert.DeserializeObject <IntrospectionResult>(json); FullType directive = result.Data.Schema.Types.First(t => t.Name.Equals(_directiveName, StringComparison.Ordinal)); features.HasRepeatableDirectives = directive.Fields.Any(t => t.Name.Equals(_isRepeatable, StringComparison.Ordinal)); features.HasDirectiveLocations = directive.Fields.Any(t => t.Name.Equals(_locations, StringComparison.Ordinal)); FullType schema = result.Data.Schema.Types.First(t => t.Name.Equals(_schemaName, StringComparison.Ordinal)); features.HasSubscriptionSupport = schema.Fields.Any(t => t.Name.Equals(_subscriptionType, StringComparison.Ordinal)); return(features); }
public static IStitchingBuilder AddSchemaFromHttp( this IStitchingBuilder builder, NameString name) { if (builder == null) { throw new ArgumentNullException(nameof(builder)); } name.EnsureNotEmpty(nameof(name)); builder.AddSchema(name, s => { HttpClient httpClient = s.GetRequiredService <IHttpClientFactory>() .CreateClient(name); var request = new HttpQueryRequest { Query = _introspectionQuery }; var queryClient = new HttpQueryClient(); string result = Task.Factory.StartNew( () => queryClient.FetchStringAsync(request, httpClient)) .Unwrap().GetAwaiter().GetResult(); return(IntrospectionDeserializer.Deserialize(result)); }); return(builder); }
private static async Task <DocumentNode> ExecuteIntrospectionAsync( HttpClient httpClient, HttpQueryClient queryClient, SchemaFeatures features) { DocumentNode query = CreateIntrospectionQuery(features); var request = new HttpQueryRequest { Query = QuerySyntaxSerializer.Serialize(query) }; string json = await queryClient.FetchStringAsync( request, httpClient) .ConfigureAwait(false); return(IntrospectionDeserializer.Deserialize(json)); }
private static async Task <DocumentNode> ExecuteIntrospectionAsync( HttpClient httpClient, HttpQueryClient queryClient, SchemaFeatures features) { DocumentNode query = CreateIntrospectionQuery(features); var request = new HttpQueryRequest { Query = QuerySyntaxSerializer.Serialize(query), OperationName = "introspection_phase_2" }; (string json, HttpResponseMessage _)response = await queryClient.FetchStringAsync( request, httpClient) .ConfigureAwait(false); return(IntrospectionDeserializer.Deserialize(response.json)); }