Veri API'si oluşturucu yapılandırma şeması başvurusu
Veri API'sinin oluşturucusunun altyapısı bir yapılandırma dosyası gerektirir. Data API Builder yapılandırma dosyası, API'nizi ayarlamaya yönelik yapılandırılmış ve kapsamlı bir yaklaşım sağlar ve ortam değişkenlerinden varlığa özgü yapılandırmalara kadar her şeyi ayrıntılı olarak açıklar. JSON biçimli bu belge bir $schema
özelliğiyle başlar. Bu kurulum belgeyi doğrular.
özellikler database-type
ve connection-string
, Azure SQL Veritabanı'ndan Cosmos DB NoSQL API'sine kadar veritabanı sistemleriyle sorunsuz tümleştirme sağlar.
Yapılandırma dosyası şunlar gibi seçenekler içerebilir:
- Veritabanı hizmeti ve bağlantı bilgileri
- Genel ve çalışma zamanı yapılandırma seçenekleri
- Kullanıma sunulan varlık kümesi
- Kimlik doğrulama yöntemi
- Kimliklere erişmek için gereken güvenlik kuralları
- API ile veritabanı arasında ad eşleme kuralları
- Çıkarılabilen varlıklar arasındaki ilişkiler
- Belirli veritabanı hizmetleri için benzersiz özellikler
Söz dizimine genel bakış
Burada, yapılandırma dosyasındaki birincil "bölümlerin" hızlı dökümü verilmiştir.
{
"$schema": "...",
"data-source": { ... },
"data-source-files": [ ... ],
"runtime": {
"rest": { ... },
"graphql": { .. },
"host": { ... },
"cache": { ... },
"telemetry": { ... },
"pagination": { ... }
}
"entities": [ ... ]
}
Üst düzey özellikler
Tablo biçimindeki en üst düzey özelliklerin açıklaması aşağıdadır:
Mülk | Tarif |
---|---|
$schema | Doğrulama için JSON şemasını belirtir ve yapılandırmanın gerekli biçime uygun olmasını sağlar. |
veri kaynağı |
|
veri kaynağı dosyalarını |
Diğer veri kaynaklarını tanımlayabilen diğer yapılandırma dosyalarını belirten isteğe bağlı bir dizi. |
çalışma zamanı |
REST, GraphQL, konak, önbellekve telemetriiçin alt özellikler dahil olmak üzere çalışma zamanı davranışlarını ve ayarlarını yapılandırır. |
varlıkları | api aracılığıyla kullanıma sunulan varlık kümesini (veritabanı tabloları, görünümler vb.) tanımlar; bunların eşlemeleri, izinlerive ilişkileri. |
Örnek yapılandırma
Burada yalnızca tek bir basit varlık için gerekli özellikleri içeren örnek bir yapılandırma dosyası verilmiştır. Bu örnek, en düşük senaryoya yöneliktir.
{
"$schema": "https://github.com/Azure/data-api-builder/releases/latest/download/dab.draft.schema.json",
"data-source": {
"database-type": "mssql",
"connection-string": "@env('sql-connection-string')"
},
"entities": {
"Book": {
"source": "dbo.books",
"permissions": [{
"actions": ["*"],
"role": "anonymous"
}]
}
}
}
Daha karmaşık bir senaryo örneği için bkz. uçtan uca örnek yapılandırma.
Ortam
Veri API'sinin yapılandırma dosyası, ASP.NET Core'daki appSettings.json
dosyasına benzer şekilde birden çok ortamı desteklemeniz gereken senaryoları destekleyebilir. Çerçeve,üç DAB_ENVIRONMENT
ortam değişkeni kullanılarak yapılandırılmalıdır.
Temel yapılandırmayı ve geliştirmeye özgü yapılandırmayı istediğiniz bir örneği düşünün. Bu örnekte iki yapılandırma dosyası gerekir:
Çevre | |
---|---|
dab-config.json | Taban |
dab-config.Development.json | Gelişme |
Geliştirmeye özgü yapılandırmayı kullanmak için DAB_ENVIRONMENT
ortam değişkenini Development
olarak ayarlamanız gerekir.
Ortama özgü yapılandırma dosyaları, temel yapılandırma dosyasındaki özellik değerlerini geçersiz kılar. Bu örnekte, connection-string
değeri her iki dosyada da ayarlanırsa, *.Development.json dosyasındaki değer kullanılır.
Her iki dosyada da bu değerin nerede belirtildiğine (veya belirtilmediğinde) bağlı olarak hangi değerin kullanıldığını daha iyi anlamak için bu matrise bakın.
temel yapılandırma belirtilen |
Temel yapılandırma belirtilmemiş | |
---|---|---|
geçerli ortam yapılandırmasında belirtilen | Geçerli ortam | Geçerli ortam |
Geçerli ortam yapılandırma belirtilmemiş | Taban | Hiç kimse |
Birden çok yapılandırma dosyası kullanma örneği için bkz. ortamlarla Veri API oluşturucusu kullanma.
Yapılandırma özellikleri
Bu bölüm, bir yapılandırma dosyası için kullanılabilen tüm olası yapılandırma özelliklerini içerir.
Şema
GEREKLI: ✔️ Evet
Her yapılandırma dosyası bir $schema
özelliğiyle başlar ve doğrulama için JSON şeması belirtir.
Biçim
{
"$schema": "<string>"
}
Örnekler
Şema dosyaları, doğru sürümü veya en son kullanılabilir şemayı kullandığınızdan emin olarak belirli URL'lerde 0.3.7-alpha
sürümler için kullanılabilir.
https://github.com/Azure/data-api-builder/releases/download/<VERSION>-<suffix>/dab.draft.schema.json
VERSION-suffix
istediğiniz sürümle değiştirin.
https://github.com/Azure/data-api-builder/releases/download/v0.3.7-alpha/dab.draft.schema.json
Şemanın en son sürümü https://github.com/Azure/data-api-builder/releases/latest/download/dab.draft.schema.jsonher zaman kullanılabilir.
Geçerli şema değerlerine birkaç örnek aşağıda verilmiştir.
Sürüm | URI | Tarif |
---|---|---|
0.3.7-alfa | https://github.com/Azure/data-api-builder/releases/download/v0.3.7-alpha/dab.draft.schema.json |
Aracın alfa sürümünden yapılandırma şemasını kullanır. |
0.10.23 | https://github.com/Azure/data-api-builder/releases/download/v0.10.23/dab.draft.schema.json |
Aracın kararlı bir sürümü için yapılandırma şemasını kullanır. |
Sonuncu | https://github.com/Azure/data-api-builder/releases/latest/download/dab.draft.schema.json |
Yapılandırma şemasının en son sürümünü kullanır. |
Not
Veri API oluşturucusunun 0.3.7-alpha önceki sürümleri farklı bir şema URI'sine sahip olabilir.
Veri kaynağı
GEREKLI: ✔️ Evet
data-source
bölümü, veritabanını ve bağlantı dizesi aracılığıyla veritabanına erişimi tanımlar. Ayrıca veritabanı seçeneklerini tanımlar.
data-source
özelliği, yedekleme veritabanına bağlanmak için gereken kimlik bilgilerini yapılandırmaktadır.
data-source
bölümünde hem database-type
hem de connection-string
belirterek arka uç veritabanı bağlantısı özetlenmiştir.
Biçim
{
"data-source": {
"database-type": "...",
"connection-string": "your-connection-string",
// mssql-only
"options": {
"set-session-context": <true> (default) | <false>
},
// cosmosdb_nosql-only
"options": {
"database": "your-cosmosdb-database-name",
"container": "your-cosmosdb-container-name",
"schema": "path-to-your-graphql-schema-file"
}
}
}
Özellikler
Gerekli | Tür | |
---|---|---|
database-type |
✔️ Evet | sabit listesi dizesi |
connection-string |
✔️ Evet | dizgi |
options |
❌ Hayır | nesne |
Veritabanı türü
GEREKLI: ✔️ Evet
Veri kaynağı olarak kullanılacak veritabanı türünü belirtmek için kullanılan bir sabit listesi dizesi.
Biçim
{
"data-source"{
"database-type": "<enum-string>"
}
}
Değer
type
özelliği arka uç veritabanının türünü gösterir.
Tür | Tarif | En Düşük Sürüm |
---|---|---|
mssql |
Azure SQL Veritabanı | Yok |
mssql |
Azure SQL MI | Yok |
mssql |
SQL Server | SQL 2016 |
sqldw |
Azure SQL Veri Ambarı | Yok |
postgresql |
PostgreSQL | v11 |
mysql |
MySQL | v8 |
cosmosdb_nosql |
NoSQL için Azure Cosmos DB | Yok |
cosmosdb_postgresql |
PostgreSQL için Azure Cosmos DB | Yok |
Bağlantı dizesi
GEREKLI: ✔️ Evet
dizesi, hedef veritabanı hizmetine bağlanmak için geçerli bir bağlantı dizesi içeren değeridir. Arka uç veritabanına bağlanmak için ADO.NET bağlantı dizesi. Daha fazla bilgi için bkz.bağlantı dizelerini
Biçim
{
"data-source"{
"connection-string": "<string>"
}
}
Bağlantı dayanıklılığı
Veri API oluşturucusu, geçici hatalar algıladıktan sonra veritabanı isteklerini otomatik olarak yeniden denenir. Yeniden deneme mantığı, en fazla yeniden deneme sayısının beşr
olduğu varsayılarak):
$r^2$
Bu formülü kullanarak, her yeniden deneme denemesinin süresini saniyeler içinde hesaplayabilirsiniz.
Saniye | |
---|---|
İlk | 2 |
saniye | 4 |
Üçüncü | 8 |
Dördüncü | 16 |
beşinci | 32 |
Azure SQL ve SQL Server
Veri API oluşturucusu, yapılandırma dosyasında sağladığınız bağlantı dizesini kullanarak Azure SQL veya SQL Server'a bağlanmak için SqlClient
kitaplığını kullanır. Desteklenen tüm bağlantı dizesi seçeneklerinin listesini burada bulabilirsiniz: SqlConnection.ConnectionString Özelliği.
Veri API oluşturucusu, Yönetilen Hizmet Kimliklerini (MSI) kullanarak hedef veritabanına da bağlanabilir.
Azure.Identity
kitaplığında tanımlanan DefaultAzureCredential
, bağlantı dizenizde bir kullanıcı adı veya parola belirtmediğinizde bilinen kimlikleri kullanarak bağlanmak için kullanılır. Daha fazla bilgi için bkz.
Örnekler
Bağlantı dizesi için kullanılan değer büyük ölçüde senaryonuzda kullanılan veritabanı hizmetine bağlıdır. Bağlantı dizesini her zaman bir ortam değişkeninde depolamayı ve @env()
işlevini kullanarak bu dizeye erişmeyi seçebilirsiniz.
Değer | Tarif | |
---|---|---|
Azure SQL Veritabanı dize değeri kullanma | Server=<server-address>;Database=<name-of-database>;User ID=<username>;Password=<password>; |
Azure SQL Veritabanı hesabına bağlantı dizesi. Daha fazla bilgi için bkz.Azure SQL Veritabanı bağlantı dizelerini |
PostgreSQL için Azure Veritabanı dize değeri kullanma | Server=<server-address>;Database=<name-of-database>;Port=5432;User Id=<username>;Password=<password>;Ssl Mode=Require; |
PostgreSQL için Azure Veritabanı hesabına bağlantı dizesi. Daha fazla bilgi için bkz.PostgreSQL için Azure Veritabanı bağlantı dizelerini |
NoSQL için Azure Cosmos DB dize değeri kullanma | AccountEndpoint=<endpoint>;AccountKey=<key>; |
NoSQL için Azure Cosmos DB hesabına bağlantı dizesi. Daha fazla bilgi için bkz.NoSQL için Azure Cosmos DB bağlantı dizelerini |
MySQL için Azure Veritabanı dize değeri kullanma | Server=<server-address>;Database=<name-of-database>;User ID=<username>;Password=<password>;Sslmode=Required;SslCa=<path-to-certificate>; |
MySQL için Azure Veritabanı hesabına bağlantı dizesi. Daha fazla bilgi için bkz.MySQL için Azure Veritabanı bağlantı dizelerini |
access ortam değişkeni |
@env('database-connection-string') |
Yerel makineden bir ortam değişkenine erişin. Bu örnekte, database-connection-string ortam değişkenine başvurulur. |
Bahşiş
En iyi yöntem olarak, hassas bilgileri yapılandırma dosyanızda depolamaktan kaçının. Mümkün olduğunda ortam değişkenlerine başvurmak için @env()
kullanın. Daha fazla bilgi için bkz. @env()
işlevi.
Bu örnekler yalnızca her veritabanı türünün nasıl yapılandırılabileceğini gösterir. Senaryonuz benzersiz olabilir, ancak bu örnek iyi bir başlangıç noktasıdır.
myserver
, myDataBase
, mylogin
ve myPassword
gibi yer tutucuları ortamınıza özgü gerçek değerlerle değiştirin.
mssql
"data-source": { "database-type": "mssql", "connection-string": "$env('my-connection-string')", "options": { "set-session-context": true } }
-
Tipik bağlantı dizesi biçimi:
"Server=tcp:myserver.database.windows.net,1433;Initial Catalog=myDataBase;Persist Security Info=False;User ID=mylogin;Password=myPassword;MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;"
-
Tipik bağlantı dizesi biçimi:
postgresql
"data-source": { "database-type": "postgresql", "connection-string": "$env('my-connection-string')" }
-
Tipik bağlantı dizesi biçimi:
"Host=myserver.postgres.database.azure.com;Database=myDataBase;Username=mylogin@myserver;Password=myPassword;"
-
Tipik bağlantı dizesi biçimi:
mysql
"data-source": { "database-type": "mysql", "connection-string": "$env('my-connection-string')" }
-
Tipik bağlantı dizesi biçimi:
"Server=myserver.mysql.database.azure.com;Database=myDataBase;Uid=mylogin@myserver;Pwd=myPassword;"
-
Tipik bağlantı dizesi biçimi:
cosmosdb_nosql
"data-source": { "database-type": "cosmosdb_nosql", "connection-string": "$env('my-connection-string')", "options": { "database": "Your_CosmosDB_Database_Name", "container": "Your_CosmosDB_Container_Name", "schema": "Path_to_Your_GraphQL_Schema_File" } }
-
Tipik bağlantı dizesi biçimi:
"AccountEndpoint=https://mycosmosdb.documents.azure.com:443/;AccountKey=myAccountKey;"
-
Tipik bağlantı dizesi biçimi:
cosmosdb_postgresql
"data-source": { "database-type": "cosmosdb_postgresql", "connection-string": "$env('my-connection-string')" }
-
Tipik bağlantı dizesi biçimi:
"Host=mycosmosdb.postgres.database.azure.com;Database=myDataBase;Username=mylogin@mycosmosdb;Password=myPassword;Port=5432;SSL Mode=Require;"
-
Tipik bağlantı dizesi biçimi:
Not
database
, container
ve schema
gibi belirtilen "seçenekler", PostgreSQL API'sine değil Azure Cosmos DB'nin NoSQL API'sine özeldir. PostgreSQL API'sini kullanan Azure Cosmos DB için "seçenekler" NoSQL kurulumunda olduğu gibi database
, container
veya schema
içermez.
Seçenekler
GEREKLI: ❌ Hayır
Belirli veritabanı bağlantıları için ek anahtar-değer parametrelerinin isteğe bağlı bölümü.
Biçim
{
"data-source"{
"options": {
"<key>": "<value>"
}
}
}
Örnekler
options
bölümünün gerekli olup olmadığı büyük ölçüde kullanılan veritabanı hizmetine bağlıdır.
Değer | Tarif | |
---|---|---|
Azure SQL veya SQL Server'da SESSION_CONTEXT etkinleştirme |
"set-session-context": false |
Azure SQL ve SQL Server için Veri API oluşturucusu, kullanıcı tarafından belirtilen meta verileri temel alınan veritabanına göndermek için SESSION_CONTEXT yararlanabilir. Bu meta veriler, erişim belirtecinde bulunan talepler nedeniyle Veri API'sini oluşturucusunun kullanımına sunulur.
SESSION_CONTEXT verileri, bu bağlantı kapatılana kadar veritabanı bağlantısı sırasında veritabanı tarafından kullanılabilir. Daha fazla bilgi için bkz. oturum bağlamı. |
{
"data-source"{
"options": {
"set-session-context": false
}
}
}
Veri kaynağı dosyaları
GEREKLI: ❌ Hayır
Bu özellik, ek veritabanlarına başvuran çalışma zamanı yapılandırma dosyalarının adlarını içerir.
Biçim
{
"data-source-files": ["<string-array>"]
}
Yapılandırma dosyasıyla ilgili dikkat edilmesi gerekenler
- Her yapılandırma dosyasındaki
data-source
özelliği gereklidir. - Her yapılandırma dosyasındaki
entities
özelliği gereklidir. - Yalnızca en üst düzey yapılandırma dosyası
runtime
ayarı kullanılır. - Alt düzey yapılandırma dosyaları da alt dosyaları tanımlayabilir.
- Yapılandırma dosyaları alt klasörlere istenildiği gibi yerleştirilebilir.
- Varlık adları tüm yapılandırma dosyalarında benzersiz olmalıdır.
- Yapılandırma dosyaları arasındaki ilişkiler desteklenmez.
Bilinen sorunlar
- Şu anda alt yapılandırma dosyaları yalnızca GraphQL'de desteklenmektedir.
- Şu anda alt yapılandırma dosyaları ortam değişkenlerini desteklememektedir.
Örnekler
{
"data-source-files": ["dab-config-two.json", "dab-config-three.json"]
}
Kullanımdaysa başvuru alt klasörleri:
{
"data-source-files": ["myfolder/dab-config-two.json"]
}
Çalışma zamanı
GEREKLI: ❌ Hayır
runtime
bölümünde, kullanıma sunulan tüm varlıklar için çalışma zamanı davranışını ve ayarlarını etkileyen seçenekler özetlenmiştir.
Biçim
{
"runtime": {
"rest": {
"path": "/api" (default),
"enabled": <true> (default) | <false>,
"request-body-strict": <true> (default) | <false>
},
"graphql": {
"path": "/graphql" (default),
"enabled": <true> (default) | <false>,
"allow-introspection": <true> (default) | <false>
},
"host": {
"mode": "production" (default) | "development",
"cors": {
"origins": ["<array-of-strings>"],
"allow-credentials": <true> | <false> (default)
},
"authentication": {
"provider": "StaticWebApps" (default) | ...,
"jwt": {
"audience": "<client-id>",
"issuer": "<issuer-url>"
}
}
}
},
"cache": {
"enabled": <true> | <false> (default),
"ttl-seconds": <integer; default: 5>
},
"pagination": {
"max-page-size": -1, <integer; default: 100000>,
"default-page-size": -1 | <integer; default: 100>
},
"telemetry": {
"application-insights": {
"connection-string": "<connection-string>",
"enabled": <true> | <false> (default)
}
}
}
Özellikler
Gerekli | Tür | |
---|---|---|
rest |
❌ Hayır | nesne |
graphql |
❌ Hayır | nesne |
host |
❌ Hayır | nesne |
cache |
❌ Hayır | nesne |
Örnekler
Aşağıda, birden çok ortak varsayılan parametrenin belirtildiği bir çalışma zamanı bölümü örneği verilmiştir.
{
"runtime": {
"rest": {
"enabled": true,
"path": "/api",
"request-body-strict": true
},
"graphql": {
"enabled": true,
"path": "/graphql",
"allow-introspection": true
},
"host": {
"mode": "development",
"cors": {
"allow-credentials": false,
"origins": [
"*"
]
},
"authentication": {
"provider": "StaticWebApps",
"jwt": {
"audience": "<client-id>",
"issuer": "<identity-provider-issuer-uri>"
}
}
},
"cache": {
"enabled": true,
"ttl-seconds": 5
},
"pagination": {
"max-page-size": 100000,
"default-page-size": 100
},
"telemetry": {
"application-insights": {
"connection-string": "<connection-string>",
"enabled": true
}
}
}
}
GraphQL (çalışma zamanı)
GEREKLI: ❌ Hayır
Bu nesne GraphQL'in etkinleştirilip etkinleştirilmediğini ve varlığı bir GraphQL türü olarak kullanıma açmak için kullanılan adı[s] tanımlar. Bu nesne isteğe bağlıdır ve yalnızca varsayılan ad veya ayarlar yeterli değilse kullanılır. Bu bölümde GraphQL uç noktasının genel ayarları özetlenmiştir.
Biçim
{
"runtime": {
"graphql": {
"path": "/graphql" (default),
"enabled": <true> (default) | <false>,
"allow-introspection": <true> (default) | <false>
"multiple-mutations": <object>
}
}
}
Özellikler
Gerekli | Tür | |
---|---|---|
enabled |
❌ Hayır | Boolean |
path |
❌ Hayır | dizgi |
allow-introspection |
❌ Hayır | Boolean |
multiple-mutations |
❌ Hayır | nesne |
Etkin (GraphQL çalışma zamanı)
GEREKLI: ❌ Hayır
GraphQL uç noktalarının genel olarak etkinleştirilip etkinleştirilmeymeyeceğini veya devre dışı bırakılıp bırakılmayacağını tanımlar. Genel olarak devre dışı bırakılırsa, tek tek varlık ayarlarından bağımsız olarak GraphQL istekleri aracılığıyla hiçbir varlığa erişilemez.
Biçim
{
"runtime": {
"graphql": {
"enabled": "<boolean>"
}
}
}
Örnekler
Bu örnekte GraphQL uç noktası tüm varlıklar için devre dışı bırakılmıştır.
{
"runtime": {
"graphql": {
"enabled": false
}
}
}
Yol (GraphQL çalışma zamanı)
GEREKLI: ❌ Hayır
GraphQL uç noktasının kullanılabilir hale getirildiği URL yolunu tanımlar. Örneğin, bu parametre /graphql
olarak ayarlanırsa GraphQL uç noktası /graphql
olarak kullanıma sunulur. Varsayılan olarak, yol /graphql
.
Önemli
Bu özellik için alt yollara izin verilmiyor. GraphQL uç noktası için özelleştirilmiş yol değeri şu anda kullanılamıyor.
Biçim
{
"runtime": {
"graphql": {
"path": "<string>"
}
}
}
Örnekler
Bu örnekte, kök GraphQL URI'si /query
.
{
"runtime": {
"graphql": {
"path": "/query"
}
}
}
İçe aktarmaya izin ver (GraphQL çalışma zamanı)
GEREKLI: ❌ Hayır
Bu Boole bayrağı, GraphQL uç noktasında şema içgörü sorguları gerçekleştirme özelliğini denetler. İçe aktarmayı etkinleştirmek, istemcilerin kullanılabilir veri türleri, gerçekleştirebilecekleri sorgu türleri ve kullanılabilir mutasyonlar hakkında bilgi için şemayı sorgulamasına olanak tanır.
Bu özellik geliştirme sırasında GraphQL API'sinin yapısını anlamak ve otomatik olarak sorgu oluşturan araçlar için kullanışlıdır. Ancak üretim ortamlarında API'nin şema ayrıntılarının gizlenip güvenliğin artırılması devre dışı bırakılabilir. Varsayılan olarak introspection etkindir ve GraphQL şemasının hemen ve kapsamlı bir şekilde keşfine olanak sağlar.
Biçim
{
"runtime": {
"graphql": {
"allow-introspection": "<boolean>"
}
}
}
Örnekler
Bu örnekte iç gözlem devre dışı bırakılmıştır.
{
"runtime": {
"graphql": {
"allow-introspection": false
}
}
}
Birden çok mutasyon (GraphQL çalışma zamanı)
GEREKLI: ❌ Hayır
GraphQL çalışma zamanı için birden çok mutasyon işleminin tümünü yapılandırıyor.
Not
Varsayılan olarak, birden çok mutasyon etkinleştirilmez ve açıkça etkinleştirilecek şekilde yapılandırılması gerekir.
Biçim
{
"runtime": {
"graphql": {
"multiple-mutations": {
"create": <object>
}
}
}
}
Özellikler
Gerekli | Tür | |
---|---|---|
create |
❌ Hayır | nesne |
Birden çok mutasyon - oluşturma (GraphQL çalışma zamanı)
GEREKLI: ❌ Hayır
GraphQL çalışma zamanı için birden çok oluşturma işlemi yapılandırılır.
Biçim
{
"runtime": {
"graphql": {
"multiple-mutations": {
"create": {
"enabled": <false> (default) | <true>
}
}
}
}
}
Özellikler
Gerekli | Tür | |
---|---|---|
enabled |
✔️ Evet | Boolean |
Örnekler
Bu örnekte, GraphQL çalışma zamanı için birden çok mutasyon etkinleştirilmiştir. Özellikle, birden çok oluşturma işlemi, runtime.graphql.multiple-mutations.create.enabled
özelliği için true
değeri belirtilerek etkinleştirilir.
{
"runtime": {
"graphql": {
"multiple-mutations": {
"create": {
"enabled": true
}
}
}
}
}
REST (çalışma zamanı)
GEREKLI: ❌ Hayır
Bu bölümde REST uç noktalarının genel ayarları özetlenir. Bu ayarlar tüm varlıklar için varsayılan olarak çalışır, ancak ilgili yapılandırmalarında varlık başına temelinde geçersiz kılınabilir.
Biçim
{
"runtime": {
"rest": {
"path": "/api" (default),
"enabled": <true> (default) | <false>,
"request-body-strict": <true> (default) | <false>
},
...
}
}
Özellikler
Gerekli | Tür | |
---|---|---|
enabled |
❌ Hayır | Boolean |
path |
❌ Hayır | dizgi |
request-body-strict |
❌ Hayır | Boolean |
Etkin (REST çalışma zamanı)
GEREKLI: ❌ Hayır
REST uç noktalarının genel kullanılabilirliğini belirleyen Boole bayrağı. Devre dışı bırakılırsa, varlıklara tek tek varlık ayarlarından bağımsız olarak REST aracılığıyla erişemezsiniz.
Biçim
{
"runtime": {
"rest": {
"enabled": "<boolean>"
}
}
}
Örnekler
Bu örnekte REST API uç noktası tüm varlıklar için devre dışı bırakılmıştır.
{
"runtime": {
"rest": {
"enabled": false
}
}
}
Yol (REST çalışma zamanı)
GEREKLI: ❌ Hayır
Kullanıma sunulan tüm REST uç noktalarına erişmek için URL yolunu ayarlar. Örneğin, path
/api
olarak ayarlanması, REST uç noktasının /api/<entity>
'de erişilebilir olmasını sağlar. Alt yollara izin verilmez. Bu alan isteğe bağlıdır ve varsayılan olarak /api
.
Not
Statik Web Apps (önizleme) kullanarak Veri API'si oluşturucusu dağıtılırken, Azure hizmeti url'ye otomatik olarak ek alt yol /data-api
ekler. Bu davranış, mevcut Statik Web Uygulaması özellikleriyle uyumluluğu sağlar. Sonuçta elde edilen uç nokta /data-api/api/<entity>
olacaktır. Bu yalnızca Statik Web Uygulamaları ile ilgilidir.
Önemli
Bu özellik için alt yollara izin verilmiyor.
Biçim
{
"runtime": {
"rest": {
"path": "<string>"
}
}
}
Örnekler
Bu örnekte kök REST API URI'sinin /data
.
{
"runtime": {
"rest": {
"path": "/data"
}
}
}
Bahşiş
bir Author
varlığı tanımlarsanız, bu varlığın uç noktası /data/Author
olacaktır.
İstek gövdesi katı (REST çalışma zamanı)
GEREKLI: ❌ Hayır
Bu boole bayrağı, REST mutasyonu işlemi için istek gövdesinin gereksiz alanlar içerip içeremeyeceğini belirler. Varsayılan olarak değer true'dur; başka bir deyişle istek gövdesindeki ek alanlar BadRequest
özel durumla sonuçlanır. Ancak, bu bayrağı false olarak ayarlamak, kullanıcıların istek gövdesine yoksayılan ek alanlar eklemesine olanak tanır. İstek gövdesi GET işlemleri için her zaman yoksayıldığı için bu bayrağın REST sorgusu (GET) isteklerini etkilemediğini unutmayın.
Not
Bu bayrak, REST API uç noktasına yönelik HTTP GET isteklerini etkilemez. get işlemleri için istek gövdesi her zaman yoksayılır.
Biçim
{
"runtime": {
"rest": {
"request-body-strict": "<boolean>"
}
}
}
Örnekler
Bu örnekte, katı istek gövdesi doğrulaması devre dışı bırakılmıştır.
{
"runtime": {
"rest": {
"request-body-strict": false
}
}
}
Konak (çalışma zamanı)
GEREKLI: ❌ Hayır
Çalışma zamanı yapılandırmasındaki host
bölümü, Veri API oluşturucusunun işletim ortamı için çok önemli ayarlar sağlar. Bu ayarlar işlem modlarını, CORS yapılandırmasını ve kimlik doğrulama ayrıntılarını içerir.
Biçim
{
"runtime": {
...
"host": {
"mode": "production" (default) | "development",
"cors": {
"origins": ["<array-of-strings>"],
"allow-credentials": <true> | <false> (default)
},
"authentication": {
"provider": "StaticWebApps" (default) | ...,
"jwt": {
"audience": "<client-id>",
"issuer": "<issuer-url>"
}
}
}
}
...
}
Özellikler
Gerekli | Tür | |
---|---|---|
mode |
❌ Hayır | sabit listesi dizesi |
cors |
❌ Hayır | nesne |
authentication |
❌ Hayır | nesne |
Örnekler
Aşağıda geliştirme barındırma için yapılandırılmış bir çalışma zamanı örneği verilmiştir.
{
"runtime": {
"host": {
"mode": "development",
"cors": {
"allow-credentials": false,
"origins": ["*"]
},
"authentication": {
"provider": "Simulator"
}
}
}
}
Mod (Konak çalışma zamanı)
GEREKLI: ❌ Hayır
Veri API'sinin oluşturucu altyapısının development
veya production
modunda çalıştırılması gerekip gerekmediğini tanımlar. Varsayılan değer production
.
Genellikle temel alınan veritabanı hataları, geliştirme aşamasında çalışırken günlüklerin varsayılan ayrıntı düzeyi Debug
ayarlanarak ayrıntılı olarak gösterilir. Üretimde günlüklerin ayrıntı düzeyi Error
olarak ayarlanır.
Bahşiş
Varsayılan günlük düzeyi dab start --LogLevel <level-of-detail>
kullanılarak daha fazla geçersiz kılınabilir. Daha fazla bilgi için bkz.
Biçim
{
"runtime": {
"host": {
"mode": "<enum-string>"
}
}
}
Değer
Bu özellik için izin verilen değerlerin listesi aşağıdadır:
Tarif | |
---|---|
production |
Azure'da üretim ortamında barındırırken kullanma |
development |
Yerel makinede geliştirme aşamasında kullanma |
CORS (Konak çalışma zamanı)
GEREKLI: ❌ Hayır
Veri API oluşturucusu altyapı konağı için çıkış noktaları arası kaynak paylaşımı (CORS) ayarları.
Biçim
{
"runtime": {
"host": {
"cors": "<object>"
}
}
}
Özellikler
Gerekli | Tür | |
---|---|---|
allow-credentials |
❌ Hayır | Boolean |
origins |
❌ Hayır | dize dizisi |
Kimlik bilgilerine izin ver (Konak çalışma zamanı)
GEREKLI: ❌ Hayır
True ise, Access-Control-Allow-Credentials
CORS üst bilgisini ayarlar. Varsayılan olarak, değeri false
.
Not
Access-Control-Allow-Credentials
CORS üst bilgisinde daha fazla bilgi için bkz. MDN Web Docs CORS başvurusu.
Biçim
{
"runtime": {
"host": {
"cors": {
"allow-credentials": "<boolean>",
}
}
}
}
Origins (Konak çalışma zamanı)
GEREKLI: ❌ Hayır
CORS için izin verilen çıkış noktalarının listesini içeren bir dizi ayarlar. Bu ayar, tüm kaynaklar için *
joker karaktere izin verir.
Biçim
{
"runtime": {
"host": {
"cors": {
"origins": ["<string-array>"]
}
}
}
}
Örnekler
Tüm kaynaklardan kimlik bilgileri olmadan CORS'ye izin veren bir konak örneği aşağıda verilmiştir.
{
"runtime": {
"host": {
"cors": {
"allow-credentials": false,
"origins": ["*"]
}
}
}
}
Kimlik doğrulaması (Konak çalışma zamanı)
GEREKLI: ❌ Hayır
Veri API oluşturucu konağı için kimlik doğrulamasını yapılandırılır.
Biçim
{
"runtime": {
"host": {
"authentication": {
"provider": "<enum-string>",
"jwt": "<object>"
}
}
}
}
Özellikler
Gerekli | Tür | |
---|---|---|
provider |
❌ Hayır | sabit listesi dizesi |
jwt |
❌ Hayır | nesne |
Sağlayıcı (Konak çalışma zamanı)
GEREKLI: ❌ Hayır
host
yapılandırmasındaki authentication.provider
ayarı, Veri API oluşturucusu tarafından kullanılan kimlik doğrulama yöntemini tanımlar. API'nin kaynaklarına erişmeye çalışan kullanıcıların veya hizmetlerin kimliğini nasıl doğruladığını belirler. Bu ayar, farklı ortamlara ve güvenlik gereksinimlerine göre uyarlanmış çeşitli kimlik doğrulama mekanizmalarını destekleyerek dağıtım ve tümleştirme esnekliği sağlar.
Sağlayıcı | Tarif |
---|---|
StaticWebApps (varsayılan) |
Veri API'sinin oluşturucusunun yalnızca Statik Web Apps ortamında çalışırken mevcut olan bir HTTP üst bilgileri kümesini aramasını sağlar. |
AppService |
Çalışma zamanı, AppService Kimlik Doğrulaması etkin ve yapılandırılmış (EasyAuth) ile Azure AppService'te barındırıldığında. |
AzureAd |
Microsoft Entra Identity'in, Veri API oluşturucusunun ("Sunucu Uygulaması") gönderilen bir isteğin kimliğini doğru edebilmesi için yapılandırılması gerekir. Daha fazla bilgi için bkz. Microsoft Entra ID kimlik doğrulaması. |
Simulator |
Data API builder altyapısına tüm isteklerin kimliği doğrulanmış olarak davranmasını isteyen yapılandırılabilir bir kimlik doğrulama sağlayıcısı. Daha fazla bilgi için bkz. yerel kimlik doğrulaması. |
Biçim
{
"runtime": {
"host": {
"authentication": {
"provider": "<enum-string>",
}
}
}
}
Değer
Bu özellik için izin verilen değerlerin listesi aşağıdadır:
Tarif | |
---|---|
StaticWebApps |
Azure Static Web Apps |
AppService |
Azure App Service |
AzureAD |
Microsoft Entra ID |
Simulator |
Simülatörü |
JSON Web Belirteçleri (Konak çalışma zamanı)
GEREKLI: ❌ Hayır
Kimlik doğrulama sağlayıcısı AzureAD
(Microsoft Entra Id) olarak ayarlandıysa, JSOn Web Belirteçleri (JWT) belirtecinin hedef kitlesini ve verenleri belirtmek için bu bölüm gereklidir. Bu veriler, belirteçleri Microsoft Entra kiracınızda doğrulamak için kullanılır.
Kimlik doğrulama sağlayıcısı Microsoft Entra Id için AzureAD
ise gereklidir. Bu bölüm, kimlik doğrulaması için hedeflenen AzureAD
kiracısına karşı alınan JWT belirtecini doğrulamak için audience
ve issuer
belirtmelidir.
Ayar | Tarif |
---|---|
seyirci | Belirtecin hedeflenen alıcısını tanımlar; genellikle uygulamanın tanımlayıcısı Microsoft Entra Identity'e (veya kimlik sağlayıcınıza) kaydedilir ve belirtecin uygulamanız için gerçekten verildiğinden emin olur. |
Veren | JWT'yi veren belirteç hizmeti olan veren yetkilinin URL'sini belirtir. Bu URL, belirtecin kaynağını doğrulayarak JWT'nin alındığı kimlik sağlayıcısının veren URL'si ile eşleşmelidir. |
Biçim
{
"runtime": {
"host": {
"authentication": {
"jwt": {
"audience": "<string>",
"issuer": "<string>"
}
}
}
}
}
Özellikler
Gerekli | Tür | |
---|---|---|
audience |
❌ Hayır | dizgi |
issuer |
❌ Hayır | dizgi |
Örnekler
Veri API oluşturucusu (DAB), Microsoft Entra Identity ve özel JSON Web Belirteci (JWT) sunucularıyla tümleştirilerek esnek kimlik doğrulama desteği sunar. Bu görüntüde JWT Sunucusu, başarılı bir oturum açma sırasında istemcilere JWT belirteçleri veren kimlik doğrulama hizmetini temsil eder. İstemci daha sonra belirteci DAB'ye geçirir ve bu da taleplerini ve özelliklerini sorgulayabilir.
Aşağıda, çözümünüzde yapabileceğiniz çeşitli mimari seçimlere göre host
özelliğine örnekler verilmiştir.
Azure Static Web Apps
{
"host": {
"mode": "development",
"cors": {
"origins": ["https://dev.example.com"],
"credentials": true
},
"authentication": {
"provider": "StaticWebApps"
}
}
}
StaticWebApps
ile Veri API oluşturucusu, Azure Static Web Apps'in isteğin kimliğini doğrulamasını bekler ve X-MS-CLIENT-PRINCIPAL
HTTP üst bilgisi bulunur.
Azure App Service
{
"host": {
"mode": "production",
"cors": {
"origins": [ "https://api.example.com" ],
"credentials": false
},
"authentication": {
"provider": "AppService",
"jwt": {
"audience": "9e7d452b-7e23-4300-8053-55fbf243b673",
"issuer": "https://example-appservice-auth.com"
}
}
}
}
Kimlik doğrulaması, erişim belirtecinin verilebildiği desteklenen bir kimlik sağlayıcısına temsilci olarak atanır. Alınan erişim belirteci, Veri API oluşturucusunda gelen isteklere eklenmelidir. Veri API oluşturucusu daha sonra sunulan erişim belirteçlerini doğrulayarak Veri API'sinin oluşturucusunun belirtecin hedef kitlesi olduğundan emin olur.
Microsoft Entra ID
{
"host": {
"mode": "production",
"cors": {
"origins": [ "https://api.example.com" ],
"credentials": true
},
"authentication": {
"provider": "AzureAD",
"jwt": {
"audience": "c123d456-a789-0abc-a12b-3c4d56e78f90",
"issuer": "https://login.microsoftonline.com/98765f43-21ba-400c-a5de-1f2a3d4e5f6a/v2.0"
}
}
}
}
Simülatör (Yalnızca geliştirme)
{
"host": {
"mode": "development",
"authentication": {
"provider": "Simulator"
}
}
}
İzleyici (Konak çalışma zamanı)
GEREKLI: ❌ Hayır
JWT belirtecinin hedef kitlesi.
Biçim
{
"runtime": {
"host": {
"authentication": {
"jwt": {
"audience": "<string>",
}
}
}
}
}
Veren (Konak çalışma zamanı)
GEREKLI: ❌ Hayır
JWT belirteci için veren.
Biçim
{
"runtime": {
"host": {
"authentication": {
"jwt": {
"issuer": "<string>"
}
}
}
}
}
Sayfalandırma (çalışma zamanı)
GEREKLI: ❌ Hayır
Sonuç sınırlarını yapılandırıyor.
Biçim
{
"runtime": {
"pagination": {
"max-page-size": -1,
"default-page-size": -1
}
}
}
Özellikler
Gerekli | Tür | Temerrüt | |
---|---|---|---|
max-page-size |
❌ Hayır | tam sayı | 100,000 |
default-page-size |
❌ Hayır | tam sayı | 100 |
Örnek
{
"runtime": {
"pagination": {
"max-page-size": 100000,
"default-page-size": 1
}
}
}
REST sayfalandırma örneği
Örnekte REST GET https://localhost:5001/api/books
verdiysek, sayfa boyutu varsayılan olarak 1 olduğundan elde edilen JSON, value
dizisine bir kayıt ekler. Örnek sonuçlar, Sonraki bir sayfa mevcut olduğunda Veri API'sinin oluşturucusunun sonuçlara nasıl nextLink
ekleyeceğini gösterir.
{
"value": [
{
"id": 1000,
"title": "Prelude to Foundation",
"year": 1988,
"pages": 403,
"series_id": 10000
}
],
"nextLink": "https://localhost:5001/api/books?$after=W3siRW50aXR5TmFtZSI6ImJvb2tzIiwiRmllbGROYW1lI=="
}
$after
seçeneğinin uç noktayı sorgulamak için kullanılan URL'ye eklendiğine dikkat edin. Bu özel değer, geçerli sayfadaki son kaydı dahili olarak gösterir. sağlanan dizeyi $after
değeri olarak kullanmak otomatik olarak sonraki veri sayfasını döndürür.
Not
Temel alınan tablo verilerinin sorgular arasında değişmesi mümkündür. Bu bir hataya neden olmaz; ancak, Veri API'sinin oluşturucusunun neden sayfa numarası kavramına sahip olmadığını gösterir. Sonraki çağrılar doğru sonraki sayfayı döndürür, ancak veri değişiklikleri nedeniyle sayfa numarası değişmiş olabilir. Bu şekilde
GraphQL sayfalandırma örneği
Örnekte bir GraphQL sorgusu verirsek sayfalandırmayı kullanmak için hasNextPage
ve endCursor
eklemeliyiz. Bu gereksinimin nedeni REST uç noktalarının yüklerinin yapısını belirlemesi, ancak tüketicinin sorgusunun GraphQL yüklerinin yapısını belirlemesidir. Bu değerlerle veya bu değerler olmadan sonuçlar yine de varsayılan sayfa boyutuyla sınırlıdır. Sorgu şöyle görünür:
query {
books {
items {
id,
title,
year,
pages,
series_id
}
hasNextPage
endCursor
}
}
GraphQL sonuçlarımız, daha fazla sayfa getirmek için kullanılan hasNextPage
ve endCursor
içerir.
{
"data": {
"books": {
"items": [
{
"id": 1000,
"title": "Prelude to Foundation",
"year": 1988,
"pages": 403,
"series_id": 10000
}
],
"hasNextPage": true,
"endCursor": "W3siRW50aXR5TmFtZSI6ImJvb2tzIiwiRmllbGROYW1lI=="
}
}
}
Sonraki GraphQL sorgusu, aşağıdaki şekilde imleci after
değişkeninin değeri olarak içerir:
query {
books(after: "W3siRW50aXR5TmFtZSI6ImJvb2tzIiwiRmllbGROYW1lI==") {
items {
id
title
year
pages
series_id
}
hasNextPage
endCursor
}
}
Sayfa boyutunu değiştirmek için $limit
veya first
kullanma.
Hem REST hem de GraphQL sırasıyla bir $limit
veya first
değişkeni içerebilir.
limit
amacı, belirli bir sorgunun sonuçlarını sınırlamaktır. Ancak, https://{server}/api/books?$limit=10
düşünün. varsayılan sayfa boyutu 100 olduğunda limit
10 ise, sonuçlar 10 ile sınırlıdır. Ancak, varsayılan sayfa boyutu 100 olduğunda limit
200 ise, sonuçlar varsayılan sayfa boyutundan daha büyük bir değer olan 200 ile sınırlıdır.
İlk değer | Sonuç |
---|---|
-1 |
max-page-size ayarının geçerli değeri.
max-page-size ayarı değeri tüketici tarafından bilinmediğinde -1 kullanmak kullanışlıdır. Veri API'sinin oluşturucusu, -1 değerini geçerli max-page-size değeriyle değiştirir. |
< max-page-size |
Sonuçlar sağlanan değerle sınırlıdır. |
0 |
Geçersiz. Bir özel durum döndürülür. |
< -1 |
Geçersiz. Bir özel durum döndürülür. |
> max-page-size |
Geçersiz. Bir özel durum döndürülür. |
En büyük sayfa boyutu (Sayfalandırma çalışma zamanı)
GEREKLI: ❌ Hayır
REST veya GraphQL sorgusu tarafından döndürülen en üst düzey kayıt sayısı üst sınırını ayarlar.
İzin verilen değerler
Değer | Sonuç |
---|---|
-1 |
Bu değer varsayılan olarak desteklenen en yüksek değerdir. |
integer |
Herhangi bir pozitif 32 bit tamsayı desteklenir. |
< -1 |
Bu desteklenmez. |
= 0 |
Bu desteklenmez. |
Not
32 bitlik bir tamsayının en büyük değeri 2.147.483.647'dir. Bu büyük bir şey. Uygulamada, giden uç nokta yükünün boyutu için katı bir evrensel sınır yoktur, ancak sunucu yapılandırması, bant genişliği ve zaman aşımı gibi çeşitli faktörler boyutu etkili bir şekilde sınırlayabilir. Veri API'si oluşturucusu senaryonuzu bilmediği için bu ayar her geliştirici tarafından yapılandırmaya açıktır. Varsayılan maksimum 100.000 zaten oldukça agresiftir.
Varsayılan sayfa boyutu (Sayfalandırma çalışma zamanı)
GEREKLI: ❌ Hayır
Sayfalandırma, REST veya GraphQL sorgusu tarafından döndürülen en üst düzey kayıt sayısı olduğunda sayfa boyutunu ayarlar.
İzin verilen değerler
Değer | Sonuç |
---|---|
-1 |
Bu değer varsayılan olarak geçerli max-page-size ayarıdır. |
integer |
Geçerli max-page-size ayarından küçük pozitif tamsayılar. |
< -1 |
Bu desteklenmez. |
= 0 |
Bu desteklenmez. |
Önbellek (çalışma zamanı)
GEREKLI: ❌ Hayır
Tüm çalışma zamanı için önbelleğe almayı etkinleştirir ve yapılandırr.
Biçim
{
"runtime": {
"cache": "<object>"
}
}
Özellikler
Gerekli | Tür | |
---|---|---|
enabled |
❌ Hayır | Boolean |
ttl-seconds |
❌ Hayır | tam sayı |
Örnekler
Bu örnekte önbellek etkinleştirilir ve öğelerin süresi 30 saniye sonra dolar.
{
"runtime": {
"cache": {
"enabled": true,
"ttl-seconds": 30
}
}
}
Etkin (Önbellek çalışma zamanı)
GEREKLI: ❌ Hayır
Tüm varlıklar için genel olarak önbelleğe almayı etkinleştirir. varsayılan olarak false
.
Biçim
{
"runtime": {
"cache": {
"enabled": "<boolean>"
}
}
}
Örnekler
Bu örnekte önbellek devre dışıdır.
{
"runtime": {
"cache": {
"enabled": false
}
}
}
Saniye olarak TTL (Önbellek çalışma zamanı)
GEREKLI: ❌ Hayır
Önbelleğe alınan öğeler için yaşam süresi (TTL) değerini saniyeler içinde yapılandırır. Bu süre geçtikten sonra, öğeler önbellekten otomatik olarak çıkarılır. Varsayılan değer 5
saniyedir.
Biçim
{
"runtime": {
"cache": {
"ttl-seconds": "<integer>"
}
}
}
Örnekler
Bu örnekte önbellek genel olarak etkinleştirilir ve tüm öğelerin süresi 15 saniye sonra dolar.
{
"runtime": {
"cache": {
"enabled": true,
"ttl-seconds": 15
}
}
}
Telemetri (çalışma zamanı)
GEREKLI: ❌ Hayır
Bu özellik, API günlüklerini merkezileştirmek için Application Insights'ı yapılandırmaktadır.
Varlık
GEREKLI: ✔️ Evet
entities
bölümü, veritabanı nesneleriyle ilgili API uç noktaları arasında bir köprü oluşturarak yapılandırma dosyasının çekirdeğini oluşturur. Bu bölüm veritabanı nesnelerini kullanıma sunulan uç noktalara eşler. Bu bölüm, özellik eşleme ve izin tanımını da içerir. Kullanıma sunulan her varlık ayrılmış bir nesnede tanımlanır. Nesnesinin özellik adı, kullanıma sunma varlığın adı olarak kullanılır.
Bu bölüm, özellik eşlemeleri ve izinler de dahil olmak üzere veritabanındaki her varlığın API'de nasıl temsil edilir olduğunu tanımlar. Her varlık kendi alt bölümünde kapsüllenir ve varlığın adı yapılandırma boyunca başvuru için anahtar görevi görür.
Biçim
{
"entities": {
"<entity-name>": {
"rest": {
"enabled": <true> (default) | <false>,
"path": "/entity-path", (default <entity-name>)
"methods": ["GET", "POST" (default)]
},
"graphql": {
"enabled": <true> (default) | <false>,
"type": {
"singular": "myEntity",
"plural": "myEntities"
},
"operation": "query" | "mutation" (default)
},
"source": {
"object": "database-object-name",
"type": "view" | "stored-procedure" | "table",
"key-fields": ["field-name"],
"parameters": {
"parameter-name": "parameter-value"
}
},
"mappings": {
"database-field-name": "field-alias"
},
"relationships": {
"relationship-name": {
"cardinality": "one" | "many",
"target.entity": "target-entity-name",
"source.fields": ["source-field-name"],
"target.fields": ["target-field-name"],
"linking.object": "linking-object-name",
"linking.source.fields": ["linking-source-field-name"],
"linking.target.fields": ["linking-target-field-name"]
}
},
"permissions": [
{
"role": "anonymous | authenticated | custom-role-name",
"actions": ["create" | "read" | "update" | "delete" | "*"],
"fields": {
"include": ["field-name"],
"exclude": ["field-name"]
},
"policy": {
"database": "<Expression>"
}
}
]
}
}
}
Özellikler
Gerekli | Tür | |
---|---|---|
source |
✔️ Evet | nesne |
permissions |
✔️ Evet | dizi |
rest |
❌ Hayır | nesne |
graphql |
❌ Hayır | nesne |
mappings |
❌ Hayır | nesne |
relationships |
❌ Hayır | nesne |
cache |
❌ Hayır | nesne |
Örnekler
Örneğin, bu JSON nesnesi Data API builder'a Author
adlı bir GraphQL varlığını ve /Author
yolu üzerinden erişilebilen bir REST uç noktasını kullanıma sunmasını bildirir.
dbo.authors
veritabanı tablosu varlığı destekler ve yapılandırma herkesin uç noktaya anonim olarak erişmesine olanak tanır.
{
"entities": {
"Author": {
"source": {
"object": "dbo.authors",
"type": "table"
},
"permissions": [
{
"role": "anonymous",
"actions": [
{
"action": "*"
}
]
}
]
}
}
}
Bu örnekte User
varlığı bildirmektedir. Bu ad User
, yapılandırma dosyasında varlıklara başvurulan herhangi bir yerde kullanılır. Aksi takdirde varlık adı uç noktalarla ilgili değildir.
{
"entities": {
"Book": {
"rest": {
"enabled": true,
"path": "/books",
"methods": ["GET", "POST", "PUT"]
},
"graphql": {
"enabled": true,
"type": {
"singular": "Book",
"plural": "Books"
},
"operation": "query"
},
"source": {
"object": "BooksTable",
"type": "table",
"key-fields": ["Id"],
"parameters": {}
},
"mappings": {
"id": "Id",
"title": "Title",
"authorId": "AuthorId"
},
"permissions": [
{
"role": "authenticated",
"actions": ["read"],
"fields": {
"include": ["id", "title"],
"exclude": []
},
"policy": {
"database": "@claims.userId eq @item.authorId"
}
},
{
"role": "admin",
"actions": ["create", "read", "update", "delete"],
"fields": {
"include": ["*"],
"exclude": []
},
"policy": {
"database": "@claims.userRoles has 'BookAdmin'"
}
}
]
}
}
}
Kaynak
GEREKLI: ✔️ Evet
{entity}.source
yapılandırması, API tarafından kullanıma sunulan varlık ile temel alınan veritabanı nesnesi arasındaki bağlantıyı tanımlamada çok önemlidir. Bu özellik, varlığın temsil ettiği veritabanı tablosunu, görünümünü veya saklı yordamını belirtir ve veri alma ve işleme için doğrudan bağlantı oluşturur.
Varlığın doğrudan tek bir veritabanı tablosuna veya koleksiyonuna eşlendiği basit senaryolar için kaynak özelliğin yalnızca bu veritabanı nesnesinin adına ihtiyacı vardır. Bu basitlik, yaygın kullanım örnekleri için hızlı kurulumu kolaylaştırır.
Biçim
{
...
"entities" {
"<entity-name>": {
...
"source": {
"object": "<string>",
"type": "<view> | <stored-procedure> | <table>",
"key-fields": [ "<array-of-strings>" ],
"parameters": {
"<name>": "<value>",
"<name>": "<value>"
}
}
}
}
}
Özellikler
Gerekli | Tür | |
---|---|---|
object |
✔️ Evet | dizgi |
type |
✔️ Evet | sabit listesi dizesi |
parameters |
❌ Hayır | nesne |
key-fields |
❌ Hayır | dize dizisi |
Örnekler
Bu örnekte, bir varlığı kaynak tabloyla ilişkilendirmek için en basit yapı gösterilmektedir.
{
"entities": {
"Author": {
"source": {
"object": "dbo.authors",
"type": "table"
}
}
}
}
Çoka çok ilişkisinin bir ek haritası aşağıdadır.
{
"entities": {
"Todo": {
"type": "stored-procedure",
"source": {
"type": "stored-procedure",
"object": "GetUserTodos"
},
"parameters": {
"UserId": 0,
"Completed": null,
"CategoryName": null
},
"mapping": {
"Id": "todo_id",
"Title": "todo_title",
"Description": "todo_description",
"Completed": "todo_completed"
}
}
}
}
- Saklı yordam tarafından yedeklenen
Todo
varlığı. - Kaynağın içindeki
type
özelliği, varlığın eşlendiği kaynak nesne türünü gösterenstored-procedure
olarak ayarlanır. - Kaynak içindeki
object
özelliği, veritabanındaki saklı yordamın adıdır.
Ayrıca bu örnekte , (isteğe bağlı) mapping
özelliği "Todo" varlığının yapılandırmasına eklenir. Varlıktaki (Id
, Title
, Description
ve Completed
) alanların temel alınan veri kaynağındaki veya saklı yordam parametrelerindeki karşılık gelen alanlarla (sırasıyla ,todo_id
, todo_title
, todo_description
ve todo_completed
) nasıl eşleneceğini belirtir. Bu eşleme, oluşturma/güncelleştirme işlemleri sırasında varlık ile saklı yordam arasında doğru verilerin geçirilmesini sağlar.
Önceki örnekte aşağıdaki SQL yordamı kullanılır.
CREATE PROCEDURE GetUserTodos
@UserId INT,
@Completed BIT = NULL,
@CategoryName NVARCHAR(100) = NULL
AS
BEGIN
SELECT t.*
FROM Todo t
INNER JOIN users_todos ut ON t.id = ut.todo_id
INNER JOIN Category c ON t.category_id = c.id
WHERE ut.user_id = @UserId
AND ISNULL(@Completed, t.completed)
AND ISNULL(@CategoryName, c.name)
END
-
@UserId
: Varsayılan değer içermeyen zorunlu parametre. -
@Completed
: İsteğe bağlı parametre. Sağlanırsa, yapılacakları tamamlanma durumlarına göre filtreler. -
@CategoryName
: İsteğe bağlı parametre. Sağlanırsa, yapılacakları kategori adına göre filtreler.
Aşağıda saklı yordam kullanan güncelleştirmeler için bir örnek verilmiştır.
{
"entities": {
"Todo": {
"type": "stored-procedure",
"source": {
"object": "UpsertTodo"
},
"method": "POST", // Specify the HTTP method as POST
"parameters": {
"Id": 0,
"Title": null,
"Description": null,
"Completed": null
}
}
}
}
Bu örnek, bu varlıkla etkileşime geçmek için HTTP yöntemini açıkça method özelliğini kullanarak POST
olarak ayarlar.
CREATE PROCEDURE UpsertTodo
@Id INT,
@Title NVARCHAR(100),
@Description NVARCHAR(255),
@Completed BIT
AS
BEGIN
SET NOCOUNT ON;
MERGE INTO Todo AS target
USING (VALUES (@Id, @Title, @Description, @Completed)) AS source (Id, Title, Description, Completed)
ON target.Id = source.Id
WHEN MATCHED THEN
UPDATE SET
Title = source.Title,
Description = source.Description,
Completed = source.Completed
WHEN NOT MATCHED THEN
INSERT (Id, Title, Description, Completed)
VALUES (source.Id, source.Title, source.Description, source.Completed);
END;
Nesne
GEREKLI: ✔️ Evet
Kullanılacak veritabanı nesnesinin adı.
Örnekler
Bu örnekte object
veritabanındaki dbo.books
nesnesine başvurur.
{
"entities": {
"Book": {
"source": {
"object": "dbo.books",
"type": "table"
}
}
}
}
Tür (varlıklar)
GEREKLI: ✔️ Evet
type
özelliği varlığın arkasındaki veritabanı nesnesinin türünü tanımlar; bunlar view
, table
ve stored-procedure
içerir.
type
özelliği gereklidir ve varsayılan değer yoktur.
Biçim
{
"entities" {
"<entity-name>": {
"type": "<view> | <stored-procedure> | <table>",
...
}
}
}
Değer
Bu özellik için izin verilen değerlerin listesi aşağıdadır:
Tarif | |
---|---|
table |
Tabloyu temsil eder. |
stored-procedure |
Saklı yordamı temsil eder. |
view |
Bir görünümü temsil eder. |
Örnekler
Bu örnekte, type
bu kaynağın veritabanındaki bir görünüm olduğunu gösterir. Bu değer, diğer değerlerin (ör. key-fields
) gerekli olup olmadığını etkiler.
{
"entities": {
"Category": {
"source": {
"object": "dbo.vw_category_details",
"type": "view",
"key-fields": [
"category_id"
]
}
}
}
}
Anahtar alanları
GEREKLI: ❌ Hayır
{entity}.key-fields
ayarı, görünümler tarafından yedeklenen varlıklar için gereklidir, böylece Veri API'si oluşturucusu gerekirse tek bir öğeyi nasıl tanımlayıp döndürebileceğini bilir.
type
key-fields
olmadan view
olarak ayarlanırsa, Veri API'si oluşturucu altyapısı başlatmayı reddeder.
Önemli
Nesne türü bir view
ise bu özellik gereklidir. Ayrıca bu özellik, nesne türünün birincil anahtar tanımlanmamış bir table
olmasıdır.
Biçim
{
"entities" {
"<entity-name>": {
...
"type": "view",
"key-fields": [ "<field-name>" ]
}
}
}
Örnekler
Bu örnekte anahtar alanı olarak belirtilen category_id
ile dbo.vw_category_details
görünümü kullanılır.
{
"entities": {
"Category": {
"source": {
"object": "dbo.vw_category_details",
"type": "view",
"key-fields": [
"category_id"
]
}
}
}
}
Parametre
GEREKLI: ❌ Hayır
{entity}.parameters
ayarı, saklı yordamlar tarafından yedeklenen varlıklar için önemlidir ve geliştiricilerin parametreleri ve varsayılan değerlerini belirtmesini sağlar. Parametreler, bir HTTP isteğinde belirli parametreler sağlanmazsa sistemin önceden tanımlanmış bu değerlere geri dönebilmesini sağlar.
Önemli
Nesne türü bir stored-procedure
ise bu özellik gereklidir.
Biçim
{
"entities" {
"<entity-name>": {
...
"type": "stored-procedure",
"parameters": {
"<parameter-name-1>" : "<default-value>",
"<parameter-name-2>" : "<default-value>",
"<parameter-name-3>" : "<default-value>"
}
}
}
}
Örnekler
Bu örnek, şu iki parametreyi geçiren dbo.stp_get_bestselling_books
saklı yordamı çağırır:
Değer | |
---|---|
depth |
25 |
list |
contoso-best-sellers |
{
"entities": {
"BestsellingBooks": {
"source": {
"object": "dbo.stp_get_bestselling_books",
"type": "stored-procedure",
"parameters": {
"depth": 25,
"list": "contoso-best-sellers"
}
}
}
}
}
İzinler
GEREKLI: ✔️ Evet
Bu bölüm, ilgili varlığa kimlerin erişebileceğini ve hangi eylemlere izin verilip verilmeyebileceğini tanımlar. İzinler bu bölümde rol koşullarıyla tanımlanır. Eylemler şunlar gibi tipik CRUD işlemleri olarak tanımlanır: create
, read
, update
ve delete
.
permissions
bölümü, ilgili varlığa kimlerin (roller açısından) erişebileceğini ve hangi eylemleri kullanabileceğini tanımlar. Eylemler her zamanki CRUD işlemleridir: create
, read
, update
, delete
.
Biçim
{
...
"entities": {
"<entity-name>": {
...
"permissions": [
{
...
"actions": [
"create",
"read",
"update",
"delete",
"execute"
],
}
]
}
}
}
Özellikler
Gerekli | Tür | |
---|---|---|
role |
✔️ Evet | dizgi |
actions (dize dizisi) veya actions (nesne dizisi) |
✔️ Evet | object veya dize dizisi |
Örnekler
Bu örnekte, tüm olası eylemlere erişim ile anonim bir rol tanımlanmıştır.
{
"entities": {
"Writer": {
"permissions": [
{
"role": "anonymous",
"actions": ["*"]
}
]
}
}
}
Alternatif olarak, joker karakter eylemini tanımlamak için bir nesne kullanılabilir.
{
"entities": {
"Editor": {
"permissions": [
{
"role": "anonymous",
"actions": [
{
"action": "*"
}
]
}
]
}
}
}
Ayrıca dize ve nesne dizisi eylemlerini karıştırabilir ve eşleştirebilirsiniz.
{
"entities": {
"Reviewer": {
"permissions": [
{
"role": "anonymous",
"actions": [
{
"action": "read"
},
"create"
]
}
]
}
}
}
Anonim Rol Anonim kullanıcıların secret-field
dışındaki tüm alanları okumasına izin verin.
"exclude": ["secret-field"]
ile "include": ["*"]
kullanımı, anonim kullanıcılardan secret-field
etkili bir şekilde gizlerken diğer tüm alanlara erişim sağlar.
Kimliği Doğrulanmış Rol Kimliği doğrulanmış kullanıcıların açıkça id
, title
ve secret-field
gibi belirli alanları okumasına ve güncelleştirmesine izin verin, ancak secret-field
hariç tutarak.
exclude
önceliğini gösteren secret-field
'in açık eklenmesini ve sonraki dışlanmasını gösterir.
secret-field
hem dahil hem de dışlandığından erişilemez hale gelir ve bu da öncelik alan exclude
hedeflenen kuralıyla eşleşir.
Yazar Rolü Yazarlar, dışlama olmadan tüm alanlarda *
tüm işlemleri yapabilir. Dosya, boş bir "exclude": []
dizisi olan "include": ["*"]
tüm alanlara erişim izni verir, hiçbir alan açıkça dışlanmaz.
Hiçbir şey belirtilmezse bu yapılandırma varsayılanı temsil eder.
"fields": {
"include": [],
"exclude": []
}
Etkili bir şekilde şu şekilde aynıdır:
"fields": {
"include": [ "*" ],
"exclude": []
}
Ayrıca aşağıdaki kurulumu da göz önünde bulundurun:
"fields": {
"include": [],
"exclude": ["*"]
}
Önceki yapılandırma etkin bir şekilde hiçbir alanın dahil olmadığını ("include": []
boş olduğunu, alanlara izin verilmediğini belirtir) ve tüm alanların dışlandığını belirtir ("exclude": ["*"]
tüm alanları belirtmek için joker karakter *
kullanır).
Pratik Kullanım: Bu tür bir yapılandırma, tüm alanlara erişimi kısıtladığından uyumsuz görünebilir. Ancak, bir rolün verilerine erişmeden varlık oluşturma gibi belirli eylemleri gerçekleştirebileceği senaryolarda kullanılabilir.
Aynı davranış, ancak farklı söz dizimi ile şu şekilde olacaktır:
"fields": {
"include": ["Id", "Title"],
"exclude": ["*"]
}
Önceki kurulum, yalnızca Id
ve Title
alanlarının dahil edilmesi gerektiğini belirtmeye çalışırken, exclude
bölümündeki joker karakter *
tüm alanların dışlanması gerektiğini de belirtir. Aynı mantığı ifade etmenin başka bir yolu da şu olabilir:
"fields": {
"include": ["Id", "Title"],
"exclude": ["Id", "Title"]
}
exclude
listesinin include
listesinden öncelikli olduğu genel kuralı göz önünde bulundurulduğunda, exclude: ["*"]
belirtilmesi genellikle include
bölümünde listelenen alanlar bile dahil tüm alanların dışlandığı anlamına gelir. Bu nedenle, dışlama kuralı baskın olduğundan, bu yapılandırma ilk bakışta herhangi bir alanın erişilebilir olmasını engelliyor gibi görünebilir.
ters
"fields": {
"include": ["Id", "Title"],
"exclude": []
}
Rol
GEREKLI: ✔️ Evet
Tanımlanan iznin uygulandığı rolün adını içeren dize.
role
dizesi, tanımlı iznin uygulandığı rolün adını içerir.
Roller, bir isteğin yürütülmesi gereken izin bağlamını ayarlar. Çalışma zamanı yapılandırmasında tanımlanan her varlık için, varlığa hem REST hem de GraphQL uç noktalarında nasıl erişilebileceğini belirleyen bir rol kümesi ve ilişkili izinler tanımlayabilirsiniz. Roller ekli değildir. Roller hakkında daha fazla bilgi için bkz. yetkilendirme
Veri API oluşturucusu istekleri tek bir rol bağlamında değerlendirir:
Rol | Tarif |
---|---|
anonymous |
Erişim belirteci sunulmaz |
authenticated |
Geçerli bir erişim belirteci sunulur |
<custom-role> |
Geçerli bir erişim belirteci sunulur ve X-MS-API-ROLE HTTP üst bilgisi, erişim belirtecinin rol talebine de dahil olan bir kullanıcı rolü belirterek eklenir |
Biçim
{
"entities": {
"entity-name": {
"permissions": [
{
"role": "anonymous" | "authenticated" | "custom-role",
"actions": [
"create",
"read",
"update",
"delete",
"execute", // only when stored-procedure
"*"
],
"fields": {
"include": ["field-name", "field-name"],
"exclude": ["field-name", "field-name"]
}
}
]
}
}
}
Örnekler
Bu örnek, uç noktada yalnızca read
izinlerine sahip reader
adlı bir rolü tanımlar.
{
"entities": {
"Book": {
"permissions": [
{
"role": "reader",
"actions": [
"read"
]
}
]
}
}
}
Eylemler (dize dizisi)
GEREKLI: ✔️ Evet
İlişkili rol için izin verilen işlemlerin ayrıntılarını gösteren dize değerleri dizisi.
table
ve view
veritabanı nesneleri için roller, create
, read
, update
veya delete
eylemlerinin herhangi bir bileşimini kullanacak şekilde yapılandırılabilir. Saklı yordamlar için roller yalnızca execute
eylemine sahip olabilir.
actions
dizisi, ilişkili rolde izin verilen eylemlerin ayrıntılarını verir. Varlık bir tablo veya görünüm olduğunda roller, create
, read
, update
delete
eylemlerinin bir bileşimiyle yapılandırılabilir.
Eylem | SQL İşlemi |
---|---|
* |
Yürütme dahil joker karakter |
create |
Bir veya daha fazla satır ekleme |
read |
Bir veya daha fazla satır seçme |
update |
Bir veya daha fazla satırı değiştirme |
delete |
Bir veya daha fazla satırı silme |
execute |
Saklı yordam çalıştırır |
Not
Saklı yordamlar için joker karakter (*
) eylemi yalnızca execute
eylemini içeren bir listeye genişletir. Tablolar ve görünümler için joker eylem, create
, read
, update
ve delete
eylemleri içeren bir listeye genişletilir.
Örnekler
Bu örnek, contributor
adlı ilk rol için create
ve read
izinleri verir.
auditor
adlı ikinci rolün yalnızca delete
izinleri vardır.
{
"entities": {
"CheckoutLogs": {
"permissions": [
{
"role": "auditor",
"actions": [
"delete"
]
},
{
"role": "contributor",
"actions": [
"read",
"create"
]
}
]
}
}
}
İşte başka bir örnek.
{
...
"entities": {
"<entity-name>": {
...
"permissions": [
{
"role": "contributor",
"actions": ["read", "create"]
}
]
}
}
}
Eylemler (nesne dizisi)
GEREKLI: ✔️ Evet
İlişkili rol için izin verilen işlemlerin ayrıntılarını gösteren dize değerleri dizisi.
table
ve view
veritabanı nesneleri için roller, create
, read
, update
veya delete
eylemlerinin herhangi bir bileşimini kullanacak şekilde yapılandırılabilir. Saklı yordamlar için roller yalnızca execute
eylemine sahip olabilir.
Not
Saklı yordamlar için joker karakter (*
) eylemi yalnızca execute
eylemini içeren bir listeye genişletir. Tablolar ve görünümler için joker eylem, create
, read
, update
ve delete
eylemleri içeren bir listeye genişletilir.
Biçim
{
"entities": {
"<string>": {
"permissions": [
{
"role": "<string>",
"actions": [
{
"action": "<string>",
"fields": ["<string-array>"],
"policy": "object"
}
]
}
]
}
}
}
Özellikler
Gerekli | Tür | |
---|---|---|
action |
✔️ Evet | dizgi |
fields |
❌ Hayır | dize dizisi |
policy |
❌ Hayır | nesne |
Örnekler
Bu örnek, auditor
rolüne yalnızca read
izin verir.
auditor
rolü yalnızca policy.database
içinde tanımlanan koşulu kullanarak belirli verileri okuyabilir.
auditor
rolü, fields
özelliğini kullanarak okuyabileceği veya okuyabileceği alanlarda da sınırlıdır.
{
"entities": {
"CheckoutLogs": {
"permissions": [
{
"role": "auditor",
"actions": [
{
"action": "read",
"fields": {
"include": ["*"],
"exclude": ["last_updated"]
},
"policy": {
"database": "@item.LogDepth lt 3"
}
}
]
}
]
}
}
}
Eylem
GEREKLI: ✔️ Evet
Veritabanı nesnesinde izin verilen işlemi belirtir.
Değer
Bu özellik için izin verilen değerlerin listesi aşağıdadır:
Tablo | Görünümler | Saklı Yordamlar | Tarif | |
---|---|---|---|---|
create |
✔️ Evet | ✔️ Evet | ❌ Hayır | Yeni öğe oluşturma |
read |
✔️ Evet | ✔️ Evet | ❌ Hayır | Var olan öğeleri puan okuma |
update |
✔️ Evet | ✔️ Evet | ❌ Hayır | Varolan öğeleri güncelleştirme veya değiştirme |
delete |
✔️ Evet | ✔️ Evet | ❌ Hayır | Varolan öğeleri kaldırma |
execute |
❌ Hayır | ❌ Hayır | ✔️ Evet | Programlı işlemleri yürütme |
Örnekler
Aşağıda, anonymous
kullanıcıların belirli bir saklı yordamı execute
ve belirli bir tabloyu read
izin verilen bir örnek verilmiştır.
{
"entities": {
"Author": {
"source": {
"object": "dbo.authors",
"type": "table"
},
"permissions": [
{
"role": "anonymous",
"actions": [
{
"action": "read"
}
]
}
]
},
"BestSellingAuthor": {
"source": {
"object": "dbo.stp_get_bestselling_authors",
"type": "stored-procedure",
"parameters": {
"depth": 10
}
},
"permissions": [
{
"role": "anonymous",
"actions": [
{
"action": "execute"
}
]
}
]
}
}
}
Alanları
GEREKLI: ❌ Hayır
Veritabanı nesnesi için belirli alanlara erişim izni verilen ayrıntılı belirtimler. Rol yapılandırması, include
ve exclude
olmak üzere iki iç özelliğe sahip bir nesne türüdür. Bu değerler, fields
bölümünde hangi veritabanı sütunlarına (alanlar) erişim izni verileceği ayrıntılı olarak tanımlanmasını destekler.
Biçim
{
...
"entities": {
"<entity-name>": {
...
"permissions": [
{
{
...
"fields": {
"include": ["<field-name>"],
"exclude": ["<field-name>"]
}
}
}
]
}
}
}
Örnekler
Bu örnekte, anonymous
rolünün id
dışındaki tüm alanlardan okumasına izin verilir, ancak öğe oluştururken tüm alanları kullanabilir.
{
"entities": {
"Author": {
"permissions": [
{
"role": "anonymous",
"actions": [
{
"action": "read",
"fields": {
"include": ["*"],
"exclude": ["id"]
}
},
{ "action": "create" }
]
}
]
}
}
}
Birlikte çalışmayı dahil edin ve hariç tutun.
include
bölümündeki joker karakter *
tüm alanları gösterir.
exclude
bölümünde belirtilen alanların, include
bölümünde belirtilen alanlara göre önceliği vardır. Tanım, "last_updated" alanı dışındaki tüm alanları
"Book": {
"source": "books",
"permissions": [
{
"role": "anonymous",
"actions": [ "read" ],
// Include All Except Specific Fields
"fields": {
"include": [ "*" ],
"exclude": [ "secret-field" ]
}
},
{
"role": "authenticated",
"actions": [ "read", "update" ],
// Explicit Include and Exclude
"fields": {
"include": [ "id", "title", "secret-field" ],
"exclude": [ "secret-field" ]
}
},
{
"role": "author",
"actions": [ "*" ],
// Include All With No Exclusions (default)
"fields": {
"include": ["*"],
"exclude": []
}
}
]
}
Politika
GEREKLI: ❌ Hayır
action
başına tanımlanan policy
bölümü, bir istekten döndürülen sonuçları sınırlayan öğe düzeyi güvenlik kurallarını (veritabanı ilkeleri) tanımlar.
database
alt bölümü, istek yürütme sırasında değerlendirilen veritabanı ilkesi ifadesini belirtir.
Biçim
{
"entities": {
"<entity-name>": {
"permissions": [
{
"role": "<string>",
"actions": [
{
"action": "<string>",
"fields": ["<string-array>"],
"policy": {
"database": "<string>"
}
}
]
}
]
}
}
}
Özellikler
Gerekli | Tür | |
---|---|---|
database |
✔️ Evet | dizgi |
Tarif
database
ilkesi: sorguya çevrilen OData benzeri bir ifade, eq
, lt
ve gt
gibi işleçler de dahil olmak üzere veritabanının değerlendirmesini koşullaştırır. Bir istek için sonuçların döndürülmesi için, bir veritabanı ilkesinden çözümlenen isteğin sorgu koşulu, veritabanında yürütülürken true
olarak değerlendirilmelidir.
Örnek Öğe İlkesi | Yüklem |
---|---|
@item.OwnerId eq 2000 |
WHERE Table.OwnerId = 2000 |
@item.OwnerId gt 2000 |
WHERE Table.OwnerId > 2000 |
@item.OwnerId lt 2000 |
WHERE Table.OwnerId < 2000 |
predicate
, DOĞRU veya YANLIŞ olarak değerlendirilen bir ifadedir. Koşullar,WHERE yan tümcelerinin ve HAVING yan tümcelerinin, from yan tümcelerinin birleşim koşullarının ve Boole değerinin gerekli olduğu diğer yapıların arama koşulunda kullanılır. (Microsoft Learn Docs)
Veritabanı ilkesi
Veritabanı ilkesi ifadesi yazılırken veritabanı ilkesini yönetmek için iki tür yönerge kullanılabilir:
Yönergesi | Tarif |
---|---|
@claims |
İstekte sağlanan doğrulanmış erişim belirteci içinde bir talepe erişme |
@item |
Veritabanı ilkesinin tanımlandığı varlığın alanını temsil eder |
Not
Azure Static Web Apps kimlik doğrulaması (EasyAuth)
Aşağıda birkaç örnek veritabanı ilkesi verilmişti:
@claims.UserId eq @item.OwnerId
@claims.UserId gt @item.OwnerId
@claims.UserId lt @item.OwnerId
Veri API oluşturucusu, UserId
talebi değerini OwnerId
veritabanı alanının değeriyle karşılaştırır. Sonuç yükü yalnızca hem istek meta verileri hem de veritabanı ilkesi ifadesi
Sınırlama
Veritabanı ilkeleri tablolar ve görünümler için desteklenir. Saklı yordamlar ilkelerle yapılandırılamaz.
Veritabanı ilkeleri, isteklerin veritabanında yürütülmesini engellemez. Bunun nedeni, bunların veritabanı altyapısına geçirilen oluşturulan sorgularda koşul olarak çözümlenmesidir.
Veritabanı ilkeleri yalnızca
Desteklenen OData benzeri işleçler
Operatör | Tarif | Örnek Söz Dizimi |
---|---|---|
and |
Mantıksal AND | "@item.status eq 'active' and @item.age gt 18" |
or |
Mantıksal VEYA | "@item.region eq 'US' or @item.region eq 'EU'" |
eq |
Eşit -tir | "@item.type eq 'employee'" |
gt |
Büyüktür | "@item.salary gt 50000" |
lt |
Küçüktür | "@item.experience lt 5" |
Daha fazla bilgi için bkz.ikili işleçleri
Operatör | Tarif | Örnek Söz Dizimi |
---|---|---|
- |
Negate (sayısal) | "@item.balance lt -100" |
not |
Mantıksal negate (DEĞİl) | "not @item.status eq 'inactive'" |
Daha fazla bilgi için bkz.birli işleçleri
Varlık alanı adı kısıtlamaları
-
Kuralları: Bir harf veya alt çizgi (
_
) ile başlayıp en çok 127 harf, alt çizgi (_
) veya rakamlarla (0-9
) başlamalıdır. - Etki: Bu kurallara uymayan alanlar doğrudan veritabanı ilkelerinde kullanılamaz.
-
Çözüm: Bu adlandırma kurallarına uymayen alanlar için diğer adlar oluşturmak üzere
mappings
bölümünü kullanın; eşlemeleri, tüm alanların ilke ifadelerine eklenebilmesini sağlar.
Uyumsuz alanlar için mappings
kullanma
Varlık alanı adlarınız OData söz dizimi kurallarına uymuyorsa veya bunları başka nedenlerle diğer ad olarak kullanmak istiyorsanız, yapılandırmanızın mappings
bölümünde diğer adlar tanımlayabilirsiniz.
{
"entities": {
"<entity-name>": {
...
"mappings": {
"<field-1-name>" : "<field-1-alias>",
"<field-2-name>" : "<field-2-alias>",
"<field-3-name>" : "<field-3-alias>"
}
}
}
}
Bu örnekte field-1-name
, OData adlandırma kurallarına uymayan özgün veritabanı alanı adıdır.
field-1-name
ve field-1-alias
eşlemesi oluşturmak, bu alana sorun olmadan veritabanı ilkesi ifadelerinde başvurulmasını sağlar. Bu yaklaşım yalnızca OData adlandırma kurallarına uymaya yardımcı olmakla kalmaz, aynı zamanda hem GraphQL hem de RESTful uç noktalarındaki veri modelinizin netliğini ve erişilebilirliğini artırır.
Örnekler
Hem talep hem de öğe yönergelerini kullanan bir Veri API'si yapılandırmasında Employee
adlı bir varlığı düşünün. Veri erişiminin kullanıcı rollerine ve varlık sahipliğine göre güvenli bir şekilde yönetilmesini sağlar:
{
"entities": {
"Employee": {
"source": {
"object": "HRUNITS",
"type": "table",
"key-fields": ["employee NUM"],
"parameters": {}
},
"mappings": {
"employee NUM": "EmployeeId",
"employee Name": "EmployeeName",
"department COID": "DepartmentId"
},
"policy": {
"database": "@claims.role eq 'HR' or @claims.UserId eq @item.EmployeeId"
}
}
}
}
Varlık Tanımı: Employee
varlığı REST ve GraphQL arabirimleri için yapılandırılır ve verileri bu uç noktalar aracılığıyla sorgulanabilir veya işlenebilir.
Kaynak Yapılandırma: Veritabanındaki HRUNITS
tanımlar ve anahtar alanı olarak employee NUM
.
Eşlemeleri: Diğer adlar, employee NUM
, employee Name
ve department COID
sırasıyla EmployeeId
, EmployeeName
ve DepartmentId
ile eşlemek için kullanılır ve alan adlarını basitleştirir ve hassas veritabanı şeması ayrıntılarını gizler.
İlke Uygulaması: policy
bölümü, OData benzeri bir ifade kullanarak bir veritabanı ilkesi uygular. Bu ilke, veri erişimini İk rolüne (@claims.role eq 'HR'
) sahip kullanıcılarla veya UserId
talebi veritabanındaki (@claims.UserId eq @item.EmployeeId
) alan diğer adı EmployeeId
eşleşen kullanıcılarla kısıtlar. Çalışanların İk departmanına ait olmadığı sürece yalnızca kendi kayıtlarına erişebilmelerini sağlar. İlkeler, dinamik koşullara göre satır düzeyi güvenliği zorunlu kılabilir.
Veritabanı
GEREKLI: ✔️ Evet
Bu özellik, istek yürütme sırasında değerlendirilen veritabanı ilkesi ifadesini belirtir. İlke dizesi, veritabanı tarafından önceden değerlendirilen bir sorguya çevrilen bir OData ifadesidir. Örneğin, @item.OwnerId eq 2000
ilke ifadesi WHERE <schema>.<object-name>.OwnerId = 2000
sorgu koşuluna çevrilir.
Not
koşulu, TRUE
, FALSE
veya UNKNOWN
'a kaçan bir ifadedir. Önkoşullar şu durumlarda kullanılır:
-
WHERE
yan tümcelerinin arama koşulu -
FROM
yan tümcelerinin arama koşulu -
FROM
yan tümcelerinin birleştirme koşulları - Boole değerinin gerekli olduğu diğer yapılar.
Daha fazla bilgi için bkz.
Bir istek için sonuçların döndürülmesi için, bir veritabanı ilkesinden çözümlenen isteğin sorgu koşulu, veritabanında yürütülürken true
olarak değerlendirilmelidir.
Veritabanı ilkesi ifadesi yazılırken veritabanı ilkesini yönetmek için iki tür yönerge kullanılabilir:
Tarif | |
---|---|
@claims |
İstekte sağlanan doğrulanmış erişim belirteci içinde bir talebe erişir |
@item |
Veritabanı ilkesinin tanımlandığı varlığın alanını temsil eder |
Not
Azure Static Web Apps kimlik doğrulaması (EasyAuth) yapılandırıldığında veritabanı ilkelerinde sınırlı sayıda talep türü kullanılabilir. Bu talep türleri şunlardır: identityProvider
, userId
, userDetails
ve userRoles
. Daha fazla bilgi için bkz.Azure Static Web Apps istemci sorumlusu verilerini
Örnekler
Örneğin, temel bir ilke ifadesi tablo içinde belirli bir alanın doğru olup olmadığını değerlendirebilir. Bu örnek, soft_delete
alanının false
olup olmadığını değerlendirir.
{
"entities": {
"Manuscripts": {
"permissions": [
{
"role": "anonymous",
"actions": [
{
"action": "read",
"policy": {
"database": "@item.soft_delete eq false"
}
}
]
}
]
}
}
}
Önkoşullar hem claims
hem de item
yönerge türlerini de değerlendirebilir. Bu örnek, erişim belirtecinden UserId
alanını çeker ve hedef veritabanı tablosundaki owner_id
alanıyla karşılaştırır.
{
"entities": {
"Manuscript": {
"permissions": [
{
"role": "anonymous",
"actions": [
{
"action": "read",
"policy": {
"database": "@claims.UserId eq @item.owner_id"
}
}
]
}
]
}
}
}
Sınırlama
- Veritabanı ilkeleri tablolar ve görünümler için desteklenir. Saklı yordamlar ilkelerle yapılandırılamaz.
- Veritabanı ilkeleri, bir isteğin veritabanı içinde yürütülmesini önlemek için kullanılamaz. Bu sınırlama, veritabanı ilkelerinin oluşturulan veritabanı sorgularında sorgu koşulu olarak çözümlenmesidir. Veritabanı altyapısı sonuçta bu sorguları değerlendirir.
- Veritabanı ilkeleri yalnızca
actions
create
,read
,update
vedelete
için desteklenir. - Veritabanı ilkesi OData ifadesinin söz dizimi yalnızca bu senaryoları destekler.
- bunlarla sınırlı olmamak üzere ikili işleçler;
and
,or
,eq
,gt
velt
. Daha fazla bilgi için bkz.BinaryOperatorKind
. -
-
(negate) venot
işleçleri gibi tekli işleçler. Daha fazla bilgi için bkz.UnaryOperatorKind
.
- bunlarla sınırlı olmamak üzere ikili işleçler;
- Veritabanı ilkelerinin alan adlarıyla ilgili kısıtlamaları da vardır.
- Bir harf veya alt çizgiyle başlayan ve en çok 127 harf, alt çizgi veya basamak içeren varlık alanı adları.
- Bu gereksinim OData belirtimlerine göredir. Daha fazla bilgi için bkz. OData Common Schema Definition Language.
Bahşiş
Belirtilen kısıtlamalara uymayan alanlara veritabanı ilkelerinde başvurulamaz. Geçici bir çözüm olarak, alanlara uygun diğer adlar atamak için varlığı eşlemeler bölümüyle yapılandırın.
GraphQL (varlıklar)
GEREKLI: ❌ Hayır
Bu nesne GraphQL'in etkinleştirilip etkinleştirilmediğini ve varlığı bir GraphQL türü olarak kullanıma açmak için kullanılan adı[s] tanımlar. Bu nesne isteğe bağlıdır ve yalnızca varsayılan ad veya ayarlar yeterli değilse kullanılır.
Bu kesim, bir varlığı GraphQL şemasıyla tümleştirmeyi sağlar. Geliştiricilerin GraphQL'de varlık için varsayılan değerleri belirtmesine veya değiştirmesine olanak tanır. Bu kurulum, şemanın hedeflenen yapıyı ve adlandırma kurallarını doğru şekilde yansıtmasını sağlar.
Biçim
{
"entities" {
"<entity-name>": {
...
"graphql": {
"enabled": <true> (default) | <false>,
"type": {
"singular": "my-alternative-name",
"plural": "my-alternative-name-pluralized"
},
"operation": "query" | "mutation" (default)
},
}
}
}
{
"entities": {
"<string>": {
"graphql": "<boolean>"
}
}
}
{
"entities": {
"<string>": {
"graphql": {
"enabled": "<boolean>",
"type": "<string-or-object>",
"operation": "<enum-string>"
}
}
}
}
Özellikler
Gerekli | Tür | |
---|---|---|
enabled |
❌ Hayır | Boolean |
type |
❌ Hayır | dize veya nesne |
operation |
❌ Hayır | sabit listesi dizesi |
Örnekler
Bu iki örnek işlevsel olarak eşdeğerdir.
{
"entities": {
"Author": {
"graphql": true
}
}
}
{
"entities": {
"Author": {
"graphql": {
"enabled": true
}
}
}
}
Bu örnekte, tanımlanan varlık Book
, veritabanındaki kitaplarla ilgili bir veri kümesiyle ilgilendiğimizi gösterir. GraphQL segmentindeki Book
varlığının yapılandırması, GraphQL şemasında nasıl temsil edilmesi ve etkileşime alınması gerektiği konusunda net bir yapı sunar.
Enabled özelliği: Book
varlığı GraphQL ("enabled": true
) aracılığıyla kullanılabilir hale getirilmiştir. Bu, geliştiricilerin ve kullanıcıların GraphQL işlemleri aracılığıyla kitap verilerini sorgulayıp sessize almalarını sağlar.
Type özelliği: Varlık tekil ad "Book"
ve Çoğul ad "Books"
GraphQL şemasında gösterilir. Bu ayrım, tek bir kitabı veya birden çok kitabı sorgularken şemanın sezgisel olarak adlandırılmış türler (tek bir giriş içinBook
, bir liste için Books
) sunmasını ve API'nin kullanılabilirliğini geliştirmesini sağlar.
operation özelliği: İşlem "query"
olarak ayarlanır ve GraphQL aracılığıyla Book
varlığıyla birincil etkileşimin verileri sessize almak (oluşturmak, güncelleştirmek veya silmek) yerine sorgulamak (almak) hedeflendiğini belirtir. Bu kurulum, kitap verilerinin değiştirildiğinden daha sık okunduğu tipik kullanım desenleriyle hizalanır.
{
"entities": {
"Book": {
...
"graphql": {
"enabled": true,
"type": {
"singular": "Book",
"plural": "Books"
},
"operation": "query"
},
...
}
}
}
Tür (GraphQL varlığı)
GEREKLI: ❌ Hayır
Bu özellik, GraphQL şeması içindeki bir varlığın adlandırma kuralını belirler. Hem skaler dize değerlerini hem de nesne türlerini destekler. Nesne değeri tekil ve çoğul formları belirtir. Bu özellik, şemanın okunabilirliği ve kullanıcı deneyimi üzerinde ayrıntılı denetim sağlar.
Biçim
{
"entities": {
"<string>": {
"graphql": {
"type": "<string>"
}
}
}
}
{
"entities": {
"<string>": {
"graphql": {
"type": {
"singular": "<string>",
"plural": "<string>"
}
}
}
}
}
Özellikler
Gerekli | Tür | |
---|---|---|
singular |
❌ Hayır | dizgi |
plural |
❌ Hayır | dizgi |
Örnekler
GraphQL türü üzerinde daha da fazla denetim için tekil ve çoğul adın nasıl bağımsız olarak temsil edilir yapılandırabilirsiniz.
plural
eksikse veya atlanırsa (skaler değer gibi) Veri API'si oluşturucusu, çoğullaştırma için İngilizce kuralları izleyerek adı otomatik olarak çoğullaştırmaya çalışır (örneğin: https://engdic.org/singular-and-plural-noun-rules-definitions-examples)
{
"entities" {
"<entity-name>": {
...
"graphql": {
...
"type": {
"singular": "User",
"plural": "Users"
}
}
}
}
}
Özel varlık adı, dize değeriyle type
parametresi kullanılarak belirtilebilir. Bu örnekte altyapı, çoğullaştırma için yaygın İngilizce kurallarını kullanarak bu adın tekil ve çoğul varyantları arasında otomatik olarak ayrımlar oluşturur.
{
"entities": {
"Author": {
"graphql": {
"type": "bookauthor"
}
}
}
}
Adları açıkça belirtmeyi seçerseniz, type.singular
ve type.plural
özelliklerini kullanın. Bu örnek her iki adı da açıkça ayarlar.
{
"entities": {
"Author": {
"graphql": {
"type": {
"singular": "bookauthor",
"plural": "bookauthors"
}
}
}
}
}
her iki örnek de işlevsel olarak eşdeğerdir. her ikisi de bookauthors
varlık adını kullanan bir GraphQL sorgusu için aynı JSON çıkışını döndürür.
{
bookauthors {
items {
first_name
last_name
}
}
}
{
"data": {
"bookauthors": {
"items": [
{
"first_name": "Henry",
"last_name": "Ross"
},
{
"first_name": "Jacob",
"last_name": "Hancock"
},
...
]
}
}
}
İşlem (GraphQL varlığı)
GEREKLI: ❌ Hayır
Saklı yordamlara eşlenen varlıklar için operation
özelliği saklı yordamın erişilebilir olduğu GraphQL işlem türünü (sorgu veya mutasyon) tanımlar. Bu ayar, işlevselliği etkilemeden şemanın mantıksal olarak düzenlenmesine ve GraphQL en iyi yöntemlerine bağlı kalınmasına olanak tanır.
Not
{entity}.type
özellik değeri stored-procedure
olarak ayarlanarak bir varlık saklı yordam olarak belirtilir. Saklı yordam söz konusu olduğunda, yeni bir GraphQL türü executeXXX otomatik olarak oluşturulur. Ancak operation
özelliği, geliştiricinin bu türün konumunu şemanın mutation
veya query
bölümlerine zorlamasına olanak tanır. Bu özellik şema hegenesine izin verir ve operation
değerden bağımsız olarak işlevsel bir etki yoktur.
Eksikse, varsayılan operation
mutation
olur.
Biçim
{
"entities": {
"<string>": {
"graphql": {
"operation": "<string-enum>"
}
}
}
}
Değer
Bu özellik için izin verilen değerlerin listesi aşağıdadır:
Tarif | |
---|---|
query |
Temel alınan saklı yordam sorgu olarak kullanıma sunulur |
mutation |
Temel alınan saklı yordam bir mutasyon olarak ortaya çıkar |
Örnekler
operation
mutation
olduğunda GraphQL şeması şuna benzer olacaktır:
type Mutation {
executeGetCowrittenBooksByAuthor(
searchType: String = "S"
): [GetCowrittenBooksByAuthor!]!
}
operation
query
olduğunda GraphQL şeması şuna benzer olacaktır:
GraphQL şeması şuna benzer olacaktır:
type Query {
executeGetCowrittenBooksByAuthor(
searchType: String = "S"
): [GetCowrittenBooksByAuthor!]!
}
Not
operation
özelliği yalnızca işlemin GraphQL şemasına yerleştirilmesiyle ilgili, işlemin davranışını değiştirmez.
Etkin (GraphQL varlığı)
GEREKLI: ❌ Hayır
GraphQL uç noktasını etkinleştirir veya devre dışı bırakır. Bir varlığın GraphQL uç noktaları aracılığıyla kullanılabilir olup olmadığını denetler.
enabled
özelliğinin geçişini yapmak, geliştiricilerin GraphQL şemasındaki varlıkları seçmeli olarak kullanıma sunmalarına olanak tanır.
Biçim
{
"entities" {
"<entity-name>": {
...
"graphql": {
...
"enabled": true | false
}
}
}
}
REST (varlıklar)
GEREKLI: ❌ Hayır
Yapılandırma dosyasının rest
bölümü, her veritabanı varlığı için RESTful uç noktalarına ince ayar yapmaya ayrılmıştır. Bu özelleştirme özelliği, kullanıma sunulan REST API'nin belirli gereksinimlerle eşleşmesini sağlayarak hem yardımcı programı hem de tümleştirme özelliklerini geliştirir. Varsayılan çıkarılmış ayarlar ve istenen uç nokta davranışları arasındaki olası uyuşmazlıkları giderir.
Biçim
{
"entities": {
"<entity-name>": {
"rest": {
"enabled": <true> (default) | <false>,
"path": "/entity-path", (default <entity-name>)
"methods": ["GET", "POST" (default)]
},
...
}
}
}
Özellikler
Gerekli | Tür | |
---|---|---|
enabled |
✔️ Evet | Boolean |
path |
❌ Hayır | dizgi |
methods |
❌ Hayır | dize dizisi |
Örnekler
Bu iki örnek işlevsel olarak eşdeğerdir.
{
"entities": {
"Author": {
"source": {
"object": "dbo.authors",
"type": "table"
},
"permissions": [
{
"role": "anonymous",
"actions": ["*"]
}
],
"rest": true
}
}
}
{
"entities": {
"Author": {
...
"rest": {
"enabled": true
}
}
}
}
Bir varlık için REST yapılandırmasının başka bir örneği aşağıda verilmiştir.
{
"entities" {
"User": {
"rest": {
"enabled": true,
"path": "/User"
},
...
}
}
}
Etkin (REST varlığı)
GEREKLI: ❌ Hayır
Bu özellik, REST API içindeki varlıkların görünürlüğü için bir iki durumlu düğme işlevi görür. geliştiriciler, enabled
özelliğini true
veya false
olarak ayarlayarak belirli varlıklara erişimi denetleyerek uygulama güvenliği ve işlevsellik gereksinimleriyle uyumlu uyarlanmış bir API yüzeyi sağlar.
Atlanırsa veya eksikse, varsayılan enabled
değeri true
olur.
Biçim
{
"entities" {
"<entity-name>": {
...
"rest": {
"enabled": <true> (default) | <false>
}
}
}
}
Yol (REST varlığı)
GEREKLI: ❌ Hayır
path
özelliği, REST API aracılığıyla bir varlığa erişmek için kullanılan URI kesimini belirtir. Bu özelleştirme, varsayılan varlık adının ötesinde daha açıklayıcı veya basitleştirilmiş uç nokta yolları sağlayarak API'de gezinilebilirliği ve istemci tarafı tümleştirmesini geliştirir. Varsayılan olarak, yol /<entity-name>
.
Biçim
{
"entities" {
"<entity-name>": {
...
"rest": {
...
"path": "/entity-path"
}
}
}
}
Örnekler
Bu örnek, /auth
uç noktasını kullanarak Author
varlığını kullanıma sunar.
{
"entities": {
"Author": {
"rest": {
"path": "/auth"
}
}
}
}
Yöntemler (REST varlığı)
GEREKLI: ❌ Hayır
Saklı yordamlara özel olarak geçerli olan methods
özelliği, yordamın yanıt verebileceği HTTP fiillerini (örneğin, GET, POST) tanımlar. Yöntemler, RESTful standartları ve istemci beklentileriyle uyumluluğu sağlayarak REST API aracılığıyla saklı yordamların nasıl kullanıma sunulduğu üzerinde hassas denetim sağlar. Bu bölümde, platformun esneklik ve geliştirici denetimine olan taahhüdü altı çizilir ve her uygulamanın özel ihtiyaçlarına göre uyarlanmış hassas ve sezgisel API tasarımı sağlanır.
Atlanırsa veya eksikse, varsayılan methods
POST
olur.
Biçim
{
"entities" {
"<entity-name>": {
...
"rest": {
...
"methods": [ "GET" (default), "POST" ]
}
}
}
}
Değer
Bu özellik için izin verilen değerlerin listesi aşağıdadır:
Tarif | |
---|---|
get |
HTTP GET isteklerini kullanıma sunar |
post |
HTTP POST isteklerini kullanıma sunar |
Örnekler
Bu örnek, altyapıya stp_get_bestselling_authors
saklı yordamının yalnızca HTTP GET
eylemleri desteklediğini açıklar.
{
"entities": {
"BestSellingAuthor": {
"source": {
"object": "dbo.stp_get_bestselling_authors",
"type": "stored-procedure",
"parameters": {
"depth": 10
}
},
"rest": {
"path": "/best-selling-authors",
"methods": [ "get" ]
}
}
}
}
Eşlemeler (varlıklar)
GEREKLI: ❌ Hayır
mappings
bölümü veritabanı nesnesi alanları için diğer adların veya kullanıma sunulan adların yapılandırılmasını sağlar. Yapılandırılmış kullanıma sunulan adlar hem GraphQL hem de REST uç noktaları için geçerlidir.
Önemli
GraphQL'in etkinleştirildiği varlıklar için, yapılandırılmış kullanıma sunulan adın GraphQL adlandırma gereksinimlerini karşılaması gerekir. Daha fazla bilgi için bkz. GraphQL adları belirtimi.
Biçim
{
...
"entities" {
"<entity-name>": {
"rest":{ ... },
"graphql": { ... },
"source": { ... },
"mappings": {
"<field-1-name>" : "<field-1-alias>",
"<field-2-name>" : "<field-2-alias>",
"<field-3-name>" : "<field-3-alias>"
}
}
}
}
Örnekler
Bu örnekte, veritabanı nesnesi dbo.magazines
sku_title
alanı title
adı kullanılarak kullanıma sunulur. Benzer şekilde, sku_status
alanı hem REST hem de GraphQL uç noktalarına status
olarak sunulur.
{
"entities": {
"Magazine": {
...
"mappings": {
"sku_title": "title",
"sku_status": "status"
}
}
}
}
Aşağıda başka bir eşleme örneği verilmiştir.
{
"entities": {
"Book": {
...
"mappings": {
"id": "BookID",
"title": "BookTitle",
"author": "AuthorName"
}
}
}
}
Eşlemeleri: mappings
nesnesi, veritabanı alanlarını (BookID
, BookTitle
, AuthorName
) harici olarak kullanılan daha sezgisel veya standartlaştırılmış adlara (id
, title
, author
) bağlar. Bu diğer ad çeşitli amaçlara hizmet eder:
Netlik ve Tutarlılık: Temel alınan veritabanı şemasından bağımsız olarak API genelinde net ve tutarlı adlandırmanın kullanılmasına olanak tanır. Örneğin, veritabanındaki
BookID
API'deid
olarak temsil edilir ve bu da uç noktayla etkileşim kuran geliştiriciler için daha sezgiseldir.GraphQL Uyumluluğu: Diğer ad alan adlarına yönelik bir mekanizma sağlayarak, GraphQL arabirimi aracılığıyla kullanıma sunulan adların GraphQL adlandırma gereksinimlerine uygun olmasını sağlar. GraphQL'in adlarla ilgili katı kuralları olduğundan adlara dikkat etmek önemlidir (örneğin boşluk olmaması, harf veya alt çizgiyle başlaması vb.). Örneğin, bir veritabanı alanı adı bu ölçütleri karşılamıyorsa, eşlemeler aracılığıyla uyumlu bir ada diğer ad eklenebilir.
Esneklik: Bu diğer ad, veritabanı şeması ile API arasında bir soyutlama katmanı ekler ve diğerinde değişiklik gerektirmeden birinde değişiklik yapılmasını sağlar. Örneğin, veritabanındaki alan adı değişikliği, eşleme tutarlı kalırsa API belgelerinde veya istemci tarafı kodunda güncelleştirme gerektirmez.
Alan Adını Gizleme: Eşleme, alan adlarının gizlenmesini sağlar ve bu da yetkisiz kullanıcıların veritabanı şeması veya depolanan verilerin doğası hakkında hassas bilgiler çıkarmasını önlemeye yardımcı olabilir.
Özel Bilgileri Koruma: Alanları yeniden adlandırarak, veritabanının özgün alan adları aracılığıyla ima edilebilecek özel adları veya iş mantığını da koruyabilirsiniz.
İlişkiler (varlıklar)
GEREKLI: ❌ Hayır
Bu bölüm eşlemeleri, varlıkların kullanıma sunulan diğer varlıklarla nasıl ilişkili olduğunu eşleyen bir ilişki tanımları kümesi içerir. Bu ilişki tanımları isteğe bağlı olarak ilişkileri desteklemek ve zorlamak için kullanılan temel veritabanı nesneleriyle ilgili ayrıntıları da içerebilir. Bu bölümde tanımlanan nesneler, ilgili varlıkta GraphQL alanları olarak sunulur. Daha fazla bilgi için bkz. Veri API'si oluşturucu ilişkileri dökümü.
Not
İlişkiler yalnızca GraphQL sorguları ile ilgilidir. REST uç noktaları aynı anda yalnızca bir varlığa erişir ve iç içe türleri döndüremez.
relationships
bölümünde, varlıkların Veri API'sini oluşturucusu içinde nasıl etkileşim kurabilecekleri açıklanır ve bu ilişkiler için ilişkilendirmeler ve olası veritabanı desteği ayrıntılı olarak açıklanır. Her ilişkinin relationship-name
özelliği hem gereklidir hem de belirli bir varlık için tüm ilişkilerde benzersiz olmalıdır. Özel adlar net, tanımlanabilir bağlantılar sağlar ve bu yapılandırmalardan oluşturulan GraphQL şemasının bütünlüğünü korur.
İlişki | Önem düzeyi | Örnek |
---|---|---|
bire çok | many |
Bir kategori varlığı birçok yapılacaklar varlığıyla ilişkilendirilebilir |
çoka bir | one |
Birçok yapılacaklar varlığı bir kategori varlığıyla ilişkilendirilebilir |
çoka çok | many |
Bir yapılacaklar varlığı birçok kullanıcı varlığıyla ve bir kullanıcı varlığı da birçok yapılacaklar varlığıyla ilişkilendirilebilir |
Biçim
{{
"entities": {
"entity-name": {
...
"relationships": {
"relationship-name": {
"cardinality": "one" | "many",
"target.entity": "target-entity-name",
"source.fields": ["source-field-name"],
"target.fields": ["target-field-name"],
"linking.object": "linking-object-name",
"linking.source.fields": ["linking-source-field-name"],
"linking.target.fields": ["linking-target-field-name"]
}
}
}
}
}
Özellikler
Gerekli | Tür | |
---|---|---|
cardinality |
✔️ Evet | sabit listesi dizesi |
target.entity |
✔️ Evet | dizgi |
source.fields |
❌ Hayır | dize dizisi |
target.fields |
❌ Hayır | dize dizisi |
linking.<object-or-entity> |
❌ Hayır | dizgi |
linking.source.fields |
❌ Hayır | dize dizisi |
linking.target.fields |
❌ Hayır | dize dizisi |
Örnekler
İlişkileri göz önünde bulundurarak,
Bire çok
İlk olarak, kullanıma sunulan Category
varlığıyla Book
varlığıyla bire çok ilişkisine sahip bir ilişki örneğini ele alalım. Burada kardinalite many
olarak ayarlanır. Her Book
varlığı yalnızca tek bir Category
varlığıyla ilişkilendirilirken, her Category
birden çok ilişkili Book
varlığı olabilir.
{
"entities": {
"Book": {
...
},
"Category": {
"relationships": {
"category_books": {
"cardinality": "many",
"target.entity": "Book",
"source.fields": [ "id" ],
"target.fields": [ "category_id" ]
}
}
}
}
}
Bu örnekte, source.fields
listesi kaynak varlığın (Category
) id
alanını belirtir. Bu alan, target
varlığındaki ilgili öğeye bağlanmak için kullanılır. Buna karşılık, target.fields
listesi hedef varlığın (Book
) category_id
alanını belirtir. Bu alan, source
varlığındaki ilgili öğeye bağlanmak için kullanılır.
Bu ilişki tanımlandığında, ortaya çıkan GraphQL şeması bu örneğe benzemelidir.
type Category
{
id: Int!
...
books: [BookConnection]!
}
Çoka bir
Ardından, kardinaliteyi Book
varlığıyla ilgili tek bir Category
varlığı olabilir.
Category
varlığıyla ilgili birden çok Book
varlığı olabilir.
{
"entities": {
"Book": {
"relationships": {
"books_category": {
"cardinality": "one",
"target.entity": "Category",
"source.fields": [ "category_id" ],
"target.fields": [ "id" ]
}
},
"Category": {
...
}
}
}
}
Burada, source.fields
listesi kaynak varlığın (Book
) category_id
alanının ilgili hedef varlığın (Category
) id
alanına başvurduğunu belirtir. Tersine, target.fields
listesi ters ilişkiyi belirtir. Bu ilişkiyle, sonuçta elde edilen GraphQL şeması artık Kitaplar'dan Kategorilere bir eşleme içeriyor.
type Book
{
id: Int!
...
category: Category
}
Çoka çok
Son olarak, çoka çok ilişkisi, many
kardinalitesi ve arka veritabanında ilişki oluşturmak için hangi veritabanı nesnelerinin kullanıldığını tanımlamak için daha fazla meta veriyle tanımlanır. Burada, Book
varlığı birden çok Author
varlığa ve diğer taraftan Author
varlığı birden çok Book
varlığına sahip olabilir.
{
"entities": {
"Book": {
"relationships": {
...,
"books_authors": {
"cardinality": "many",
"target.entity": "Author",
"source.fields": [ "id" ],
"target.fields": [ "id" ],
"linking.object": "dbo.books_authors",
"linking.source.fields": [ "book_id" ],
"linking.target.fields": [ "author_id" ]
}
},
"Category": {
...
},
"Author": {
...
}
}
}
}
Bu örnekte, source.fields
ve target.fields
her ikisi de ilişki tablosunun hem kaynak (Book
) hem de hedef (Author
) varlıklarının birincil tanımlayıcısını (id
) kullandığını gösterir.
linking.object
alanı, ilişkinin dbo.books_authors
veritabanı nesnesinde tanımlandığını belirtir. Ayrıca, linking.source.fields
bağlama nesnesinin book_id
alanının Book
varlığının id
alanına başvurduğunu belirtir ve linking.target.fields
bağlama nesnesinin author_id
alanının Author
varlığının id
alanına başvurduğunu belirtir.
Bu örnek, bu örneğe benzer bir GraphQL şeması kullanılarak açıklanabilir.
type Book
{
id: Int!
...
authors: [AuthorConnection]!
}
type Author
{
id: Int!
...
books: [BookConnection]!
}
Önem düzeyi
GEREKLI: ✔️ Evet
Geçerli kaynak varlığın yalnızca hedef varlığın tek bir örneğiyle mi yoksa birden çok ile mi ilişkili olduğunu belirtir.
Değer
Bu özellik için izin verilen değerlerin listesi aşağıdadır:
Tarif | |
---|---|
one |
Kaynak, hedeften yalnızca bir kayıtla ilişkilidir |
many |
Kaynak, hedeften sıfırdan çoka kayıtla ilişkilendirilebilir |
Hedef varlık
GEREKLI: ✔️ Evet
Yapılandırmada ilişkinin hedefi olan başka bir yerde tanımlanan varlığın adı.
Kaynak alanlar
GEREKLI: ❌ Hayır
Hedef varlıktaki ilgili öğeye bağlanmak için kullanılan kaynak varlığında eşleme için kullanılan alanı tanımlamak için isteğe bağlı bir parametre.
Bahşiş
İlişkiyi otomatik olarak çıkarsamak için kullanılabilecek iki veritabanı nesnesi arasında veritabanında yabancı anahtar kısıtlaması varsa bu alan gerekli değildir.
Hedef alanlar
GEREKLI: ❌ Hayır
Kaynak varlıktaki ilgili öğeye bağlanmak için kullanılan hedef varlığında eşleme için kullanılan alanı tanımlamak için isteğe bağlı bir parametre.
Bahşiş
İlişkiyi otomatik olarak çıkarsamak için kullanılabilecek iki veritabanı nesnesi arasında veritabanında yabancı anahtar kısıtlaması varsa bu alan gerekli değildir.
Nesne veya varlık bağlama
GEREKLI: ❌ Hayır
Çoka çok ilişkiler için, diğer iki varlık arasında ilişki tanımlamak için gereken verileri içeren veritabanı nesnesinin veya varlığının adı.
Kaynak alanları bağlama
GEREKLI: ❌ Hayır
Kaynak varlıkla ilişkili veritabanı nesnesinin veya varlık alanının adı.
Hedef alanları bağlama
GEREKLI: ❌ Hayır
Hedef varlıkla ilişkili veritabanı nesnesinin veya varlık alanının adı.
Önbellek (varlıklar)
GEREKLI: ❌ Hayır
Varlık için önbelleğe almayı etkinleştirir ve yapılandırr.
Biçim
{
"entities": {
"<string>": {
"cache": {
"enabled": <true> | <false> (default),
"ttl-seconds": (integer, default: 5)
}
}
}
}
Özellikler
Gerekli | Tür | Temerrüt | |
---|---|---|---|
enabled |
❌ Hayır | Boolean | false |
ttl-seconds |
❌ Hayır | tam sayı | 5 |
Örnekler
Bu örnekte önbellek etkinleştirilir ve öğelerin süresi 30 saniye sonra dolar.
{
"entities": {
"Author": {
"cache": {
"enabled": true,
"ttl-seconds": 30
}
}
}
}
Etkin (Önbellek varlığı)
GEREKLI: ❌ Hayır
Varlık için önbelleğe almayı etkinleştirir. Genel ayar true
olsa bile varsayılan olarak false
olur.
Veritabanı Nesnesi Desteği
Nesne türü | Önbellek desteği |
---|---|
Masa | ✅ Evet |
Görünüm | ✅ Evet |
Saklı Yordam | ✖️ Hayır |
Konteyner | ✖️ Hayır |
HTTP Üst Bilgi Desteği
İstek Üst Bilgisi | Önbellek desteği |
---|---|
no-cache |
✖️ Hayır |
no-store |
✖️ Hayır |
max-age |
✖️ Hayır |
public |
✖️ Hayır |
private |
✖️ Hayır |
etag |
✖️ Hayır |
Biçim
{
"entities": {
"<string>": {
"cache": {
"enabled": "<boolean>"
}
}
}
}
Örnekler
Bu örnekte önbellek devre dışıdır.
{
"entities": {
"Author": {
"cache": {
"enabled": false
}
}
}
}
Saniye olarak TTL (Önbellek varlığı)
GEREKLI: ❌ Hayır
Önbelleğe alınan öğeler için yaşam süresi (TTL) değerini saniyeler içinde yapılandırır. Bu süre geçtikten sonra, öğeler önbellekten otomatik olarak çıkarılır. Varsayılan değer 5
saniyedir.
Biçim
{
"entities": {
"<string>": {
"cache": {
"ttl-seconds": <integer (inherited)>
}
}
}
}
Örnekler
Bu örnekte önbellek etkinleştirilir ve öğelerin süresi 15 saniye sonra dolar. Atlandığında, bu ayar genel ayarı veya varsayılanı devralır.
{
"entities": {
"Author": {
"cache": {
"enabled": true,
"ttl-seconds": 15
}
}
}
}