Sumber data Azure SQL untuk pemecah masalah

BERLAKU UNTUK: Pengembang | Dasar | Dasar v2 | Standar | Standar v2 | Premium

Kebijakan sql-data-source resolver mengonfigurasi permintaan Transact-SQL (T-SQL) ke database Azure SQL dan respons opsional untuk menyelesaikan data untuk jenis objek dan bidang dalam skema GraphQL. Skema harus diimpor ke API Management sebagai API GraphQL.

Catatan

Kebijakan ini dalam pratinjau. Saat ini, kebijakan tidak didukung di tingkat Konsumsi API Management.

Catatan

Tetapkan elemen kebijakan dan elemen turunan dalam urutan yang disediakan dalam pernyataan kebijakan. Pelajari lebih lanjut cara mengatur atau mengedit kebijakan API Management.

Pernyataan kebijakan

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

Elemen

Nama Deskripsi Wajib diisi
info koneksi Menentukan koneksi ke database Azure SQL. Ya
include-fragment Menyisipkan fragmen kebijakan dalam definisi kebijakan. Jika ada beberapa fragmen, tambahkan elemen tambahan include-fragment . No
Permintaan Menentukan permintaan T-SQL resolver dan parameter opsional. Ya
respons Secara opsional menentukan kebijakan anak untuk mengonfigurasi respons dari database Azure SQL. Jika tidak ditentukan, respons dikembalikan dari Azure SQL sebagai JSON. No

elemen info koneksi

Catatan

Kecuali jika disebutkan, setiap elemen turunan dapat ditentukan paling banyak sekali. Tentukan elemen dalam urutan yang tercantum.

Elemen Deskripsi Wajib diisi
connection-string Menentukan string koneksi Azure SQL. string koneksi menggunakan autentikasi SQL (nama pengguna dan kata sandi) atau autentikasi Microsoft Entra jika identitas terkelola API Management dikonfigurasi. Ya
include-fragment Menyisipkan fragmen kebijakan dalam definisi kebijakan. Jika ada beberapa fragmen, tambahkan elemen tambahan include-fragment . No
sertifikat autentikasi Mengautentikasi menggunakan sertifikat klien dalam permintaan SQL resolver. No

atribut string koneksi

Atribut Deskripsi Wajib diisi Default
use-managed-identity Boolean. Menentukan apakah akan menggunakan identitas terkelola yang ditetapkan sistem instans API Management untuk koneksi ke database Azure SQL sebagai pengganti nama pengguna dan kata sandi di string koneksi. Ekspresi kebijakan diizinkan.

Identitas harus dikonfigurasi untuk mengakses database Azure SQL.
No false

atribut permintaan

Atribut Deskripsi Wajib diisi Default
hasil tunggal Boolean. Menentukan apakah respons terhadap kueri diharapkan mengembalikan satu baris paling banyak. Ekspresi kebijakan diizinkan. No false

elemen permintaan

Catatan

Setiap elemen turunan dapat ditentukan paling banyak sekali. Tentukan elemen dalam urutan yang tercantum.

Elemen Deskripsi Wajib diisi
include-fragment Menyisipkan fragmen kebijakan dalam definisi kebijakan. No
set-body Mengatur isi dalam permintaan SQL resolver. No
sql-statement Pernyataan T-SQL untuk permintaan ke database Azure SQL. Pernyataan SQL dapat mencakup beberapa substatemen independen seperti UPDATE, DELETE, dan SELECT yang akan dijalankan secara berurutan. Hasil dikembalikan dari substatement akhir. Ya
parameter Daftar parameter SQL, dalam parameter subelemen, untuk permintaan tersebut. No

atribut parameter

Atribut Deskripsi Wajib diisi Default
nama String. Nama parameter SQL. Ya T/A
jenis sql String. Jenis data parameter SQL. No T/A

elemen respons

Catatan

Setiap elemen turunan dapat ditentukan paling banyak sekali. Tentukan elemen dalam urutan yang tercantum.

Nama Deskripsi Wajib diisi
include-fragment Menyisipkan fragmen kebijakan dalam definisi kebijakan. No
set-body Mengatur isi dalam respons resolver. No
publish-event Menerbitkan peristiwa ke satu atau beberapa langganan yang ditentukan dalam skema API GraphQL. No

Penggunaan

Catatan penggunaan

  • Untuk mengonfigurasi dan mengelola resolver dengan kebijakan ini, lihat Mengonfigurasi pemecah masalah GraphQL.
  • Kebijakan ini hanya dipanggil saat menyelesaikan satu bidang dalam jenis operasi yang cocok dalam skema.

Mengonfigurasi integrasi identitas terkelola dengan Azure SQL

Anda dapat mengonfigurasi identitas terkelola yang ditetapkan sistem API Management untuk akses ke Azure SQL alih-alih mengonfigurasi autentikasi SQL dengan nama pengguna dan kata sandi. Untuk latar belakang, lihat Mengonfigurasi dan mengelola autentikasi Microsoft Entra dengan Azure SQL.

Prasyarat

Mengaktifkan akses ID Microsoft Entra

Aktifkan autentikasi Microsoft Entra ke SQL Database dengan menetapkan pengguna Microsoft Entra sebagai admin server.

  1. Di portal, buka server Azure SQL Anda.
  2. Pilih Microsoft Entra ID.
  3. Pilih Atur admin dan pilih diri Anda atau grup tempat Anda berada.
  4. Pilih Simpan.

Menetapkan peran

  1. Di portal, buka sumber daya database Azure SQL Anda.

  2. Pilih Editor kueri (pratinjau).

  3. Masuk menggunakan autentikasi Direktori Aktif.

  4. Jalankan skrip SQL berikut. Ganti <identity-name> dengan nama instans API Management Anda.

    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
    

Contoh

Contoh skema

Contoh di bagian ini adalah resolver untuk skema GraphQL berikut:

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
}

Resolver untuk kueri GraphQL menggunakan permintaan T-SQL hasil tunggal

Contoh berikut menyelesaikan kueri GraphQL dengan membuat permintaan T-SQL hasil tunggal ke database Azure SQL backend. string koneksi menggunakan autentikasi SQL dengan nama pengguna dan kata sandi dan disediakan menggunakan nilai bernama. Respons dikembalikan sebagai objek JSON tunggal yang mewakili satu baris.

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

Pemecah masalah untuk kueri GraphQL dengan respons kueri multi-baris yang diubah

Contoh berikut menyelesaikan kueri GraphQL menggunakan kueri T-SQL ke database Azure SQL. Koneksi ke database menggunakan identitas terkelola yang ditetapkan sistem instans API Management. Identitas harus dikonfigurasi untuk mengakses database Azure SQL.

Parameter kueri diakses menggunakan context.GraphQL.Arguments variabel konteks. Respons kueri multibaris diubah menggunakan set-body kebijakan dengan templat cair.

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

Penyelesai untuk mutasi GraphQL

Contoh berikut menyelesaikan mutasi GraphQL menggunakan pernyataan T-SQL INSERT untuk menyisipkan baris database Azure SQL. Koneksi ke database menggunakan identitas terkelola yang ditetapkan sistem instans API Management. Identitas harus dikonfigurasi untuk mengakses database 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>

Untuk informasi selengkapnya tentang bekerja dengan kebijakan, lihat: