Öğretici: Azure Static Web Apps'te Azure SQL veritabanı bağlantısı ekleme (önizleme)
Bu öğreticide, bir Azure SQL 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 REST veya GraphQL istekleri yapabilirsiniz.
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 Azure SQL'in nasıl kullanılacağı gösterilmektedir. Başka bir veritabanı kullanmak isterseniz Azure Cosmos DB, MySQL veya PostgreSQL öğreticilerine bakın.
Bu öğreticide aşağıdakilerin nasıl yapılacağını öğreneceksiniz:
- Azure SQL 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 Azure SQL veritabanınız ve statik web uygulamanız olması gerekir.
Kaynak | Açıklama |
---|---|
Azure SQL Veritabanı | Henüz bir veritabanınız yoksa, tek veritabanı oluşturma kılavuzundaki adımları izleyin. |
Mevcut statik web uygulaması | Henüz yoksa, başlangıç kılavuzundaki adımları izleyin. |
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 Azure SQL Server'ınıza gidin.
Güvenlik bölümünde Ağ'ı seçin.
Genel erişim sekmesinin altında, Genel ağ erişimi'nin yanındaki Seçili ağlar'ı seçin.
Güvenlik duvarı kuralları bölümünde İstemcinizi ekleyin IPv4 adresi düğmesini seçin. Bu adım, bu veritabanını yerel geliştirmeniz için kullanabilmenizi sağlar.
Özel Durumlar bölümünde Azure hizmetlerinin ve kaynaklarının bu sunucuya erişmesine izin ver onay kutusunu seçin. Bu adım, dağıtılan Statik Web Uygulamaları kaynağınızın veritabanınıza erişmesini sağlar.
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 Azure SQL Server'ınıza gidin.
Ayarlar bölümünde SQL veritabanları'nı seçin.
Bu öğretici için oluşturduğunuz SQL veritabanını seçin.
Ayarlar bölümünde Bağlantı dizeleri'ni seçin
ADO.NET (SQL kimlik doğrulaması) kutusundan bağlantı dizesi kopyalayın ve bir metin düzenleyicisinde bir kenara bırakın.
bağlantı dizesi yer tutucuyu {your_password}
parolanızla değiştirdiğinden emin olun.
Örnek veri oluşturma
Örnek bir tablo oluşturun ve öğreticiyle eşleşecek örnek verilerle bu tabloyu dağıtın.
Sol gezinti penceresinde Sorgu düzenleyicisi'ni seçin.
Entra Id hesabınızla veya sunucunun kullanıcı adı ve parolası ile sunucuda oturum açın.
adlı
MyTestPersonTable
yeni bir tablo oluşturmak için aşağıdaki betiği çalıştırın.CREATE TABLE [dbo].[MyTestPersonTable] ( [Id] INT IDENTITY (1, 1) NOT NULL, [Name] VARCHAR (25) NULL, PRIMARY KEY (Id) );
MyTestPersonTable tablosuna veri eklemek için aşağıdaki betiği çalıştırın.
INSERT INTO [dbo].[MyTestPersonTable] (Name) VALUES ('Sunny'); INSERT INTO [dbo].[MyTestPersonTable] (Name) VALUES ('Dheeraj');
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 mssql
init
komutu swa-db-connections klasöründe staticwebapp.database.config.json dosyasını oluşturur.Bu örneği, oluşturduğunuz staticwebapp.database.config.json dosyaya yapıştırın.
{
"$schema": "https://github.com/Azure/data-api-builder/releases/latest/download/dab.draft.schema.json",
"data-source": {
"database-type": "mssql",
"options": {
"set-session-context": false
},
"connection-string": "@env('DATABASE_CONNECTION_STRING')"
},
"runtime": {
"rest": {
"enabled": true,
"path": "/rest"
},
"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": "dbo.MyTestPersonTable",
"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ı | REST uç noktası üzerinden /data-api/rest kullanılabilirken GraphQL uç noktası bu yapılandırma dosyasında yapılandırıldığı gibi üzerinden /data-api/graphql kullanılabilir. REST ve GraphQL yollarını 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 | REST API'deki yollar aracılığıyla veya GraphQL şemasındaki türler olarak kullanıma sunulan varlıkları 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.
Veritabanı yapılandırmasıyla statik web uygulamasını başlatın.
swa start --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/rest/<ENTITY_NAME>
nokta , PUT
ve POST
kabul eder GET
ve DELETE
veritabanındaki verileri işlemeyi istemektedir.
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 endpoint = '/data-api/rest/Person';
const response = await fetch(endpoint);
const data = await response.json();
console.table(data.value);
}
Bu örnekte:
- API için
fetch
varsayılan istek fiiliniGET
kullanır. - Yanıt yükündeki veriler özelliğinde
value
bulunur.
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.
Kimlik | 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 endpoint = `/data-api/rest/Person/Id`;
const response = await fetch(`${endpoint}/${id}`);
const result = await response.json();
console.table(result.value);
}
Bu örnekte:
- Uç nokta ile
/person/Id
son eklenmiştir. - Kimlik değeri uç nokta konumunun sonuna eklenir.
- Yanıt yükündeki veriler özelliğinde
value
bulunur.
async function get() {
const id = 1;
const gql = `
query getById($id: Int!) {
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.
Kimlik | Veri Akışı Adı |
---|---|
1 | Güneşli |
Güncelleştir
index.html etiketleri arasına script
aşağıdaki kodu ekleyin.
Statik Web Uygulamaları hem hem PATCH
de fiillerini PUT
destekler. İstek PUT
kaydın tamamını güncelleştirirken PATCH
kısmi bir güncelleştirme yapar.
async function update() {
const id = 1;
const data = {
Name: "Molly"
};
const endpoint = '/data-api/rest/Person/Id';
const response = await fetch(`${endpoint}/${id}`, {
method: "PUT",
headers: { "Content-Type": "application/json" },
body: JSON.stringify(data)
});
const result = await response.json();
console.table(result.value);
}
Bu örnekte:
- Uç nokta ile
/person/Id/
son eklenmiştir. - Kimlik değeri uç nokta konumunun sonuna eklenir.
- REST fiili, veritabanı kaydını güncelleştirmektir
PUT
. - Yanıt yükündeki veriler özelliğinde
value
bulunur.
async function update() {
const id = 1;
const data = {
Name: "Molly"
};
const gql = `
mutation update($id: Int!, $item: UpdatePersonInput!) {
updatePerson(Id: $id, item: $item) {
Id
Name
}
}`;
const query = {
query: gql,
variables: {
id: 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.
Kimlik | Veri Akışı Adı |
---|---|
1 | Molly |
Oluşturma
index.html etiketleri arasına script
aşağıdaki kodu ekleyin.
async function create() {
const data = {
Name: "Pedro"
};
const endpoint = `/data-api/rest/Person/`;
const response = await fetch(endpoint, {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify(data)
});
const result = await response.json();
console.table(result.value);
}
Bu örnekte:
- Uç nokta ile
/person/
son eklenmiştir. - REST fiili, veritabanı kaydı eklemektir
POST
. - Yanıt yükündeki veriler özelliğinde
value
bulunur.
async function create() {
const data = {
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.
Kimlik | Veri Akışı Adı |
---|---|
3 | Pedro |
Sil
index.html etiketleri arasına script
aşağıdaki kodu ekleyin.
async function del() {
const id = 3;
const endpoint = '/data-api/rest/Person/Id';
const response = await fetch(`${endpoint}/${id}`, {
method: "DELETE"
});
if(response.ok) {
console.log(`Record deleted: ${ id }`)
} else {
console.log(response);
}
}
Bu örnekte:
- Uç nokta ile
/person/Id/
son eklenmiştir. - Kimlik değeri uç nokta konumunun sonuna eklenir.
- REST fiili, veritabanı kaydını kaldırmaktır
DELETE
. - Silme işlemi başarılı olursa yanıt yükü
ok
özelliği olurtrue
.
async function del() {
const id = 3;
const gql = `
mutation del($id: Int!) {
deletePerson(Id: $id) {
Id
}
}`;
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.log(`Record deleted: ${ result.data.deletePerson.Id }`);
}
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: 3
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.
İzlemek için dosya değişikliklerini ekleyin.
git add .
Yapılandırma değişikliklerini işleme.
git commit -am "Add database configuration"
Değişikliklerinizi sunucuya gönderme.
git push origin main
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. Kaynak Grubu Veritabanınız için bir kaynak grubu seçin veya oluşturun. Kaynak Adı İstediğiniz veritabanını içeren veritabanı sunucusu adını 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'ni seçin ve Azure SQL kullanıcı adını ve parolasını girin. 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ı
MyTestPersonTable
tabloyu silin.