---
url: https://next.zammad.org/it/reference/graphql.md
---

# API GraphQL

## Introduzione

In addition to Zammad's [REST API](rest-api/intro), you can fetch,
manipulate and create data via the powerful and open-source [GraphQL
API](https://graphql.org/){target=\_blank} too.

This documentation isn't intended to cover everything about GraphQL. It
should give you a basic understanding about how you can fetch and
create/manipulate data to build upon. For a comprehensive guide, have a look
at [GraphQL's documentation](https://graphql.org/learn/){target=\_blank}.

GraphQL è usato da molti servizi web, anche grandi. È diventato una sorta di
standard del settore.

Recuperare lo schema GraphQL di Zammad (chiamato introspezione) abilita
l'autocompletamento e la convalida lato client.

## Per iniziare

Seguendo i passaggi successivi sarai in grado di inviare con successo una
semplice richiesta e ricevere dati.

### Client

Per inviare richieste e ricevere risposte, hai bisogno di un client API. Se
già lavori con le API, puoi saltare questa sezione.
Se sei nuovo sull’argomento, cerca un client che si adatti alle tue
esigenze. A seconda del tuo sistema operativo, potresti avere diverse
opzioni. Alcuni esempi di client popolari con supporto GraphQL sono:

* [Bruno](https://www.usebruno.com/downloads){target=\_blank}
* [Insomnia](https://insomnia.rest/download){target=\_blank}
* [Postman](https://www.postman.com/downloads/){target=\_blank}

### Autenticazione

Se non già presente, crea un [token nel profilo
Zammad](/en/documentation/use/personal-settings#token-access) che vuoi
utilizzare come utente API. A seconda di ciò che vuoi ottenere tramite API,
imposta le autorizzazioni di conseguenza.

Assicurati di copiarlo prima di chiudere la finestra di dialogo perché non
potrai visualizzarlo di nuovo.

### Prepare your client

Apri il tuo client API e configuralo.

* Aggiungi il tuo token da Zammad come bearer token.
* Crea una richiesta e aggiungi il tuo dominio Zammad con il suffisso
  `/graphql`, ad esempio `https://fastlane.inc/graphql`.
* Recupera lo schema GraphQL di Zammad dall'introspezione o caricalo da
  file.

::: warning
L’introspezione dello schema è abilitata per Zammad nell’ambiente di sviluppo. Per abilitarla nei sistemi di produzione, imposta la variabile
d’ambiente `ZAMMAD_GRAPHQL_INTROSPECTION` su `true`. Farlo aumenta la potenziale superficie di attacco ed è
**sconsigliato**.
:::

### Create a request

Tutte le richieste e risposte sono in formato JSON. Ciò significa che tutte
le informazioni devono essere incapsulate.

Diamo un'occhiata a una richiesta per recuperare informazioni da
Zammad. Tale richiesta inizia con.

Esempio di base per recuperare gli utenti con il loro nome e cognome:

```gql :line-numbers
query userName (
  $userId: ID!
  ) {
  user(userId: $userId) {
    firstname
    lastname
```

Il `$userId` dalla riga 2 definisce una variabile usata come ID. Nella
sezione delle variabili.

```json
{
  "userId": "gid://zammad/User/2"
}
```

Il valore sopra è nel formato ID globale dell’implementazione GraphQL di
Zammad. A seconda del tipo di oggetto con cui vuoi lavorare, sostituisci
`User` con un altro oggetto come `Ticket`, `Organization`, `Group`,
ecc. Zammad si aspetta un valore numerico come ID.

A partire dalla riga 4 nel blocco di codice sopra c'è la richiesta vera e
propria. Questo semplice esempio.

Per creare o modificare dati, sostituisci `query` con `mutation` nel corpo
della richiesta.

## Esempi

Gli esempi usano variabili per i diversi tipi di oggetto. Assicurati di
impostarla quando usi.

:::: tabs

\==== Ticket

::: tabs

\=== Richiesta

```gql
query ticketDetails (
  $ticketId: ID!
  ) {
  ticket(ticketId: $ticketId) {
    title
    checklist {
      items {
        text
        checked
      }
    }
    tags
    state {
      name
    }
    escalationAt
  }
}
```

\=== Risposta

```json
{
  "data": {
    "ticket": {
      "title": "Onboarding new colleague",
      "checklist": {
        "items": [
          {
            "text": "Buy a desk and a chair",
            "checked": false
          },
          {
            "text": "Provide date and time of the first working day",
            "checked": false
          },
          {
            "text": "Allocate a bike parking space",
            "checked": false
          },
          {
            "text": "Create an access card for the building",
            "checked": false
          },
          {
            "text": "Ticket#79005",
            "checked": false
          },
          {
            "text": "Schedule a meeting with the complete department in the first week (duration at least 1 hour)",
            "checked": false
          }
        ]
      },
      "tags": [
        "internal",
        "HR",
        "onboarding"
      ],
      "state": {
        "name": "open"
      },
      "escalationAt": null
    }
  }
}
```

:::

\==== Utente

::: tabs

\=== Richiesta

```gql
query userDetails (
  $userId: ID!
  ) {
  user(userId: $userId) {
    firstname
    lastname
    email
    vip
    ticketsCount {
      open
      closed
    }
  }
}

```

\=== Risposta

```json
{
  "data": {
    "user": {
      "firstname": "Nicole",
      "lastname": "Braun",
      "email": "nicole.braun@zammad.org",
      "vip": false,
      "ticketsCount": {
        "open": 1,
        "closed": 0
      }
    }
  }
}
```

:::

\==== Organizzazione

::: tabs

\=== Richiesta

```gql
query organizationDetails (
  $organizationId: ID!
  ) {
  organization(organizationId: $organizationId) {
    name
    active
    vip
    domainAssignment
    shared
  }
}
```

\=== Risposta

```json
{
  "data": {
    "organization": {
      "name": "Fast Lane Hardware",
      "active": true,
      "vip": false,
      "domainAssignment": false,
      "shared": true
    }
  }
}
```

:::

::::

## Appendice

### Global ids

::: info

Sostituisci `{ID}` con un valore numerico.

:::

* `gid://zammad/Ticket/{ID}`
* `gid://zammad/User/{ID}`
* `gid://zammad/Organization/{ID}`
