Source de données Azure SQL pour un résolveur
S’applique à : Développeur | Essentiel | Essentiel v2 | Standard | Standard v2 | Premium | Premium v2
La stratégie du résolveur sql-data-source
configure une requête Transact-SQL (T-SQL) sur une base de données Azure SQL et une réponse facultative pour résoudre les données d’un type d’objet et d’un champ dans un schéma GraphQL. Le schéma doit être importé dans Gestion des API en tant qu’API GraphQL.
Notes
Cette stratégie est en préversion. Actuellement, la stratégie n’est pas prise en charge dans le niveau Consommation de Gestion des API.
Notes
Définissez les éléments enfants et de stratégie dans l’ordre fourni dans l’instruction de stratégie. En savoir plus sur comment définir ou modifier des stratégies du service Gestion des API.
Instruction de la stratégie
<sql-data-source>
<connection-info>
<connection-string use-managed-identity="true | false">
Azure SQL connection string
</connection-string>
<include-fragment>...include-fragment policy configuration...</include-fragment>
<authentication-certificate>...authentication-certificate policy configuration...</authentication-certificate>
</connection-info>
<include-fragment>...include-fragment policy configuration...</include-fragment>
<request single-result="true | false">
<include-fragment>...include-fragment policy configuration...</include-fragment>
<set-body>...set-body policy configuration...</set-body>
<sql-statement>T-SQL query</sql-statement>
<parameters>
<parameter sql-type="parameter type" name="Query parameter name in @ notation">
"Query parameter value or expression"
</parameter>
<!-- if there are multiple parameters, then add additional parameter elements -->
</parameters>
</request>
<response>
<include-fragment>...include-fragment policy configuration...</include-fragment>
<set-body>...set-body policy configuration...</set-body>
<publish-event>...publish-event policy configuration...</publish-event>
</response>
</sql-data-source>
Éléments
Nom | Description | Obligatoire |
---|---|---|
informations de connexion | Spécifie une connexion à une base de données Azure SQL. | Oui |
include-fragment | Insère un fragment de stratégie dans la définition de la stratégie. S’il existe plusieurs fragments, ajoutez les éléments include-fragment supplémentaires. |
Non |
requête | Spécifie la requête T-SQL du résolveur et les paramètres facultatifs. | Oui |
response | Spécifie éventuellement des stratégies enfants pour configurer la réponse à partir de la base de données Azure SQL. Si elle n’est pas spécifiée, la réponse est retournée à partir d’Azure SQL au format JSON. | Non |
Éléments connection-info
Notes
Sauf mention contraire, chaque élément enfant ne peut être spécifié qu’une fois. Indiquez les éléments dans l’ordre indiqué.
Élément | Description | Obligatoire |
---|---|---|
connection-string | Spécifie la chaîne de connexion à Azure SQL. La chaîne de connexion utilise l’authentification SQL (nom d’utilisateur et mot de passe) ou l’authentification Microsoft Entra en cas de configuration d’une identité managée Gestion des API. | Oui |
include-fragment | Insère un fragment de stratégie dans la définition de la stratégie. S’il existe plusieurs fragments, ajoutez les éléments include-fragment supplémentaires. |
Non |
authentication-certificate | S’authentifie à l’aide d’un certificat client dans la requête SQL du résolveur. | Non |
Attributs connection-string
Attribut | Description | Obligatoire | Default |
---|---|---|---|
use-managed-identity | Propriété booléenne. Spécifie s’il faut utiliser l’identité managée affectée par le système de l’instance Gestion des API pour la connexion à une base de données Azure SQL au lieu d’un nom d’utilisateur et d’un mot de passe dans la chaîne de connexion. Les expressions de stratégie sont autorisées. L’identité doit être configurée pour accéder à la base de données Azure SQL. |
Non | false |
attribut de la requête
Attribut | Description | Obligatoire | Default |
---|---|---|---|
single-result | Propriété booléenne. Spécifie si la réponse à la requête est censée retourner une ligne au maximum. Les expressions de stratégie sont autorisées. | Non | false |
Éléments de la requête
Notes
Chaque élément enfant ne peut être spécifié qu’une fois. Indiquez les éléments dans l’ordre indiqué.
Élément | Description | Obligatoire |
---|---|---|
include-fragment | Insère un fragment de stratégie dans la définition de la stratégie. | Non |
set-body | Définit le corps dans la requête SQL du résolveur. | Non |
sql-statement | Instruction T-SQL pour la requête à la base de données Azure SQL. L’instruction SQL peut inclure plusieurs sous-états indépendants, tels que UPDATE, DELETE et SELECT, qui seront exécutés dans l’ordre. Les résultats sont retournés à partir du sous-état final. | Oui |
parameters | Liste des paramètres SQL, en des sous-éléments parameter , pour la requête. |
Non |
attributs de paramètre
Attribut | Description | Obligatoire | Default |
---|---|---|---|
name | Chaîne. Nom du paramètre SQL. | Oui | N/A |
sql-type | Chaîne. Le type de données du paramètre SQL. | Non | N/A |
response elements
Notes
Chaque élément enfant ne peut être spécifié qu’une fois. Indiquez les éléments dans l’ordre indiqué.
Nom | Description | Obligatoire |
---|---|---|
include-fragment | Insère un fragment de stratégie dans la définition de la stratégie. | Non |
set-body | Définit le corps dans la réponse du résolveur. | Non |
publish-event | Publie un événement dans un ou plusieurs abonnements spécifiés dans le schéma de l’API GraphQL. | Non |
Usage
- Étendues de la stratégie : Résolveur GraphQL
- Passerelles : classiques, v2
Notes d’utilisation
- Pour configurer et gérer un résolveur avec cette stratégie, voir Configurer un résolveur GraphQL.
- Cette stratégie est appelée uniquement lors de la résolution d’un champ unique dans un type d’opération correspondant dans le schéma.
Configurer l’intégration des identités managées avec Azure SQL
Vous pouvez configurer une identité managée affectée par le système de Gestion des API pour l’accès à Azure SQL au lieu de configurer l’authentification SQL avec un nom d’utilisateur et un mot de passe. Pour obtenir plus de contexte, consultez Configurer et gérer l’authentification Microsoft Entra avec Azure SQL.
Prérequis
- Activez uneidentité managée affectée par le système dans votre instance Gestion des API.
Activer l’accès Microsoft Entra ID
Activez l’authentification Microsoft Entra pour SQL Database en attribuant un utilisateur Microsoft Entra comme administrateur du serveur.
- Dans le portail, accédez à votre serveur Azure SQL.
- Sélectionnez Microsoft Entra ID.
- Sélectionnez Définir l’administrateur, puis vous-même ou un groupe auquel vous appartenez.
- Sélectionnez Enregistrer.
Attribuer des rôles
Dans le portail, accédez à votre ressource de base de données Azure SQL.
Sélectionnez Éditeur de requête (préversion).
Connectez-vous en utilisant l’authentification Active Directory.
Exécutez le script T-SQL suivant. Remplacez la valeur
<identity-name>
par le nom de votre instance Gestion des API.CREATE USER [<identity-name>] FROM EXTERNAL PROVIDER; ALTER ROLE db_datareader ADD MEMBER [<identity-name>]; ALTER ROLE db_datawriter ADD MEMBER [<identity-name>]; ALTER ROLE db_ddladmin ADD MEMBER [<identity-name>]; GO
Exemples
Exemple de schéma
Les exemples de cette section sont des résolveurs pour le schéma GraphQL suivant :
type Family {
id: Int!
name: String!
}
type Person {
id: Int!
name: String!
}
type PersonQueryResult {
items: [Person]
}
type Query {
familyById(familyId: Int!): Family
familyMembers(familyId: Int!): PersonQueryResult
}
type Mutation {
createFamily(familyId: Int!, familyName: String!): Family
}
Résolveur pour une requête GraphQL en utilisant une requête T-SQL à résultat unique
L’exemple suivant résout une requête GraphQL en effectuant une requête T-SQL à résultat unique sur une base de données Azure SQL back-end. La chaîne de connexion utilise l’authentification SQL avec un nom d’utilisateur et un mot de passe et est fournie en tirant parti d’une valeur nommée. La réponse est retournée sous forme d’objet JSON unique représentant une seule ligne.
<sql-data-source>
<connection-info>
<connection-string>
{{my-connection-string}}
</connection-string>
</connection-info>
<request single-result="true">
<sql-statement>
SELECT
f.[Id] AS [id]
f.[Name] AS [name]
WHERE @familyId = f.[Id]
</sql-statement>
<parameters>
<parameter name="@familyId">
@(context.GraphQL.Arguments["id"])
</parameter>
</parameters>
</request>
<response />
</sql-data-source>
Résolveur pour une requête GraphQL avec une réponse de requête multiligne transformée
L’exemple suivant résout une requête GraphQL en utilisant une requête SQL dans une base de données Azure SQL. La connexion à la base de données utilise l’identité managée affectée par le système de l’instance Gestion des API. L’identité doit être configurée pour accéder à la base de données Azure SQL.
Le paramètre de requête est accessible en tirant parti de la variable de contexte context.GraphQL.Arguments
. La réponse de requête à plusieurs lignes est transformée en tirant parti de la stratégie set-body
avec un modèle liquide.
<sql-data-source>
<connection-info>
<connection-string use-managed-identity="true">
Server=tcp:{your_server_name}.database.windows.net,1433;Initial Catalog={your_database_name};
</connection-string>
</connection-info>
<request>
<sql-statement>
SELECT
p.[Id] AS [Id]
p.[FirstName] AS [FirstName]
p.[LastName] AS [LastName]
FROM [Person] p
JOIN [Family] f ON p.[FamilyId] = f.[Id]
WHERE @familyId = f.[Id]
</sql-statement>
<parameters>
<parameter name="@familyId">
@(context.GraphQL.Arguments["id"])
</parameter>
</parameters>
</request>
<response>
<set-body template="liquid">
{
"items": [
{% JSONArray For person in body.items %}
"id": "{{ person.id }}"
"name": "{{ person.firstName }} + "" "" + {{body.lastName}}"
{% endJSONArrayFor %}
]
}
</set-body>
</response>
</sql-data-source>
Résolveur de la mutation GraphQL
L’exemple suivant résout une mutation GraphQL en utilisant une instruction T-SQL INSERT pour insérer une ligne d’une base de données Azure SQL. La connexion à la base de données utilise l’identité managée affectée par le système de l’instance Gestion des API. L’identité doit être configurée pour accéder à la base de données Azure SQL.
<sql-data-source>
<connection-info>
<connection-string use-managed-identity="true">
Server=tcp:{your_server_name}.database.windows.net,1433;Initial Catalog={your_database_name};</connection-string>
</connection-info>
<request single-result="true">
<sql-statement>
INSERT INTO [dbo].[Family]
([Id]
,[Name])
VALUES
(@familyId
, @familyName)
SELECT
f.[Id] AS [id],
f.[Name] AS [name]
FROM [Family] f
WHERE @familyId = f.[Id]
</sql-statement>
<parameters>
<parameter name="@familyId">
@(context.GraphQL.Arguments["id"])
</parameter>
<parameter name="@familyName">
@(context.GraphQL.Arguments["name"])
</parameter>
</parameters>
</request>
</sql-data-source>
Stratégies connexes
Contenu connexe
Pour plus d’informations sur l’utilisation des stratégies, consultez :
- Tutoriel : Transformer et protéger votre API
- Référence de stratégie pour obtenir la liste complète des instructions et des paramètres de stratégie
- Expressions de stratégie
- Définir ou modifier des stratégies
- Réutilisation de configurations de stratégie
- Référentiel d’extrait de stratégie
- Créer des stratégies à l’aide de Microsoft Copilot dans Azure