Erstellen Sie ein GraphQL-Schema
Erstellen Sie ein GraphQL-Schema, um Daten für GraphQL-Abfragen verfügbar zu machen.
Vorbereitungen
Erforderliche Rolle: graphql_Schema_admin oder admin
Prozedur
- Navigieren zu Alle > System-Webservices > GraphQL > GraphQL-APIsan.
- Wählen Sie Neu.
-
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 Schema-Namespace Um Konflikte mit Schemas mit demselben Namen zu vermeiden. Aktiv Option zum Aktivieren oder Deaktivieren des GraphQL-Schemas. 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
- Anwenderdefinierte Skalartypen
Sie können diese Anweisung in Ihrem Schema verwenden:
@Source: 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 aufgelöst wird, anstelle des übergeordneten Objekts.Dieses Beispiel definiert einen Incident-Objekttyp im Schema und verwendet ein Resolver-Skript, um den Typ einem GlideRecord aus der Incident-Tabelle zuzuordnen. Mit
@Sourcerichtlinie ordnet die Felder innerhalb des Incident-Typs zuWertOderDisplay_valueIm Incident-GlideRecord.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 } -
In Sicherheit Füllen Sie die Felder aus.
Feld Beschreibung Erfordert Authentifizierung Wählen Sie diese Option aus, um eine Authentifizierung für den Zugriff auf das Schema anzufordern. Durch das Löschen dieser Option wird das Schema öffentlich verfügbar gemacht. Erfordert ACL-Autorisierung Wählen Sie diese Option aus, um die ACL-Autorisierung der gesamten API anzufordern. In ACLs Wählen Sie ACLs mit dem GraphQL-Typ aus. Um die ACL-Autorisierung nur für bestimmte Pfade zu verwenden, lassen Sie diese Option deaktiviert, und geben Sie die Ebene an, für die ACLs ausgewertet werden sollen Pfad-ACL-Tiefe Feld.
Erfordert SNC intern Wählen Sie diese Option aus, wenn das Schema die interne SNC-Rolle erfordert. Diese Option wird nur angezeigt, wenn das Plugin Explicit Roles (com.Glide.Explicit_roles) aktiviert ist. Pfad-ACL-Tiefe Geben Sie die Ebene der GraphQL-API an, auf die ACLs angewendet werden sollen. Wenn Sie die Pfadtiefe auf 3 oder niedriger festlegen, werden weniger Ressourcen verbraucht und Abfrageantworten zurückgegeben. Um die für den Pfad zu verwendenden ACLs anzugeben, müssen Sie eine ACL mit dem Typ GraphQL erstellen und den genauen API-Pfad hinzufügen, der mit dem Schema-Namespace beginnt Name Feld. Beispiel: /<planet>/<findAll>/<name> . Platzhalter werden nicht unterstützt. Weitere Informationen finden Sie unter Configure an ACL rule.
Hinweis:Die ACLs Das Feld gilt für die gesamte API und ist unabhängig von den ACLs, die auf bestimmte Pfade angewendet werden.ACLs Wählen Sie ACLs mit dem GraphQL-Typ aus, anhand derer eingehende Abfragen überprüft werden sollen. Die von Ihnen ausgewählten ACLs gelten für die gesamte API. Diese Option wird nur angezeigt, wenn Erfordert ACL-Autorisierung Ist ausgewählt. Hinweis:Die API gibt eindeutige Fehlermeldungen an Anwender zurück, die keinen Zugriff auf ein Schema haben oder die nicht authentifiziert sind, wenn die API eine Authentifizierung für den Zugriff erfordert. - Speichern Sie das Formular.
- Wahlweise:
Erstellen Sie ein Resolver-Skript, um zu definieren, welchen Wert das Schema zurückgibt, wenn eine Komponente ein Feld abfragt.
Wenn Sie keinen Resolver für ein Feld definieren, gibt die Abfrage einen übereinstimmenden Feldwert aus dem übergeordneten Objekttyp zurück. Angenommen, Sie haben in Ihrem Schema einen Incident-Objekttyp mit einem Arbeitsnotizenfeld. 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, d. h. den GlideRecord aus der Incident-Tabelle, nach einem Arbeitsnotizenfeld und weist den zugehörigen Wert zu.
- Wählen Sie die Registerkarte GraphQL-Skriptlöser aus, und wählen Sie aus Neu .
-
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. Funktionen, die global verfügbar sind umgebung Objekt: - GetArguments() : Gibt die Argumente des vorherigen Felds zurück.
- GetSource() : Gibt das übergeordnete Objekt zurück.
Dieses Skript hat Zugriff auf GlideRecord.
Dieses Beispiel gibt einen Datensatz vom Anwender zurück Tabelle 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); - Wählen Sie Absenden.
- Wahlweise:
Definieren Sie die Typ-Resolver für Ihr Schema, um Schnittstellen und Verbindungen in konkrete Typen aufzulösen.
- Wählen Sie die Registerkarte GraphQL-Skripttypen-Resolver aus, und wählen Sie aus Neu .
-
Füllen Sie das Formular aus.
Feld Beschreibung Schema Schreibgeschützter Schema-Namespace. Typ Der im Schema definierte Schnittstellen- oder vereinigungstyp. Anwendung Schreibgeschützte Anwendung, zu der das Schema gehört. Skript Definieren Sie den Wert, der für vereinigungs- und Schnittstellentypen zurückgegeben wird. Funktionen, die global verfügbar sind umgebung 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 vereinigungstyps zurück.
Dieses Skript hat Zugriff auf GlideRecord.
- Wählen Sie Absenden.
- Wahlweise:
Ordnen Sie die Resolver- und Typ-Resolver-Datensätze den Feldern im Schema zu.
Diese Zuordnung teilt dem System mit, welcher Wert zurückgegeben werden soll, wenn eine Komponente ein Feld abfragt.
- Wählen Sie die Registerkarte GraphQL Skriptbezogene Resolver-Zuordnungen aus, und wählen Sie aus Neu .
-
Füllen Sie das Formular aus.
Feld Beschreibung Pfad Pfad zum 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. - Wählen Sie Absenden.