Class: GraphQL::Client::HTTP
Relationships & Source Files | |
Inherits: | Object |
Defined in: | lib/graphql/client/http.rb |
Overview
Public: Basic HTTP network adapter.
GraphQL::Client.new(
execute: GraphQL::Client::HTTP.new("http://graphql-swapi.parseapp.com/")
)
Assumes GraphQL endpoint follows the express-graphql endpoint conventions. github.com/graphql/express-graphql#http-usage
Production applications should consider implementing there own network adapter. This class exists for trivial stock usage and allows for minimal request header configuration.
Class Method Summary
-
.new(uri, &block) ⇒ HTTP
constructor
Public: Create HTTP adapter instance for a single
::GraphQL
endpoint.
Instance Attribute Summary
-
#uri
readonly
Public: Parsed endpoint URI.
Instance Method Summary
-
#connection
Public: Extension point for subclasses to customize the Net:HTTP client.
-
#execute(document:, operation_name: nil, variables: {}, context: {})
Public: Make an
HTTP
request for::GraphQL
query. -
#headers(_context)
Public: Extension point for subclasses to set custom request headers.
Constructor Details
.new(uri, &block) ⇒ HTTP
Instance Attribute Details
#uri (readonly)
Public: Parsed endpoint URI
Returns URI.
# File 'lib/graphql/client/http.rb', line 39
attr_reader :uri
Instance Method Details
#connection
Public: Extension point for subclasses to customize the Net:HTTP client
Returns a Net::HTTP
object
#execute(document:, operation_name: nil, variables: {}, context: {})
Public: Make an HTTP
request for ::GraphQL
query.
Implements Client’s “execute” adapter interface.
document - The Query GraphQL::Language::Nodes::Document
operation_name - The String operation definition name variables - Hash of query variables context - An arbitrary Hash of values which you can access
Returns { “data” => … , “errors” => … } Hash.
# File 'lib/graphql/client/http.rb', line 58
def execute(document:, operation_name: nil, variables: {}, context: {}) request = Net::HTTP::Post.new(uri.request_uri) request.basic_auth(uri.user, uri.password) if uri.user || uri.password request["Accept"] = "application/json" request["Content-Type"] = "application/json" headers(context).each { |name, value| request[name] = value } body = {} body["query"] = document.to_query_string body["variables"] = variables if variables.any? body["operationName"] = operation_name if operation_name request.body = JSON.generate(body) response = connection.request(request) case response when Net::HTTPOK, Net::HTTPBadRequest JSON.parse(response.body) else { "errors" => [{ "message" => "#{response.code} #{response.}" }] } end end
#headers(_context)
Public: Extension point for subclasses to set custom request headers.
Returns Hash of String header names and values.
# File 'lib/graphql/client/http.rb', line 44
def headers(_context) {} end