Sdílet prostřednictvím


Zdroj dat Azure SQL pro překladač

PLATÍ PRO: Vývojář | Základní | Basic v2 | Standardní | Standard v2 | Premium | Premium v2

Zásada sql-data-source překladače konfiguruje požadavek Transact-SQL (T-SQL) na databázi Azure SQL a volitelnou odpověď na překlad dat pro typ objektu a pole ve schématu GraphQL. Schéma se musí importovat do služby API Management jako rozhraní GraphQL API.

Poznámka:

Tato zásada je ve verzi Preview. V současné době se zásady nepodporují ve vrstvě Consumption služby API Management.

Poznámka:

Nastavte prvky zásad a podřízené prvky v pořadí uvedeném v prohlášení o zásadách. Přečtěte si další informace o tom, jak nastavit nebo upravit zásady služby API Management.

Prohlášení o zásadách

<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> 

Elementy

Název Popis Povinní účastníci
connection-info Určuje připojení k databázi Azure SQL. Ano
include-fragment Vloží fragment zásady do definice zásady. Pokud existuje více fragmentů, přidejte další include-fragment prvky. No
prosba Určuje požadavek T-SQL překladače a volitelné parametry. Ano
odpověď Volitelně můžete určit podřízené zásady pro konfiguraci odpovědi z databáze Azure SQL. Pokud není zadáno, odpověď se vrátí z Azure SQL jako JSON. No

prvky connection-info

Poznámka:

S výjimkou případů, kdy je uvedeno, může být každý podřízený prvek určen najednou. Zadejte prvky v uvedeném pořadí.

Element (Prvek) Popis Povinní účastníci
connection-string Určuje připojovací řetězec Azure SQL. Připojovací řetězec používá ověřování SQL (uživatelské jméno a heslo) nebo ověřování Microsoft Entra, pokud je nakonfigurovaná spravovaná identita služby API Management. Ano
include-fragment Vloží fragment zásady do definice zásady. Pokud existuje více fragmentů, přidejte další include-fragment prvky. No
authentication-certificate Ověřuje se pomocí klientského certifikátu v požadavku SQL překladače. No

atributy připojovacího řetězce

Atribut Popis Požaduje se Výchozí
use-managed-identity Logický. Určuje, jestli se má použít spravovaná identita přiřazená systémem instance služby API Management pro připojení k databázi Azure SQL místo uživatelského jména a hesla v připojovací řetězec. Výrazy zásad jsou povolené.

Identita musí být nakonfigurovaná pro přístup k databázi Azure SQL.
No false

atribut request

Atribut Popis Požaduje se Výchozí
jeden výsledek Logický. Určuje, jestli se očekává, že odpověď na dotaz vrátí maximálně jeden řádek. Výrazy zásad jsou povolené. No false

prvky požadavku

Poznámka:

Každý podřízený prvek může být zadán najednou. Zadejte prvky v uvedeném pořadí.

Element (Prvek) Popis Povinní účastníci
include-fragment Vloží fragment zásady do definice zásady. No
set-body Nastaví tělo v požadavku SQL překladače. No
příkaz sql Příkaz T-SQL pro požadavek na databázi Azure SQL. Příkaz SQL může obsahovat několik nezávislých podstavů, jako je UPDATE, DELETE a SELECT, které se budou spouštět postupně. Výsledky se vrátí z konečného dílčího statistiky. Ano
parameters Seznamparametrůchm parameter No

atributy parametru

Atribut Popis Požaduje se Výchozí
name Řetězec. Název parametru SQL. Yes
sql-type Řetězec. Datový typ parametru SQL. No

elementy odpovědi

Poznámka:

Každý podřízený prvek může být zadán najednou. Zadejte prvky v uvedeném pořadí.

Název Popis Povinní účastníci
include-fragment Vloží fragment zásady do definice zásady. No
set-body Nastaví tělo v odpovědi překladače. No
publish-event Publikuje událost do jednoho nebo více odběrů zadaných ve schématu rozhraní GraphQL API. No

Využití

Poznámky k využití

  • Informace o konfiguraci a správě překladače pomocí této zásady najdete v tématu Konfigurace překladače GraphQL.
  • Tato zásada se vyvolá pouze při překladu jednoho pole v odpovídajícím typu operace ve schématu.

Konfigurace integrace spravované identity s Azure SQL

Spravovanou identitu přiřazenou systémem služby API Management můžete nakonfigurovat pro přístup k Azure SQL místo konfigurace ověřování SQL pomocí uživatelského jména a hesla. Základní informace najdete v tématu Konfigurace a správa ověřování Microsoft Entra pomocí Azure SQL.

Požadavky

  • Povolte spravovanou identitu přiřazenou systémem ve vaší instanci služby API Management.

Povolení přístupu k ID Microsoft Entra

Povolte ověřování Microsoft Entra do služby SQL Database přiřazením uživatele Microsoft Entra jako správce serveru.

  1. Na portálu přejděte na server Azure SQL.
  2. Vyberte Microsoft Entra ID.
  3. Vyberte Nastavit správce a vyberte sami sebe nebo skupinu, do které patříte.
  4. Zvolte Uložit.

Přiřazení rolí

  1. Na portálu přejděte k prostředku databáze Azure SQL.

  2. Vyberte Editor dotazů (Preview).

  3. Přihlaste se pomocí ověřování active directory.

  4. Spusťte následující skript SQL. Nahraďte <identity-name> názvem vaší instance služby API Management.

    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
    

Příklady

Příklad schématu

Příklady v této části jsou překladače pro následující schéma GraphQL:

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
}

Překladač pro dotaz GraphQL s využitím požadavku T-SQL s jedním výsledkem

Následující příklad přeloží dotaz GraphQL tak, že provede požadavek T-SQL s jedním výsledkem na back-endovou databázi Azure SQL. Připojovací řetězec používá ověřování SQL s uživatelským jménem a heslem a poskytuje se pomocí pojmenované hodnoty. Odpověď se vrátí jako jeden objekt JSON představující jeden řádek.

<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>

Překladač pro dotaz GraphQL s transformovanou odpovědí dotazu s více řádky

Následující příklad přeloží dotaz GraphQL pomocí dotazu T-SQL na databázi Azure SQL. Připojení k databázi používá spravovanou identitu přiřazenou systémem přiřazenou instancí služby API Management. Identita musí být nakonfigurovaná pro přístup k databázi Azure SQL.

K parametru context.GraphQL.Arguments dotazu se přistupuje pomocí kontextové proměnné. Odpověď dotazu s více řádky se transformuje pomocí set-body zásady s šablonou liquid.

<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>

Resolver for GraphQL mutovat

Následující příklad přeloží mutaci GraphQL pomocí příkazu T-SQL INSERT k vložení řádku databáze Azure SQL. Připojení k databázi používá spravovanou identitu přiřazenou systémem přiřazenou instancí služby API Management. Identita musí být nakonfigurovaná pro přístup k databázi 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>

Další informace o práci se zásadami najdete v tématech: