Erstellen Sie ein GraphQL-Schema

  • Freigeben Version: Washingtondc
  • Aktualisiert 1. Februar 2024
  • 3 Minuten Lesedauer
  • Erstellen Sie ein GraphQL-Schema, um Daten für GraphQL-Abfragen verfügbar zu machen.

    Vorbereitungen

    Erforderliche Rolle: graphql_schema_admin oder admin

    Prozedur

    1. Navigieren zu Alle > System-Webservices > GraphQL > GraphQL-APIs.
    2. Klicken Sie auf Neu.
    3. Füllen Sie diese Felder aus.
      Feld Beschreibung
      Name Name des Schemas.
      Schemanamespace Muss innerhalb des Namens der Anwendung eindeutig sein.
      Anwendung Schreibgeschützte Anwendung, zu der das Schema gehört.
      Anwendungsnamespace Schreibgeschützt. Funktioniert mit dem Schema-Namespace, um Konflikte mit Schemas mit demselben Namen zu vermeiden.
      Aktiv Aktiviert, wenn aktiv, deaktiviert, wenn nicht aktiv.
      Schema Schemadefinition, die dem GraphQL-SDL-Format entspricht. Muss eine gültige GraphQL-Syntax sein. Andernfalls werden beim Speichern Fehlermeldungen angezeigt, die auf das Syntaxproblem hinweisen.
      Hinweis:
      Die folgenden GraphQL-Funktionen werden nicht unterstützt:
      • Abonnementvorgänge
      • Benutzerdefinierte Skalartypen

      Sie können diese Direktive in Ihrem Schema verwenden:

      @Quelle: Ordnet ein GraphQL-Feld dem Wert einer Eigenschaft des übergeordneten Objekts zu. Wenn das Feld über ein separates Resolver-Skript verfügt, verwendet das System den Datensatz, in den es auflöst, anstelle des übergeordneten Objekts.

      In diesem Beispiel wird ein Incident-Objekttyp im Schema definiert und ein Resolver-Skript verwendet, um den Typ einem GlideRecord aus der Incident-Tabelle zuzuordnen. Mit der Direktive @source werden die Felder innerhalb des Incident-Typs dem Wert oder display_value im Incident-GlideRecord zugeordnet.

      type Incident {
          id: String @source(value: "sys_id.value")
          active: Boolean @source(value: "active.display_value")
          state: String @source(value: "state.display_value")    
          priority: String @source(value: "priority.display_value")
          severity: String
          description: DisplayableString
          resolvedBy: User @source(value: "resolved_by.value")
          openedBy: User @source(value: "opened_by.value")
          child_incidents: String
          opened_at: String
          resolved_at: String
          closed_at: String
          work_notes: String    
          comments: String @source(value: "comments.display_value")
          parent_incident: String
      }
    4. Wählen Sie die Registerkarte Sicherheit aus, und füllen Sie das Formular aus.
      Feld Beschreibung
      Erfordert Authentifizierung Aktiviert, wenn das Schema eine Authentifizierung erfordert; deaktiviert, wenn das Schema keine Authentifizierung erfordert und öffentlich verfügbar ist.
      Erfordert interne SNC Wird nur angezeigt, wenn das Plugin „Explicit Roles “ aktiviert ist. Aktiviert, wenn das Schema die interne SNC-Rolle erfordert, deaktiviert, wenn das Schema die interne SNC-Rolle nicht erfordert.
      Erfordert ACL-Autorisierung Aktiviert, wenn das Schema eine ACL-Autorisierung erfordert, deaktiviert, wenn das Schema keine ACL-Autorisierung erfordert.
      ACLs Wird nur angezeigt, wenn ACL-Autorisierung erforderlich aktiviert ist. Überprüft eingehende Abfragen anhand von ACLs vom Typ GraphQL.
      Hinweis:
      Die API gibt eindeutige Fehlermeldungen an Benutzer zurück, die keinen Zugriff auf ein Schema haben oder nicht authentifiziert sind, wenn die API für den Zugriff eine Authentifizierung erfordert.
    5. Speichern Sie das Formular.
    6. Wahlweise: Erstellen Sie ein Resolver-Skript, um zu definieren, welchen Wert das Schema zurückgibt, wenn eine Komponente ein bestimmtes Feld abfragt.
      Wenn Sie keinen Resolver für ein Feld definieren, gibt die Abfrage einen beliebigen übereinstimmenden Feldwert aus dem übergeordneten Objekttyp zurück. Angenommen, Sie haben einen Objekttyp „Incident“ in Ihrem Schema mit einem Feld für Arbeitsnotizen. Der Incident-Objekttyp verfügt über einen Resolver, der einem GlideRecord aus der Incident-Tabelle zugeordnet ist. Wenn Sie keine Resolver-Zuordnung für das Feld „Arbeitsnotizen“ erstellen, durchsucht das System die Datenquelle des übergeordneten Objekts, bei der es sich um den GlideRecord aus der Incident-Tabelle handelt, nach einem Feld „Arbeitsnotizen“ und weist den zugehörigen Wert zu.
      1. Wechseln Sie zur Registerkarte Geskriptete GraphQL-Resolver, und klicken Sie auf Neu.
      2. Füllen Sie das Formular aus.
        Feld Beschreibung
        Name Name des Resolvers.
        Schema Schreibgeschützter Schema-Namespace.
        Anwendung Schreibgeschützte Anwendung, zu der das Schema gehört.
        Skript Definieren Sie den Wert, der zurückgegeben wird, wenn das Feld abgefragt wird. Verfügbare Funktionen für das globale env- Objekt:
        • getArguments(): Gibt die Argumente des vorherigen Felds zurück.
        • getSource(): Gibt das übergeordnete Objekt zurück.

        Dieses Skript hat Zugriff auf GlideRecord.

        In diesem Beispiel wird ein Datensatz aus der Benutzertabelle zurückgegeben, wenn das zugehörige Feld abgefragt wird:

        (function process(/*ResolverEnvironment*/ env) {
        
            var userid = env.getArguments().id != null ? env.getArguments().id : env.getSource();
            var now_GR = new GlideRecord('sys_user');
            gr.addQuery('sys_id', userid);
            gr.queryO;
            return gr;
        
        })(env);
      3. Klicken Sie auf Absenden.
    7. Wahlweise: Definieren Sie die Typauflöser für Ihr Schema, um Schnittstellen und Vereinigungen in konkrete Typen aufzulösen.
      1. Wechseln Sie zur Registerkarte GraphQL Scripted Typeresolvers, und klicken Sie auf Neu.
      2. Füllen Sie das Formular aus.
        Feld Beschreibung
        Schema Schreibgeschützter Schema-Namespace.
        Typ Die im Schema definierte Schnittstelle oder der Gewerkschaftstyp.
        Anwendung Schreibgeschützte Anwendung, zu der das Schema gehört.
        Skript Definieren Sie den zurückgegebenen Wert für Gewerkschafts- und Schnittstellentypen. Verfügbare Funktionen für das globale env- Objekt:
        • getArguments(): Gibt die Argumente des vorherigen Felds zurück.
        • getObject(): Gibt das übergeordnete Objekt zurück.
        • getTypeName(): Gibt den Namen der Schnittstelle oder des Gewerkschaftstyps zurück.

        Dieses Skript hat Zugriff auf GlideRecord.

      3. Klicken Sie auf Absenden.
    8. Wahlweise: Ordnen Sie die Resolver- und Typeresolver-Datensätze Feldern im Schema zu.
      Diese Zuordnung teilt dem System mit, welcher Wert zurückgegeben werden soll, wenn eine Komponente ein bestimmtes Feld abfragt.
      1. Wechseln Sie zur Registerkarte GraphQL Scripted Resolver Mappings, und klicken Sie auf Neu.
      2. Füllen Sie das Formular aus.
        Feld Beschreibung
        Pfad Pfad zu dem Feld im Schema, das Sie zuordnen möchten.
        Resolver Resolver, der zum Definieren der vom Feld zurückgegebenen Daten verwendet werden soll.
        Anwendung Schreibgeschützte Anwendung, zu der das Schema gehört.
        Schema Schreibgeschützter Schema-Namespace.
      3. Klicken Sie auf Absenden.