Oktatóanyag: Azure Cosmos DB-adatbázis-kapcsolat hozzáadása az Azure Static Web Appsben (előzetes verzió)
Ebben az oktatóanyagban megtudhatja, hogyan csatlakoztathat egy Azure Cosmos DB for NoSQL-adatbázist a statikus webalkalmazáshoz. A konfigurálást követően GraphQL-kéréseket intézhet a beépített /data-api
végponthoz, hogy háttérkód írása nélkül manipulálja az adatokat.
Az egyszerűség kedvéért ez az oktatóanyag bemutatja, hogyan használhat azure-adatbázist helyi fejlesztési célokra, de helyi adatbázis-kiszolgálót is használhat a helyi fejlesztési igényekhez.
Feljegyzés
Ez az oktatóanyag bemutatja, hogyan használható az Azure Cosmos DB for NoSQL. Ha másik adatbázist szeretne használni, tekintse meg az Azure SQL, a MySQL vagy a PostgreSQL oktatóanyagait.
Eben az oktatóanyagban az alábbiakkal fog megismerkedni:
- Azure Cosmos DB for NoSQL-adatbázis csatolása a statikus webalkalmazáshoz
- Adatok létrehozása, olvasása, frissítése és törlése
Előfeltételek
Az oktatóanyag elvégzéséhez rendelkeznie kell egy meglévő Azure Cosmos DB for NoSQL-adatbázissal és statikus webalkalmazással.
Erőforrás | Leírás |
---|---|
Azure Cosmos DB for NoSQL Database | Ha még nem rendelkezik ilyen adatbázissal, kövesse az Azure Cosmos DB-adatbázis létrehozása című útmutató lépéseit. |
Meglévő statikus webalkalmazás | Ha még nem rendelkezik ilyen webalkalmazással, kövesse az első lépések útmutatójának lépéseit a No Framework statikus webalkalmazás létrehozásához. |
Először konfigurálja az adatbázist az Azure Static Web Apps adatbázis-kapcsolati funkciójának használatához.
Adatbázis-kapcsolat konfigurálása
Az Adatbázis-kapcsolatok működéséhez az Azure Static Web Appsnek hálózati hozzáféréssel kell rendelkeznie az adatbázishoz. Emellett az Azure-adatbázis helyi fejlesztéshez való használatához konfigurálnia kell az adatbázist, hogy engedélyezze a saját IP-címéről érkező kéréseket.
Nyissa meg Az Azure Cosmos DB for NoSQL-fiókját az Azure Portalon.
A Beállítások szakaszban válassza a Hálózatkezelés elemet.
A Nyilvános hozzáférés szakaszban válassza a Minden hálózat lehetőséget. Ez a művelet lehetővé teszi a felhőalapú adatbázis helyi fejlesztéshez való használatát, hogy az üzembe helyezett Static Web Apps-erőforrás hozzáférhessen az adatbázishoz, és hogy lekérdezhesse az adatbázist a portálról.
Válassza a Mentés lehetőséget.
Adatbázis-kapcsolati sztring lekérése helyi fejlesztéshez
Az Azure-adatbázis helyi fejlesztéshez való használatához le kell kérnie az adatbázis kapcsolati sztring. Ezt a lépést kihagyhatja, ha fejlesztési célokra helyi adatbázist kíván használni.
Nyissa meg Az Azure Cosmos DB for NoSQL-fiókját az Azure Portalon.
A Beállítások szakaszban válassza a Kulcsok lehetőséget.
Az ELSŐDLEGES KAPCSOLAT SZTRING mezőjéből másolja ki a kapcsolati sztring, és tegye félre egy szövegszerkesztőben.
Mintaadatok létrehozása
Hozzon létre egy mintatáblát, és az oktatóanyagnak megfelelő mintaadatokkal szórja be.
A bal oldali navigációs ablakban válassza az Adatkezelő lehetőséget.
Válassza az Új tároló lehetőséget. Adja meg az adatbázis-azonosítót értékként
Create new
, majd adja megMyTestPersonDatabase
értékként.Adja meg a következő tárolóazonosítóját
MyTestPersonContainer
: .Adjon meg egy partíciókulcsot
id
(ez az érték előtaggal van elnevezett/
).Kattintson az OK gombra.
Válassza ki a MyTestPersonContainer tárolót.
Jelölje ki az elemeket.
Válassza az Új elem lehetőséget, és adja meg a következő értéket:
{ "id": "1", "Name": "Sunny" }
A statikus webalkalmazás konfigurálása
Az oktatóanyag további része a statikus webalkalmazás forráskódjának szerkesztésére összpontosít, hogy helyileg használhassa az adatbázis-kapcsolatokat.
Fontos
Az alábbi lépések feltételezik, hogy az első lépések útmutatójában létrehozott statikus webalkalmazással dolgozik. Ha másik projektet használ, mindenképpen módosítsa az alábbi git-parancsokat az ágneveknek megfelelően.
Váltson az
main
ágra.git checkout main
Szinkronizálja a helyi verziót a GitHubon találhatóakkal a használatával
git pull
.git pull origin main
Az adatbázis konfigurációs fájljának létrehozása
Ezután hozza létre azt a konfigurációs fájlt, amelyet a statikus webalkalmazás az adatbázishoz való kapcsolódáshoz használ.
Nyissa meg a terminált, és hozzon létre egy új változót a kapcsolati sztring tárolásához. A megadott szintaxis a használt rendszerhéj típusától függően változhat.
export DATABASE_CONNECTION_STRING='<YOUR_CONNECTION_STRING>'
Cserélje le
<YOUR_CONNECTION_STRING>
a szövegszerkesztőben félretett kapcsolati sztringértékre.Az npm használatával telepítheti vagy frissítheti a Static Web Apps parancssori felületét. Válassza ki a helyzetének leginkább megfelelő parancsot.
A telepítéshez használja a következőt
npm install
: .npm install -g @azure/static-web-apps-cli
A frissítéshez használja a következőt
npm update
: .npm update
swa db init
A parancs használatával hozzon létre egy adatbázis-konfigurációs fájlt.swa db init --database-type cosmosdb_nosql --cosmosdb_nosql-database MyTestPersonDatabase
A
init
parancs létrehozza a staticwebapp.database.config.json fájlt a swa-db-connections mappában.Illessze be ezt a mintasémát a létrehozott staticwebapp.database.schema.gql fájlba.
Mivel a Cosmos DB for NoSQL egy séma-agnosztikus adatbázis, az Azure Static Web Apps adatbázis-kapcsolatai nem tudják kinyerni az adatbázis sémáját. A staticwebapp.database.schema.gql fájl lehetővé teszi a Cosmos DB for NoSQL-adatbázis sémájának megadását a Static Web Appshez.
type Person @model { id: ID Name: String }
Illessze be ezt a mintakonfigurációt a létrehozott fájlba staticwebapp.database.config.json . Figyelje meg, hogy a Cosmos DB for NoSQL több lehetőséget is kínál az objektumban a
data-source
Cosmos DB-adatbázis és az adatbázis-kapcsolatokhoz szükséges sémafájl jelzésére az adatbázis sémájának megértéséhez.
{
"$schema": "https://github.com/Azure/data-api-builder/releases/latest/download/dab.draft.schema.json",
"data-source": {
"database-type": "cosmosdb_nosql",
"options": {
"database": "MyTestPersonDatabase",
"schema": "staticwebapp.database.schema.gql"
},
"connection-string": "@env('DATABASE_CONNECTION_STRING')"
},
"runtime": {
"graphql": {
"allow-introspection": true,
"enabled": true,
"path": "/graphql"
},
"host": {
"mode": "production",
"cors": {
"origins": ["http://localhost:4280"],
"allow-credentials": false
},
"authentication": {
"provider": "StaticWebApps"
}
}
},
"entities": {
"Person": {
"source": "MyTestPersonContainer",
"permissions": [
{
"actions": ["*"],
"role": "anonymous"
}
]
}
}
}
Mielőtt továbblépne a következő lépésre, tekintse át az alábbi táblázatot, amely a konfigurációs fájl különböző aspektusait ismerteti. A konfigurációs fájl és a funkciók, például a kapcsolatok és az elemszintű biztonságra vonatkozó szabályzatok teljes dokumentációját a Data API Builder dokumentációjában találja.
Szolgáltatás | Magyarázat |
---|---|
Adatbázis-kapcsolat | A fejlesztés során a futtatókörnyezet beolvassa a kapcsolati sztring a konfigurációs fájlban lévő kapcsolati sztring értékéből. Bár a kapcsolati sztring közvetlenül a konfigurációs fájlban is megadhatja, ajánlott az kapcsolati sztring helyi környezeti változóban tárolni. A konfigurációs fájl környezeti változó értékeire a @env('DATABASE_CONNECTION_STRING') jelölésen keresztül hivatkozhat. A kapcsolati sztring értékét felülírja a Static Web Apps az üzembe helyezett helyhez az adatbázis csatlakoztatásakor gyűjtött adatokkal. |
API-végpont | A GraphQL-végpont a konfigurációs fájlban konfigurált módon érhető el /data-api/graphql . Konfigurálhatja a GraphQL-elérési utat, de az /data-api előtag nem konfigurálható. |
API-biztonság | A runtime.host.cors beállítások lehetővé teszik az API-ra irányuló kéréseket kezdeményező engedélyezett forrásokat. Ebben az esetben a konfiguráció egy fejlesztési környezetet tükröz, és engedélyezi a helylistát http://localhost:4280 . |
Entitásmodell | Az útvonalakon keresztül közzétett entitásokat típusokként definiálja a GraphQL-sémában. Ebben az esetben a Személy név a végpont számára elérhető név, míg entities.<NAME>.source az adatbázisséma és a táblaleképezés. Figyelje meg, hogy az API-végpont nevének nem kell megegyeznie a tábla nevével. |
Entitás biztonsága | A tömbben entity.<NAME>.permissions felsorolt engedélyszabályok szabályozzák az entitások engedélyezési beállításait. A szerepkörökkel rendelkező entitásokat ugyanúgy védheti, mint a szerepkörökkel rendelkező útvonalakat. |
Feljegyzés
A konfigurációs fájl connection-string
és host.mode
graphql.allow-introspection
a tulajdonságok felülíródnak a webhely üzembe helyezésekor. A kapcsolati sztring felülírja az adatbázis statikus Web Apps-erőforráshoz való csatlakoztatásakor gyűjtött hitelesítési adatokkal. A host.mode
tulajdonság értéke production
, a értéke false
pedig a graphql.allow-introspection
következő. Ezek a felülbírálások konzisztenciát biztosítanak a konfigurációs fájlokban a fejlesztési és éles számítási feladatok során, miközben biztosítják, hogy a Static Web Apps-erőforrás engedélyezett adatbázis-kapcsolatokkal biztonságos és éles üzemre kész legyen.
Az adatbázishoz való csatlakozáshoz konfigurált statikus webalkalmazással most már ellenőrizheti a kapcsolatot.
Kezdőlap frissítése
Cserélje le a korrektúrát a body
index.html fájl címkéi között a következő HTML-fájlra.
<h1>Static Web Apps Database Connections</h1>
<blockquote>
Open the console in the browser developer tools to see the API responses.
</blockquote>
<div>
<button id="list" onclick="list()">List</button>
<button id="get" onclick="get()">Get</button>
<button id="update" onclick="update()">Update</button>
<button id="create" onclick="create()">Create</button>
<button id="delete" onclick="del()">Delete</button>
</div>
<script>
// add JavaScript here
</script>
Az alkalmazás helyi indítása
Most már futtathatja a webhelyét, és közvetlenül kezelheti az adatbázisban lévő adatokat.
Fontos
A Static Web Apps cli-ből származó központi telepítések biztonságának javítása érdekében egy olyan kompatibilitástörő változás jelent meg, amely megköveteli, hogy 2025. január 15-ig frissítsen a Static Web Apps CLI legújabb (2.0.2) verziójára.
Az npm használatával telepítheti vagy frissítheti a Static Web Apps parancssori felületét. Válassza ki a helyzetének leginkább megfelelő parancsot.
A telepítéshez használja a következőt
npm install
: .npm install -g @azure/static-web-apps-cli
A frissítéshez használja a következőt
npm update
: .npm update
Indítsa el a statikus webalkalmazást az adatbázis konfigurációjával.
swa start ./src --data-api-location swa-db-connections
A parancssori felület elindítása után az adatbázist a staticwebapp.database.config.json fájlban meghatározott végpontokon keresztül érheti el.
A http://localhost:4280/data-api/graphql
végpont elfogadja a GraphQL-lekérdezéseket és a mutációkat.
Adatok módosítása
Az alábbi keretrendszer-agnosztikus parancsok bemutatják, hogyan végezhet teljes CRUD-műveleteket az adatbázison.
Az egyes függvények kimenete a böngésző konzolablakában jelenik meg.
Nyissa meg a fejlesztői eszközöket a CMD/CTRL SHIFT + I billentyűkombináció + lenyomásával, és válassza a Konzol lapot.
Az összes elem listázása
Adja hozzá a következő kódot a címkék közé a script
index.html.
async function list() {
const query = `
{
people {
items {
id
Name
}
}
}`;
const endpoint = "/data-api/graphql";
const response = await fetch(endpoint, {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ query: query })
});
const result = await response.json();
console.table(result.data.people.items);
}
Ebben a példában:
- A GraphQL-lekérdezés kiválasztja az
Id
adatbázis mezőit ésName
mezőit. - A kiszolgálónak átadott kéréshez hasznos adatra van szükség, amelyben a
query
tulajdonság tartalmazza a lekérdezésdefiníciót. - A válasz hasznos adatai a
data.people.items
tulajdonságban találhatók.
Frissítse a lapot, és válassza a Lista gombot.
A böngésző konzolablakában megjelenik egy tábla, amely az adatbázis összes rekordját felsorolja.
id | Név |
---|---|
0 | Napfényes |
2 | Dheeraj |
Íme egy képernyőkép arról, hogy milyennek kell lennie a böngészőben.
Lekérés azonosító alapján
Adja hozzá a következő kódot a címkék közé a script
index.html.
async function get() {
const id = '1';
const gql = `
query getById($id: ID!) {
person_by_pk(id: $id) {
id
Name
}
}`;
const query = {
query: gql,
variables: {
id: id,
},
};
const endpoint = "/data-api/graphql";
const response = await fetch(endpoint, {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify(query),
});
const result = await response.json();
console.table(result.data.person_by_pk);
}
Ebben a példában:
- A GraphQL-lekérdezés kiválasztja az
id
adatbázis mezőit ésName
mezőit. - A kiszolgálónak átadott kéréshez hasznos adatra van szükség, amelyben a
query
tulajdonság tartalmazza a lekérdezésdefiníciót. - A válasz hasznos adatai a
data.person_by_pk
tulajdonságban találhatók.
Frissítse a lapot, és válassza a Beolvasás gombot.
A böngésző konzolablakában megjelenik egy tábla, amely az adatbázisból kért egyetlen rekordot tartalmazza.
id | Név |
---|---|
0 | Napfényes |
Frissítés
Adja hozzá a következő kódot a címkék közé a script
index.html.
async function update() {
const id = '1';
const data = {
id: id,
Name: "Molly"
};
const gql = `
mutation update($id: ID!, $_partitionKeyValue: String!, $item: UpdatePersonInput!) {
updatePerson(id: $id, _partitionKeyValue: $_partitionKeyValue, item: $item) {
id
Name
}
}`;
const query = {
query: gql,
variables: {
id: id,
_partitionKeyValue: id,
item: data
}
};
const endpoint = "/data-api/graphql";
const res = await fetch(endpoint, {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify(query)
});
const result = await res.json();
console.table(result.data.updatePerson);
}
Ebben a példában:
- A GraphQL-lekérdezés kiválasztja az
id
adatbázis mezőit ésName
mezőit. - Az
query
objektum a GraphQL-lekérdezést tárolja aquery
tulajdonságban. - A GraphQL függvény argumentumértékei a
query.variables
tulajdonságon keresztül lesznek átadva. - A kiszolgálónak átadott kéréshez hasznos adatra van szükség, amelyben a
query
tulajdonság tartalmazza a lekérdezésdefiníciót. - A válasz hasznos adatai a
data.updatePerson
tulajdonságban találhatók.
Frissítse a lapot, és válassza a Frissítés gombot.
A böngésző konzolablakában megjelenik egy táblázat, amelyen a frissített adatok láthatók.
id | Név |
---|---|
0 | Molly |
Létrehozás
Adja hozzá a következő kódot a címkék közé a script
index.html.
async function create() {
const data = {
id: "3",
Name: "Pedro"
};
const gql = `
mutation create($item: CreatePersonInput!) {
createPerson(item: $item) {
id
Name
}
}`;
const query = {
query: gql,
variables: {
item: data
}
};
const endpoint = "/data-api/graphql";
const result = await fetch(endpoint, {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify(query)
});
const response = await result.json();
console.table(response.data.createPerson);
}
Ebben a példában:
- A GraphQL-lekérdezés kiválasztja az
id
adatbázis mezőit ésName
mezőit. - Az
query
objektum a GraphQL-lekérdezést tárolja aquery
tulajdonságban. - A GraphQL függvény argumentumértékei a
query.variables
tulajdonságon keresztül lesznek átadva. - A kiszolgálónak átadott kéréshez hasznos adatra van szükség, amelyben a
query
tulajdonság tartalmazza a lekérdezésdefiníciót. - A válasz hasznos adatai a
data.updatePerson
tulajdonságban találhatók.
Frissítse a lapot, és válassza a Létrehozás gombot.
A böngésző konzolablakában megjelenik egy tábla, amelyen az új rekord látható az adatbázisban.
id | Név |
---|---|
3 | Pedro |
Törlés
Adja hozzá a következő kódot a címkék közé a script
index.html.
async function del() {
const id = '3';
const gql = `
mutation del($id: ID!, $_partitionKeyValue: String!) {
deletePerson(id: $id, _partitionKeyValue: $_partitionKeyValue) {
id
}
}`;
const query = {
query: gql,
variables: {
id: id,
_partitionKeyValue: id
}
};
const endpoint = "/data-api/graphql";
const response = await fetch(endpoint, {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify(query)
});
const result = await response.json();
console.log(`Record deleted: ${ JSON.stringify(result.data) }`);
}
Ebben a példában:
- A GraphQL-lekérdezés kiválasztja a
Id
mezőt az adatbázisból. - Az
query
objektum a GraphQL-lekérdezést tárolja aquery
tulajdonságban. - A GraphQL függvény argumentumértékei a
query.variables
tulajdonságon keresztül lesznek átadva. - A kiszolgálónak átadott kéréshez hasznos adatra van szükség, amelyben a
query
tulajdonság tartalmazza a lekérdezésdefiníciót. - A válasz hasznos adatai a
data.deletePerson
tulajdonságban találhatók.
Frissítse a lapot, és válassza a Törlés gombot.
A böngésző konzolablakában megjelenik egy tábla, amely a törlési kérelem válaszát mutatja.
Törölt rekord: 2
Most, hogy helyileg dolgozott a webhelyével, üzembe helyezheti az Azure-ban.
A webhely üzembe helyezése
A webhely éles környezetben való üzembe helyezéséhez csak véglegesítenie kell a konfigurációs fájlt, és le kell küldenie a módosításokat a kiszolgálóra.
Véglegesítse a konfiguráció módosításait.
git commit -am "Add database configuration"
Küldje el a módosításokat a kiszolgálóra.
git push origin main
Várjon, amíg a webalkalmazás létrejön.
Nyissa meg a statikus webalkalmazást a böngészőben.
A Lista gombra kattintva listázhatja az összes elemet.
A kimenetnek a képernyőképen láthatóhoz hasonlónak kell lennie.
Az adatbázis csatlakoztatása a statikus webalkalmazáshoz
Az alábbi lépésekkel kapcsolatot hozhat létre a webhely Statikus Web Apps-példánya és az adatbázis között.
Nyissa meg statikus webalkalmazását az Azure Portalon.
A Beállítások szakaszban válassza az Adatbázis-kapcsolat lehetőséget.
Az Éles környezet szakaszban válassza a Meglévő adatbázis csatolása hivatkozást.
A Meglévő adatbázis csatolása ablakban adja meg a következő értékeket:
Tulajdonság Érték Adatbázis típusa Válassza ki az adatbázis típusát a legördülő listából. Előfizetés Válassza ki azure-előfizetését a legördülő listából. Adatbázis neve Válassza ki a statikus webalkalmazáshoz csatolni kívánt adatbázis nevét. Hitelesítés típusa Válassza a Kapcsolati sztring lehetőséget. Kattintson az OK gombra.
Ellenőrizze, hogy az adatbázis csatlakoztatva van-e a Static Web Apps-erőforráshoz
Miután csatlakoztatta az adatbázist a statikus webalkalmazáshoz, és a webhely elkészült, az alábbi lépésekkel ellenőrizze az adatbázis-kapcsolatot.
Nyissa meg statikus webalkalmazását az Azure Portalon.
Az Essentials szakaszban válassza ki a Static Web Apps-erőforrás URL-címét a statikus webalkalmazáshoz való navigáláshoz.
A Lista gombra kattintva listázhatja az összes elemet.
A kimenetnek a képernyőképen láthatóhoz hasonlónak kell lennie.
Az erőforrások eltávolítása
Ha el szeretné távolítani az oktatóanyag során létrehozott erőforrásokat, le kell választania az adatbázist, és el kell távolítania a mintaadatokat.
Adatbázis leválasztása: Nyissa meg a statikus webalkalmazást az Azure Portalon. A Beállítások szakaszban válassza az Adatbázis-kapcsolat lehetőséget. A csatolt adatbázis mellett válassza a Részletek megtekintése lehetőséget. Az Adatbázis kapcsolat részletei ablakban válassza a Leválasztás gombot.
Mintaadatok eltávolítása: Az adatbázisban törölje a névvel ellátott
MyTestPersonContainer
táblát.