Sovellusten yhdistäminen GraphQL:n Fabric-ohjelmointirajapintaan
Muistiinpano
GraphQL:n Microsoft Fabric -ohjelmointirajapinta on esikatseluvaiheessa.
Jotta voit yhdistää sovelluksen GraphQL:n ohjelmointirajapintaan, tarvitset kolme tärkeää tietoa: asiakastunnuksen, vuokraajatunnuksesi ja GraphQL-päätepisteosoitteesi Fabricissa. Seuraavissa osioissa esitellään, miten voit luoda ja hakea kaikki tarvitsemasi tiedot ja käyttää ohjelmointirajapintaasi mallisovelluksen avulla.
Edellytykset
Tällä hetkellä GraphQL-ohjelmointirajapinta edellyttää sovelluksia, jotka käyttävät Microsoft Entraa todentamiseen. Sovellus on rekisteröitävä ja määritettävä riittävästi, jotta se voi suorittaa API-kutsuja Fabricia vastaan. Lisätietoja on artikkelissa Microsoft Entra -sovelluksen luominen Azuressa.
Ohjelmointirajapintaa käyttävä todennettu käyttäjä edellyttää Suorita-käyttöoikeuksia GraphQL-ohjelmointirajapinnalle (Suorita kyselyt ja mutaatiot -asetus suoria käyttöoikeuksia lisättäessä). Jos kertakirjautumista (SSO) käytetään ohjelmointirajapinnan yhteysvaihtoehtona, luku- tai kirjoitusoikeudet vaaditaan vastaavasti valitsemassasi tietolähteessä. Lisätietoja on kohdassa Yhdistä tietolähteeseen ja luo rakenne.
Ennen kuin yhdistät sovelluksen, sinulla on oltava ohjelmointirajapinta GraphQL:lle Fabricissa. Lisätietoja on artikkelissa Ohjelmointirajapinnan luominen GraphQL:lle Fabricissa ja tietojen lisääminen.
Luo Microsoft Entra -sovellus
Seuraavissa vaiheissa esittelemme, miten voit määrittää ReactJS-sovelluksen tuen Microsoft Entrassa.
- Rekisteröi sovellus noudattamalla ohjeita kohdassa Pikaopas: Sovelluksen rekisteröinti Microsoftin käyttäjätietoympäristössä.
- Microsoft Entra -sovellussovelluksesi (asiakas) tunnuksen ja hakemiston (vuokraajan) tunnusarvot näkyvät Yhteenveto-ruudussa. Tallenna nämä arvot sellaisina kuin niitä tarvitaan myöhemmin.
- Valitse Hallinta -luettelosta -ohjelmointirajapinnan käyttöoikeudetja valitse sitten Lisää käyttöoikeus -.
- Lisää PowerBI -palvelu, valitse Delegoidut käyttöoikeudet ja valitse Item.Execute.All permissions. Varmista, ettei järjestelmänvalvojan suostumusta tarvita.
- Valitse Hallinta-luettelossa TodennusLisää ympäristö, >Yksisivuinen sovellus.>
- Lisää paikallisiin kehitystarkoituksiin kohtaan
http://localhost:3000
Uudelleenohjauksen URI-osoitteet ja varmista, että sovellus on otettu käyttöön valtuutuskoodin työnkulussa, jossa on Koodin vaihto -ohjelman (PKCE) todisteavain. Tallenna muutoksesi valitsemalla Määritä-painike. Jos sovellus saa useita alkuperää koskeviin pyyntöihin liittyvän virheen, lisää edellisessä vaiheessa mobiili- ja työpöytäsovellusympäristö samalla uudelleenohjauksen URI-uri-kohteella. - Palaa Valtuutus-kohtaan, vieritä alaspäin kohtaan Lisäasetukset ja valitse Salli julkisen asiakkaan työnkulut -kohdassa Kyllä seuraavien mobiili- ja työpöytätyönkulkujen käyttöön ottamiseksi.
GraphQL-mallirajapinnan määrittäminen sovelluksen käyttöä varten
Tässä esimerkissä luomme GraphQL-ohjelmointirajapinnan, joka paljastaa Lakehouse-mallitiedot asiakkaille.
Valitse Fabric-portaalin aloitussivulla Tietotekniikka kuormitusten luettelosta.
Valitse Tietotekniikka-kokemuksessa Käytä mallia ja valitse Lakehouse-kohdasta Julkiset juhlapäivät, jos haluat luoda automaattisesti uuden Lakehousen, jossa on juhlapäivätiedot.
Luo uusi GraphQL-ohjelmointirajapinnan luominen -toiminnon ohjeiden mukaisesti, luo uusi GraphQL-ohjelmointirajapinta ja valitse luomasi Lakehouse. Lisää julkiset juhlapäivät -taulukko, jotta asiakkaat voivat käyttää näitä tietoja.
Testaa GraphQL-ohjelmointirajapintaa ohjelmointirajapintaeditorissa käyttämällä seuraavaa esimerkkikyselyä. Käytämme samaa kyselyä React-asiakassovelluksessa:
query { publicholidays (filter: {countryRegionCode: {eq:"US"}, date: {gte: "2024-01-01T00:00:00.000Z", lte: "2024-12-31T00:00:00.000Z"}}) { items { countryOrRegion holidayName date } } }
Valitse Ohjelmointirajapintakohteen työkaluriviltä Kopioi päätepiste .
Valitse Kopioi linkki -näytössä Kopioi.
Kopioi päätepisteen URI, koska se vaaditaan myöhemmin, kuten Microsoft Entra -sovelluksen asiakastunnus ja vuokraajatunnus on tallennettu aiemmin.
Määritä React-sovellus käyttämään julkisten lomien ohjelmointirajapintaa
Käytämme lähtökohtana olemassa olevaa React-sovellusta. Noudata opetusohjelman kaikkia vaiheita Luo React-yksisivuinen sovellus ja valmistele se todentamista varten, jotta voit luoda React-projektin, jossa Microsoft Entra -todennus on jo määritetty. Tämä sisältää myös lisää tiedostoja ja kansioita, joita projektirakenteeseen täytyy lisätä. Meidän tarvitsee muuttaa vain kolmea tiedostoa, jotta voimme mukauttaa sovelluksen GraphQL-käyttötapausta varten.
Avaa src-kansiossaauthConfig.js-tiedosto ja korvaa tiedoston sisältö seuraavalla koodikatkelmalla:
/* * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. */ import { LogLevel } from "@azure/msal-browser"; /** * Configuration object to be passed to MSAL instance on creation. * For a full list of MSAL.js configuration parameters, visit: * https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-browser/docs/configuration.md */ export const graphqlConfig = { graphqlEndpoint: "`Enter_the_GraphQL_Endpoint_Here" }; export const msalConfig = { auth: { clientId: "Enter_the_Application_Id_Here", authority: "https://login.microsoftonline.com/Enter_the_Tenant_Info_Here", redirectUri: "http://localhost:3000", }, cache: { cacheLocation: "sessionStorage", // This configures where your cache will be stored storeAuthStateInCookie: false, // Set this to "true" if you are having issues on IE11 or Edge }, system: { loggerOptions: { loggerCallback: (level, message, containsPii) => { if (containsPii) { return; } switch (level) { case LogLevel.Error: console.error(message); return; case LogLevel.Info: console.info(message); return; case LogLevel.Verbose: console.debug(message); return; case LogLevel.Warning: console.warn(message); return; default: return; } } } } }; /** * Scopes you add here will be prompted for user consent during sign-in. * By default, MSAL.js will add OIDC scopes (openid, profile, email) to any login request. * For more information about OIDC scopes, visit: * https://docs.microsoft.com/azure/active-directory/develop/v2-permissions-and-consent#openid-connect-scopes */ export const loginRequest = { scopes: ["https://analysis.windows.net/powerbi/api/Item.Execute.All"] }; /** * Add here the scopes to request when obtaining an access token for MS Graph API. For more information, see: * https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-browser/docs/resources-and-scopes.md */ export const graphConfig = { graphMeEndpoint: "https://graph.microsoft.com/v1.0/me", };
Kuten yllä olevasta koodista näkyy, on tärkeää käyttää oikeaa vaikutusaluetta, jotta voit käyttää sovellusta. Meidän tapauksessamme
https://analysis.windows.net/powerbi/api/Item.Execute.All
.Tärkeä
Vaikutusalueet saattavat muuttua Microsoft Fabric -ohjelmointirajapinnan GraphQL-esikatselun aikana.
Korvaa seuraavat arvot Microsoft Entra -hallintakeskuksen arvoilla.
-
clientId
- Sovelluksen tunniste, jota kutsutaan myös asiakkaaksi. KorvaaEnter_the_Application_Id_Here
Sovellus (asiakas) -tunnuksen arvolla, joka tallennettiin aiemmin rekisteröidyn Microsoft Entra -sovelluksen Yleiskatsaus-sivulta. -
authority
- Se koostuu kahdesta osasta:- Esiintymä on pilvipalveluntarjoajan päätepiste. Tarkista kansallisissa pilvipalveluissa käytettävissä olevat eri päätepisteet.
- Vuokraajatunnus on sen vuokraajan tunnus, johon sovellus on rekisteröity. Korvaa Enter_the_Tenant_Info_Here rekisteröidyn sovelluksen Yleiskatsaus-sivulla tallennetulla Hakemiston (vuokraajan) tunnuksen arvolla.
-
graphQLEndpoint
- Fabric-ohjelmointirajapinta GraphQL-päätepisteelle. KorvaaEnter_the_GraphQL_Endpoint_Here
aiemmin kirjatulla GraphQL-ohjelmointirajapinnan päätepisteellä.
-
Tallenna tiedosto.
Avaa samassa src-kansiossa App.js-tiedosto ja korvaa tiedoston sisältö seuraavalla koodikatkelmalla:
import React, { useState } from 'react'; import { PageLayout } from './components/PageLayout'; import { loginRequest, graphqlConfig } from './authConfig'; import { ProfileData } from './components/ProfileData'; import { AuthenticatedTemplate, UnauthenticatedTemplate, useMsal } from '@azure/msal-react'; import './App.css'; import Button from 'react-bootstrap/Button'; import Spinner from 'react-bootstrap/Spinner'; /** * Renders information about the signed-in user or a button to retrieve data about the user */ const ProfileContent = () => { const { instance, accounts } = useMsal(); const [graphqlData, setGraphqlData] = useState(null); const [display, setDisplay] = useState(false); function RequestGraphQL() { // Silently acquires an access token which is then attached to a request for GraphQL data instance .acquireTokenSilent({ ...loginRequest, account: accounts[0], }) .then((response) => { callGraphQL(response.accessToken).then((response) => setGraphqlData(response)); }); } async function callGraphQL(accessToken) { setDisplay(true); const query = `query { publicholidays (filter: {countryRegionCode: {eq:"US"}, date: {gte: "2024-01-01T00:00:00.000Z", lte: "2024-12-31T00:00:00.000Z"}}) { items { countryOrRegion holidayName date } } }`; fetch(graphqlConfig.graphqlEndpoint, { method: 'POST', headers: { 'Content-Type': 'application/json', 'Authorization': `Bearer ${accessToken}`, }, body: JSON.stringify({ query: query }) }) .then((res) => res.json()) .then((result) => setGraphqlData(result)); } return ( <> <h5 className="card-title">Welcome {accounts[0].name}</h5> <br/> {graphqlData ? ( <ProfileData graphqlData={graphqlData} /> ) : ( <Button variant="primary" onClick={RequestGraphQL}> Query Fabric API for GraphQL Data {display ? ( <Spinner as="span" animation="border" size="sm" role="status" aria-hidden="true" /> ) : null} </Button> )} </> ); }; /** * If a user is authenticated the ProfileContent component above is rendered. Otherwise a message indicating a user is not authenticated is rendered. */ const MainContent = () => { return ( <div className="App"> <AuthenticatedTemplate> <ProfileContent /> </AuthenticatedTemplate> <UnauthenticatedTemplate> <h5> <center> Please sign-in to see your profile information. </center> </h5> </UnauthenticatedTemplate> </div> ); }; export default function App() { return ( <PageLayout> <center> <MainContent /> </center> </PageLayout> ); }
Tallenna tiedosto.
Avaa lopuksi src/components-kansiossa ProfileData.jsx-tiedosto ja korvaa tiedoston sisältö seuraavalla koodikatkelmalla:
import React from "react"; import ListGroup from 'react-bootstrap/ListGroup'; import Table from 'react-bootstrap/Table'; /** * Renders information about the user obtained from MS Graph * @param props */ export const ProfileData = (props) => { const holidays = props.graphqlData.data.publicholidays.items; return ( <Table striped bordered hover responsive> <thead> <tr> <th>Country</th> <th>Holiday</th> <th>Date</th> </tr> </thead> <tbody> {holidays.map((item,i) => ( <tr key={i}> <td>{item.countryOrRegion}</td> <td>{item.holidayName}</td> <td>{item.date}</td> </tr> ))} </tbody> </Table> )};
Tallenna kaikki tiedoston muutokset.
Siirry valitsemassasi päätesovelluksessa React-projektin pääkansioon ja suorita komento
npm start
sovelluksen testaamiseksi paikallisesti.Kun sovellus latautuu selaimessasi kohteesta
http://localhost:3000
, suorita opetusohjelman viimeisen osan vaiheet Kutsu ohjelmointirajapinta sovelluksesta -todennusta varten.Kun olet kirjautunut sisään, napsauta painiketta Query Fabric -ohjelmointirajapinta GraphQL-tiedoille.
Onnistunut todennettu pyyntö Fabricin GraphQL-ohjelmointirajapinnalle palauttaa tiedot GraphQL-kyselystä Lakehouseen React-asiakassovelluksessamme:
Palvelun päänimen käyttäminen
Edellisen osion vaiheita tarvitaan käyttäjäobjektien käyttöoikeuksien antamiseen, mutta voit myös käyttää GraphQL-ohjelmointirajapintaa palvelun päänimellä:
Luo toinen Microsoft Entra -sovellus, jolla on samanlaiset käyttöoikeudet (Item.Execute.All-vaikutusalue PowerBI-palvelussa) noudattamalla edellisen osion ohjeita. Lisää uuteen sovellukseen asiakassalaisuus kohdasta Varmenteet ja salaiset koodit. Lisätietoja on artikkelissa Microsoft Entra -sovelluksen rekisteröiminen ja palvelun päänimen luominen.
Varmista, että vuokraajan järjestelmänvalvojat ovat mahdollistaneet palvelun päänimien käytön Fabricissa. Siirry vuokraajan hallintaportaalissa vuokraaja-asetuksiin. Ota Kehittäjäasetukset-kohdassa käyttöön palvelun päänimet voivat käyttää Fabric-ohjelmointirajapintoja. Kun tämä asetus on käytössä, sovellus näkyy Fabric-portaalissa rooli- tai käyttöoikeusmäärityksessä. Lisätietoja käyttäjätietojen tuesta.
Palvelun päänimi tarvitsee käyttöoikeuden sekä GraphQL-ohjelmointirajapintaan että tietolähteeseen, tarkemmin Sanottuna Suorita käyttöoikeus GraphQL-ohjelmointirajapintaan ja luku- tai kirjoitusoikeudet, joita tarvitaan valitsemassasi tietolähteessä vastaavasti. Avaa työtila Fabric-portaalissa ja valitse kolme pistettä ohjelmointirajapinnan vierestä. Valitse ohjelmointirajapinnan käyttöoikeuksien hallinta ja sitten Lisää käyttäjä. Lisää sovellus ja valitse Suorita kyselyt ja mutaatiot, jolloin saat tarvittavat Suoritus-käyttöoikeudet palvelun päänimeen. Testausta varten helpoin tapa toteuttaa vaaditut käyttöoikeudet sekä ohjelmointirajapinnalle että tietolähteelle on lisätä sovellus työtilan jäseneksi, jolla on osallistujarooli, jossa sekä GraphQL-ohjelmointirajapinta että tietolähdekohteet sijaitsevat.
Tärkeä
Kun määrität ohjelmointirajapinnan yhteysasetusta, varmista, että ohjelmointirajapinta on määritetty käyttämään kertakirjautumista (SSO). Tällä hetkellä palvelun päänimet eivät tue tallennettuja tunnistetietoja. Lisätietoja on artikkelissa Ohjelmointirajapinnan luominen GraphQL:lle Fabricissa ja tietojen lisääminen
Koska palvelun päänimi vaatii joko varmenteen tai asiakassalaisuuden, Microsoftin todentamiskirjasto (MSAL) ei tue sitä yhden sivun sovelluksissa (SPA: t), kuten edellisessä vaiheessa luomamme React-sovellus. Voit hyödyntää taustapalvelua, joka on suojattu oikein määritellyllä valtuutuslogiikalla tarpeidesi ja käyttötapausten mukaan.
Kun palvelun päänimi on määritetty käyttämään ohjelmointirajapintaa, voit testata sitä paikallisesti käyttämällä yksinkertaista Node.JS paikallisessa tietokoneessa:
const { ClientSecretCredential } = require('@azure/identity');
// Define your Microsoft Entra ID credentials
const tenantId = "<YOUR_TENANT_ID>";
const clientId = "<YOUR_CLIENT_ID>";
const clientSecret = "<YOUR_CLIENT_SECRET>"; // Service principal secret value
const scope = "https://api.fabric.microsoft.com/.default"; // The scope of the token to access Fabric
// Create a credential object with service principal details
const credential = new ClientSecretCredential(tenantId, clientId, clientSecret);
// Function to retrieve the token
async function getToken() {
try {
// Get the token for the specified scope
const tokenResponse = await credential.getToken(scope);
console.log("Access Token:", tokenResponse.token);
} catch (err) {
console.error("Error retrieving token:", err.message);
}
}
Kun olet asentanut riippuvuudet (@azure/identity
) valitsemaasi Node.JS paketinhallintaan, muokannut tiedostoa tarvittavilla tiedoilla, tallentanut ja suorittanut sen (node <filename.js>
), voit noutaa tunnuksen Microsoft Entrasta.
Tunnuksen avulla voidaan käynnistää GraphQL-ohjelmointirajapinta PowerShellin avulla korvaamalla tarvittavat tiedot juuri noutamallasi tunnuuksella, suoritettavalla GraphQL-kyselyllä ja GraphQL-ohjelmointirajapinnan päätepisteellä:
$headers = @{
Authorization = "Bearer <YOUR_TOKEN>"
'Content-Type' = 'application/json'
}
$body = @{
query = @"
<YOUR_GRAPHQL_QUERY>
"@
}
# Make the POST request to the GraphQL API
$response = Invoke-RestMethod -Uri "<YOUR_GRAPHQL_API_ENDPOINT>" -Method POST -Headers $headers -Body ($body | ConvertTo-Json)
# Output the response
$response | ConvertTo-Json -Depth 10
Voit myös käyttää cURL:ää saman tuloksen saavuttamiseksi:
curl -X POST <YOUR_GRAPHQL_API_ENDPOINT> \
-H "Authorization: <YOUR_TOKEN>" \
-H "Content-Type: application/json" \
-d '{"query": "<YOUR_GRAPHQL_QUERY(in a single line)>"}'
Paikallisessa testauksessa Node.JS koodia voidaan hieman muokata lisäriippuvuudella (axios
), jotta se voi noutaa tunnuksen ja käynnistää ohjelmointirajapinnan yksittäisessä suorituksessa:
const { ClientSecretCredential } = require('@azure/identity');
const axios = require('axios');
// Microsoft Entra ID credentials
const tenantId = "<YOUR_TENANT_ID>";
const clientId = "<YOUR_CLIENT_ID>";
const clientSecret = "<YOUR_CLIENT_SECRET>"; // Service principal secret value
// GraphQL API details
const graphqlApiUrl = "YOUR_GRAPHQL_API_ENDPOINT>";
const scope = "https://api.fabric.microsoft.com/.default"; // The scope to request the token for
// The GraphQL query
const graphqlQuery = {
query: `
<YOUR_GRAPHQL_QUERY>
`
};
// Function to retrieve a token and call the GraphQL API
async function fetchGraphQLData() {
try {
// Step 1: Retrieve token using the ClientSecretCredential
const credential = new ClientSecretCredential(tenantId, clientId, clientSecret);
const tokenResponse = await credential.getToken(scope);
const accessToken = tokenResponse.token;
console.log("Access token retrieved!");
// Step 2: Use the token to make a POST request to the GraphQL API
const response = await axios.post(
graphqlApiUrl,
graphqlQuery,
{
headers: {
'Authorization': `Bearer ${accessToken}`,
'Content-Type': 'application/json'
}
}
);
// Step 3: Output the GraphQL response data
console.log("GraphQL API response:", JSON.stringify(response.data));
} catch (err) {
console.error("Error:", err.message);
}
}
// Execute the function
fetchGraphQLData();
Muut kielet
Etsi C#, Python ja muita kielimalleja, joiden avulla voit muodostaa yhteyden GraphQL-ohjelmointirajapintaasi , Microsoft Fabric Samples GitHub -säilöstä.