# Terminology

As GraphQL manipulates different concepts to a REST API, let's take a moment to define commonly used GraphQL terminology. The [official GraphQL documentation](https://graphql.org/learn/) is pretty complete, but you'll find here a very short summary of essential terms.

## Schema

The schema is where we define all the API's types. We'll find objects and their fields, their relations, the definitions of queries as well as mutation. This schema is [publicly available](https://graphql.iadvize.dev/) and can be used both as a reference to know what can be done, but also to [generate code](https://graphql.org/code/) that will access our API.

A GraphQL query or mutation will be validated against that schema. To learn more about this topic, head over to the official [GraphQL documentation](https://graphql.org/learn/schema/).

## Field

Fields are named properties of an object. They go from being simple (such as being typed as a number or a boolean) to being more complicated (such as being a complete description of a user). Fields are named, have a type, a description and can require arguments.

**Queries** and **mutations** are two special cases of fields, the former allowing to retrieve data, and the later allowing to modify, create or delete data.

## Argument

Arguments are named values that will be passed to fields in order to query or mutate the API. A good example of an argument would be a search criteria to a query data, or an object description passed to a mutation.

## Edge & Node

A node is an object, that could be represented by a point, and an edge is the relation between these objects, that could be represented by a line between these points. Together they could draw a graph, hence the name GraphQL. When making use of [pagination](https://docs.iadvize.dev/technologies/graphql-api/pagination), you'll experience these terms.
