GraphQL este un limbaj de interogare pentru API-uri și un mediu de execuție pentru satisfacerea interogărilor cu datele existente.
Interogări (Queries)
Interogare de bază și răspuns JSON
{ status }
JSON Response:
{
"data": {
"status": "available"
}
}
Obiecte imbricate
{
hero {
name
height
}
}
Liste
{
friends {
name
}
}
Argumente
{
hero(id: "1000") {
id
name
}
}
Aliasuri
{
luke: hero(id: "1000") {
name
}
han: hero(id: "1001") {
name
}
}
Nume de operațiuni și variabile
Query Definition:
query FindHero($id: String!) {
hero(id: $id) {
name
}
}
Variables Payload (JSON):
{
"id": "1000"
}
Mutații (Mutations)
mutation CreateReviewForEpisode($ep: Episode!, $review: ReviewInput!) {
createReview(episode: $ep, review: $review) {
stars
commentary
}
}
Fragmente inline
{
search(q: "john") {
id
... on User {
name
}
... on Comment {
body
author {
name
}
}
}
}
GraphQL prin HTTP
Cerere GET
fetch('https://api.example.com/graphql?query={me{name}}')
Cerere POST
fetch('https://api.example.com/graphql', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
query: 'query GetHero($id: String!) { hero(id: $id) { name } }',
variables: { id: '1000' }
})
})
Schema Definition Language (SDL)
Tipuri de bază
type Query {
me: User
users(limit: Int): [User]
}
type User {
id: ID!
name: String
}
Tipuri scalare native
| Scalar | Descriere |
|---|---|
Int |
Întreg pe 32 de biți cu semn |
Float |
Număr în virgulă mobilă cu dublă precizie |
String |
Secvență de caractere UTF-8 |
Boolean |
Valoare booleană true sau false |
ID |
Identificator unic serializat ca șir de caractere |
Cuvinte cheie pentru definirea tipurilor
| Cuvânt cheie | Descriere |
|---|---|
type |
Tip obiect ce reprezintă un set de câmpuri |
scalar |
Tip scalar primitiv personalizat |
interface |
Tip abstract ce definește câmpuri necesare |
union |
Tip abstract ce grupează mai multe tipuri de obiecte |
enum |
Enumerare de valori de text permise |
input |
Obiect complex transmis ca argument în operațiuni |
Modificatori de tip
| Modificator | Descriere |
|---|---|
String |
Șir de caractere ce permite null |
String! |
Șir de caractere obligatoriu (non-nullable) |
[String] |
Listă ce permite null cu elemente nullable |
[String]! |
Listă obligatorie cu elemente nullable |
[String!]! |
Listă obligatorie cu elemente obligatorii |
Interfețe (Interfaces)
interface Entity {
id: ID!
}
type User implements Entity {
id: ID!
name: String
}
Enumerări (Enums)
enum Direction {
NORTH
EAST
SOUTH
WEST
}
Uniuni (Unions)
union SearchResult = Human | Droid | Starship
type Query {
search(text: String): [SearchResult]
}