GraphQL is the web API system of Facebook that offers a new way to define APIs. It is an efficient alternative that defines both the responses and request, permitting an application to identify what data it needs from an API. It is somewhat like SQL, where, for all your data requests, you connect to one common point. The syntax of queries remain unwavering across different implementations.
GraphQL uses a data definition or a schema, to define how data to be extracted is organized in the query. You will find it quite familiar, if you have worked with an Object-relational mapper. Each individual element in the schema has its own type system for queries, used for validating the incoming schema and returning data in a format constant with the definition.
The type system identifies many common scalar types, like integers and strings. Although, a majority of queries will be revolving around those, more complicated query work can be handled with advanced types. With a pre-defined set of fields, the interface type can be employed to create an abstract type, which other types can re-use.
With the union type, you get different results across multiple types from a single query. Input types can be employed to pass objects as parameters, given that these objects are formed of common scalar types, subject to validation. In case you are working with union or interface objects, you’ll require to employ directive and inline fragments to return data based on conditions those types can detect.
Edge type is another one that can be returned in a query in an optional field. Edge contain nodes, specially cursors and data record, which are encoded strings that offer background information on how to paginate forwards or backwards from the object.
GraphQL offers numerous ways to do pagination. When requesting records, you can identify not only the records to request, but also about requesting successive pages. You may want to use the cursor for the most stout pagination, that can be delivered along with the requested object, by making use of a edge type. This permits you to create pagination mechanism that is not interfered when data is deleted or inserted between paginations.
GraphQL uses a specific mutation query in the same way SQL uses DELETE or UPDATE queries. All queries return data. One thing to keep in mind is that data types and queries are different in design than those used for requesting data. Mutation queries validate incoming data, so the types used for the queries are meant for serving that function. Also, the fields used in returned query are not for validation, but for display. If you consider an object returned from a query, it may have field with issues like circular references that make it impractical as a query parameter.
The prime reason to choose GraphQL over Representation State Transfer is the declarative, explicit nature of queries. Having a definition of how returned data and queries should look has benefits aside from being constant across implementation servers and APIs.
Speaking about data, are you worried about the privacy of your online activities? If so, you can consider using private proxies to anonymize your online experience.