Graphql
- An approach to developing web APIs that allows for requesting and receiving data in a particular shape/structure
- allows for more efficient requests since extraneous/unused data is eliminated from the API response (avoids the “over-fetching” problem in REST)
Sample query:
{
  orders {
    id
    productsList {
      product {
        name
        price
      }
      quantity
    }
    totalAmount
  }
}
Sample response:
{
  "data": {
    "orders": [
      {
        "id": 1,
        "productsList": [
          {
            "product": {
              "name": "orange",
              "price": 1.5
            },
            "quantity": 100
          }
        ],
        "totalAmount": 150
      }
    ]
  }
}
- queries are handled by a GraphQL server
- relies on a type system (which allows for custom types/structs) in order to execute a query
- the most basic types are “scalar” values, which are basic to GraphQL and non-custom
- all fields end up resolving to scalar values (any custom types are ultimately resolved into their parts, which are scalars like strings, numbers, etc.)
 
- each field on each type can be thought of as a function (resolver), provided by the developer, which produces the value