Öğretici: Azure Static Web Apps'te Azure Cosmos DB veritabanı bağlantısı ekleme (önizleme)
Bu öğreticide, NoSQL için Azure Cosmos DB veritabanını statik web uygulamanıza bağlamayı öğreneceksiniz. Yapılandırıldıktan sonra arka uç kodu yazmak zorunda kalmadan verileri işlemek için yerleşik /data-api
uç noktaya GraphQL isteklerinde bulunabilirsiniz.
Kolaylık olması açısından bu öğreticide yerel geliştirme amacıyla Azure veritabanının nasıl kullanılacağı gösterilmektedir, ancak yerel geliştirme gereksinimleriniz için yerel bir veritabanı sunucusu da kullanabilirsiniz.
Not
Bu öğreticide NoSQL için Azure Cosmos DB'nin nasıl kullanılacağı gösterilmektedir. Başka bir veritabanı kullanmak isterseniz Azure SQL, MySQL veya PostgreSQL öğreticilerine bakın.
Bu öğreticide aşağıdakilerin nasıl yapılacağını öğreneceksiniz:
- NoSQL için Azure Cosmos DB veritabanını statik web uygulamanıza bağlama
- Veri oluşturma, okuma, güncelleştirme ve silme
Önkoşullar
Bu öğreticiyi tamamlamak için mevcut bir NoSQL için Azure Cosmos DB veritabanınız ve statik web uygulamanız olması gerekir.
Kaynak | Açıklama |
---|---|
Hayır için Azure Cosmos DB SQL Veritabanı | Henüz bir veritabanınız yoksa Azure Cosmos DB veritabanı oluşturma kılavuzundaki adımları izleyin. |
Mevcut statik web uygulaması | Henüz bir uygulamanız yoksa, Başlangıç kılavuzundaki adımları izleyerek Çerçeve Yok statik web uygulaması oluşturun. |
Veritabanınızı Azure Static Web Apps veritabanı bağlantı özelliğiyle çalışacak şekilde yapılandırarak başlayın.
Veritabanı bağlantısını yapılandırma
Veritabanı bağlantılarının çalışması için Azure Static Web Apps'in veritabanınıza ağ erişimi olmalıdır. Ayrıca, yerel geliştirme için bir Azure veritabanı kullanmak için veritabanınızı kendi IP adresinizden gelen isteklere izin verecek şekilde yapılandırmanız gerekir.
Azure portalında NoSQL için Azure Cosmos DB hesabınıza gidin.
Ayarlar bölümünün altında, Ağ seçeneğini belirleyin.
Genel erişim bölümünde Tüm ağlar'ı seçin. Bu eylem, yerel geliştirme için bulut veritabanını kullanmanıza, dağıtılan Statik Web Apps kaynağınızın veritabanınıza erişmesine ve veritabanınızı portaldan sorgulamanıza olanak tanır.
Kaydet'i seçin.
Yerel geliştirme için veritabanı bağlantı dizesi alma
Yerel geliştirme için Azure veritabanınızı kullanmak için veritabanınızın bağlantı dizesi almanız gerekir. Geliştirme amacıyla yerel veritabanı kullanmayı planlıyorsanız bu adımı atlayabilirsiniz.
Azure portalında NoSQL için Azure Cosmos DB hesabınıza gidin.
Ayarlar bölümünde Anahtarlar'ı seçin.
BİRİnCİl BAĞLANTI DIZESİ kutusundan bağlantı dizesi kopyalayın ve bir metin düzenleyicisinde bir kenara bırakın.
Örnek veri oluşturma
Örnek bir tablo oluşturun ve öğreticiyle eşleşecek örnek verilerle bu tabloyu dağıtın.
Sol gezinti penceresinde Veri Gezgini'ı seçin.
Yeni Kapsayıcı'ya tıklayın. Veritabanı Kimliğini olarak
Create new
girin ve değer olarak girinMyTestPersonDatabase
.kapsayıcı kimliğini
MyTestPersonContainer
girin.bir bölüm anahtarı
id
girin (bu değer ile ön eklenmiştir/
).Tamam'ı seçin.
MyTestPersonContainer kapsayıcısını seçin.
Öğelerini seçin.
Yeni Öğe'yi seçin ve aşağıdaki değeri girin:
{ "id": "1", "Name": "Sunny" }
Statik web uygulamasını yapılandırma
Bu öğreticinin geri kalanı, veritabanı bağlantılarını yerel olarak kullanmak için statik web uygulamanızın kaynak kodunu düzenlemeye odaklanır.
Önemli
Aşağıdaki adımlarda, başlangıç kılavuzunda oluşturulan statik web uygulamasıyla çalıştığınız varsayılır. Farklı bir proje kullanıyorsanız aşağıdaki git komutlarını dal adlarınızla eşleşecek şekilde ayarladığınızdan emin olun.
Dala
main
geçin.git checkout main
kullanarak
git pull
yerel sürümünüzü GitHub'da bulunanlarla eşitleyin.git pull origin main
Veritabanı yapılandırma dosyasını oluşturma
Ardından, statik web uygulamanızın veritabanıyla arabirim oluşturmak için kullandığı yapılandırma dosyasını oluşturun.
Terminalinizi açın ve bağlantı dizesi tutmak için yeni bir değişken oluşturun. Söz dizimi, kullandığınız kabuk türüne bağlı olarak değişebilir.
export DATABASE_CONNECTION_STRING='<YOUR_CONNECTION_STRING>'
değerini bir metin düzenleyicisinde ayırdığınız bağlantı dizesi değeriyle değiştirdiğinizden
<YOUR_CONNECTION_STRING>
emin olun.Statik Web Uygulamaları CLI'sını yüklemek veya güncelleştirmek için npm kullanın. Durumunuz için en uygun komutu seçin.
Yüklemek için kullanın
npm install
.npm install -g @azure/static-web-apps-cli
Güncelleştirmek için kullanın
npm update
.npm update
swa db init
Veritabanı yapılandırma dosyası oluşturmak için komutunu kullanın.swa db init --database-type cosmosdb_nosql --cosmosdb_nosql-database MyTestPersonDatabase
init
komutu swa-db-connections klasöründe staticwebapp.database.config.json dosyasını oluşturur.Bu örnek şemayı oluşturduğunuz staticwebapp.database.schema.gql dosyasına yapıştırın.
NoSQL için Cosmos DB şemadan bağımsız bir veritabanı olduğundan Azure Static Web Apps veritabanı bağlantıları veritabanınızın şemasını ayıklayamaz. staticwebapp.database.schema.gql dosyası, Static Web Apps için NoSQL için Cosmos DB veritabanınızın şemasını belirtmenize olanak tanır.
type Person @model { id: ID Name: String }
Bu örnek yapılandırmayı oluşturduğunuz staticwebapp.database.config.json dosyaya yapıştırın. NoSQL için Cosmos DB'nin nesnesinde
data-source
Cosmos DB veritabanını ve veritabanı bağlantılarının veritabanının şemasını anlaması için gereken şema dosyasını gösteren daha fazla seçenek olduğuna dikkat edin.
{
"$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"
}
]
}
}
}
Sonraki adıma geçmeden önce, yapılandırma dosyasının farklı yönlerini açıklayan aşağıdaki tabloyu gözden geçirin. Yapılandırma dosyası ve öğe düzeyinde güvenlik için ilişkiler ve ilkeler gibi işlevlerle ilgili tam belgeler için Data API Builder belgelerine bakın.
Özellik | Açıklama |
---|---|
Veritabanı bağlantısı | Geliştirme aşamasında çalışma zamanı, yapılandırma dosyasındaki bağlantı dizesi değerinden bağlantı dizesi okur. bağlantı dizesi doğrudan yapılandırma dosyasında belirtebilirsiniz ancak en iyi yöntem bağlantı dizesi yerel bir ortam değişkeninde depolamaktır. Gösterimi aracılığıyla yapılandırma dosyasındaki ortam değişkeni değerlerine @env('DATABASE_CONNECTION_STRING') başvurabilirsiniz. bağlantı dizesi değerinin üzerine, veritabanınızı bağladığınızda toplanan bilgilerle dağıtılan site için Statik Web Uygulamaları tarafından yazılır. |
API uç noktası | GraphQL uç noktası, bu yapılandırma dosyasında yapılandırıldığı gibi aracılığıyla /data-api/graphql kullanılabilir. GraphQL yolunu yapılandırabilirsiniz, ancak /data-api ön ek yapılandırılamaz. |
API Güvenliği | Ayarlar, runtime.host.cors API'ye istekte bulunabilecek izin verilen kaynakları tanımlamanıza olanak sağlar. Bu durumda, yapılandırma bir geliştirme ortamını yansıtır ve konumu izin http://localhost:4280 verilenler listesine ekler. |
Varlık modeli | Yollar aracılığıyla sunulan varlıkları GraphQL şemasında tür olarak tanımlar. Bu durumda, Kişi adı, veritabanı şeması ve tablo eşlemesi iken entities.<NAME>.source uç noktaya gösterilen addır. API uç noktası adının tablo adıyla aynı olması gerekmeyen noktalara dikkat edin. |
Varlık güvenliği | Dizide entity.<NAME>.permissions listelenen izin kuralları, bir varlığın yetkilendirme ayarlarını denetler. Rolleri olan bir varlığın güvenliğini, rollerle yolları güvenli hale getirme yönteminizle aynı şekilde sağlayabilirsiniz. |
Not
Sitenizi dağıttığınızda yapılandırma dosyasının connection-string
, host.mode
ve graphql.allow-introspection
özelliklerinin üzerine yazılır. Veritabanınızı Statik Web Apps kaynağınıza bağladığınızda toplanan kimlik doğrulama ayrıntılarıyla bağlantı dizesi üzerine yazılır.
host.mode
özelliği olarakproduction
graphql.allow-introspection
, özelliği ise olarak false
ayarlanır. Bu geçersiz kılmalar, geliştirme ve üretim iş yükleriniz genelinde yapılandırma dosyalarınızda tutarlılık sağlarken, veritabanı bağlantıları etkinleştirilmiş Statik Web Apps kaynağınızın güvenli ve üretime hazır olmasını sağlar.
Statik web uygulaması veritabanına bağlanacak şekilde yapılandırıldığında bağlantıyı doğrulayabilirsiniz.
Giriş sayfasını güncelleştirme
index.html dosyasındaki body
etiketler arasındaki işaretlemeyi aşağıdaki HTML ile değiştirin.
<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>
Uygulamayı yerel olarak başlatma
Artık web sitenizi çalıştırabilir ve veritabanındaki verileri doğrudan işleyebilirsiniz.
Önemli
Statik Web Uygulamaları CLI'sından dağıtımların güvenliğini artırmak için, 15 Ocak 2025'e kadar Static Web Apps CLI'nın en son sürümüne (2.0.2) yükseltmenizi gerektiren bir hataya neden olan değişiklik kullanıma sunulmuştur.
Statik Web Uygulamaları CLI'sını yüklemek veya güncelleştirmek için npm kullanın. Durumunuz için en uygun komutu seçin.
Yüklemek için kullanın
npm install
.npm install -g @azure/static-web-apps-cli
Güncelleştirmek için kullanın
npm update
.npm update
Veritabanı yapılandırmasıyla statik web uygulamasını başlatın.
swa start ./src --data-api-location swa-db-connections
CLI başlatıldığından, staticwebapp.database.config.json dosyasında tanımlandığı gibi uç noktalar aracılığıyla veritabanınıza erişebilirsiniz.
Uç http://localhost:4280/data-api/graphql
nokta GraphQL sorgularını ve mutasyonlarını kabul eder.
Verileri işleme
Aşağıdaki framework-agnostic komutları veritabanınızda tam CRUD işlemlerinin nasıl yapılacağını gösterir.
Her işlevin çıkışı tarayıcının konsol penceresinde görüntülenir.
CMD/CTRL + SHIFT + I tuşlarına basarak geliştirici araçlarını açın ve Konsol sekmesini seçin.
Tüm öğeleri listeleme
index.html etiketleri arasına script
aşağıdaki kodu ekleyin.
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);
}
Bu örnekte:
- GraphQL sorgusu veritabanından
Id
veName
alanlarını seçer. - Sunucuya geçirilen istek, özelliğin
query
sorgu tanımını barındırdığı bir yük gerektirir. - Yanıt yükündeki veriler özelliğinde
data.people.items
bulunur.
Sayfayı yenileyin ve Liste düğmesini seçin.
Tarayıcının konsol penceresinde artık veritabanındaki tüm kayıtları listeleyen bir tablo görüntülenir.
id | Veri Akışı Adı |
---|---|
1 | Güneşli |
2 | Dheeraj |
İşte tarayıcınızda nasıl görünmesi gerektiğinin ekran görüntüsü.
Kimliğe göre alma
index.html etiketleri arasına script
aşağıdaki kodu ekleyin.
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);
}
Bu örnekte:
- GraphQL sorgusu veritabanından
id
veName
alanlarını seçer. - Sunucuya geçirilen istek, özelliğin
query
sorgu tanımını barındırdığı bir yük gerektirir. - Yanıt yükündeki veriler özelliğinde
data.person_by_pk
bulunur.
Sayfayı yenileyin ve Al düğmesini seçin.
Tarayıcının konsol penceresinde artık veritabanından istenen tek kaydın listelendiği bir tablo görüntülenir.
id | Veri Akışı Adı |
---|---|
1 | Güneşli |
Güncelleştir
index.html etiketleri arasına script
aşağıdaki kodu ekleyin.
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);
}
Bu örnekte:
- GraphQL sorgusu veritabanından
id
veName
alanlarını seçer. -
query
nesnesi özelliğinde GraphQL sorgusunuquery
tutar. - GraphQL işlevine bağımsız değişken değerleri özelliği aracılığıyla
query.variables
geçirilir. - Sunucuya geçirilen istek, özelliğin
query
sorgu tanımını barındırdığı bir yük gerektirir. - Yanıt yükündeki veriler özelliğinde
data.updatePerson
bulunur.
Sayfayı yenileyin ve Güncelleştir düğmesini seçin.
Tarayıcının konsol penceresinde artık güncelleştirilmiş verileri gösteren bir tablo görüntülenir.
id | Veri Akışı Adı |
---|---|
1 | Molly |
Oluşturma
index.html etiketleri arasına script
aşağıdaki kodu ekleyin.
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);
}
Bu örnekte:
- GraphQL sorgusu veritabanından
id
veName
alanlarını seçer. -
query
nesnesi özelliğinde GraphQL sorgusunuquery
tutar. - GraphQL işlevine bağımsız değişken değerleri özelliği aracılığıyla
query.variables
geçirilir. - Sunucuya geçirilen istek, özelliğin
query
sorgu tanımını barındırdığı bir yük gerektirir. - Yanıt yükündeki veriler özelliğinde
data.updatePerson
bulunur.
Sayfayı yenileyin ve Oluştur düğmesini seçin.
Tarayıcının konsol penceresinde artık veritabanındaki yeni kaydı gösteren bir tablo görüntülenir.
id | Veri Akışı Adı |
---|---|
3 | Pedro |
Sil
index.html etiketleri arasına script
aşağıdaki kodu ekleyin.
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) }`);
}
Bu örnekte:
- GraphQL sorgusu, alanı veritabanından seçer
Id
. -
query
nesnesi özelliğinde GraphQL sorgusunuquery
tutar. - GraphQL işlevine bağımsız değişken değerleri özelliği aracılığıyla
query.variables
geçirilir. - Sunucuya geçirilen istek, özelliğin
query
sorgu tanımını barındırdığı bir yük gerektirir. - Yanıt yükündeki veriler özelliğinde
data.deletePerson
bulunur.
Sayfayı yenileyin ve Sil düğmesini seçin.
Tarayıcının konsol penceresinde artık silme isteğinden gelen yanıtı gösteren bir tablo görüntülenir.
Kayıt silindi: 2
Artık sitenizle yerel olarak çalıştığınıza göre, artık bunu Azure'a dağıtabilirsiniz.
Sitenizi dağıtma
Bu siteyi üretim ortamına dağıtmak için yapılandırma dosyasını işlemeniz ve değişikliklerinizi sunucuya göndermeniz yeterlidir.
Yapılandırma değişikliklerini işleme.
git commit -am "Add database configuration"
Değişikliklerinizi sunucuya gönderme.
git push origin main
Web uygulamanızın derlanmasını bekleyin.
Tarayıcıda statik web uygulamanıza gidin.
Tüm öğeleri listelemek için Listele düğmesini seçin.
Çıktı, bu ekran görüntüsünde gösterilene benzemelidir.
Veritabanını statik web uygulamanıza bağlama
Sitenizin Statik Web Apps örneği ile veritabanınız arasında bağlantı oluşturmak için aşağıdaki adımları kullanın.
Statik web uygulamanızı Azure portalında açın.
Ayarlar bölümünde Veritabanı bağlantısı'nı seçin.
Üretim bölümünün altında Var olan veritabanını bağla bağlantısını seçin.
Var olan veritabanını bağla penceresinde aşağıdaki değerleri girin:
Özellik Değer Veritabanı Türü Açılan listeden veritabanı türünüzü seçin. Abonelik Açılan listeden Azure aboneliğinizi seçin. Veritabanı Adı Statik web uygulamanıza bağlamak istediğiniz veritabanının adını seçin. Kimlik Doğrulaması Türü Bağlantı dizesi'ne tıklayın. Tamam'ı seçin.
Veritabanınızın Statik Web Apps kaynağınıza bağlı olduğunu doğrulayın
Veritabanınızı statik web uygulamanıza bağladıktan ve sitenin oluşturulması tamamlandıktan sonra, veritabanı bağlantısını doğrulamak için aşağıdaki adımları kullanın.
Statik web uygulamanızı Azure portalında açın.
Temel Bileşenler bölümünde Statik Web Apps kaynağınızın URL'sini seçerek statik web uygulamanıza gidin.
Tüm öğeleri listelemek için Listele düğmesini seçin.
Çıktı, bu ekran görüntüsünde gösterilene benzemelidir.
Kaynakları temizleme
Bu öğretici sırasında oluşturulan kaynakları kaldırmak istiyorsanız veritabanının bağlantısını kaldırmanız ve örnek verileri kaldırmanız gerekir.
Veritabanının bağlantısını kaldırma: Statik web uygulamanızı Azure portalında açın. Ayarlar bölümünde Veritabanı bağlantısı'nı seçin. Bağlı veritabanının yanında Ayrıntıları görüntüle'yi seçin. Veritabanı bağlantısı ayrıntıları penceresinde Bağlantıyı Kaldır düğmesini seçin.
Örnek verileri kaldırma: Veritabanınızda adlı
MyTestPersonContainer
tabloyu silin.