Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Pengaturan konfigurasi untuk entitas database.
Health
| Property | Description |
|---|---|
entities.entity-name.health.enabled |
Mengaktifkan pemeriksaan kesehatan untuk entitas (titik akhir REST dan GraphQL) |
entities.entity-name.health.first |
Jumlah baris yang dikembalikan dalam kueri pemeriksaan kesehatan (rentang: 1-500) |
entities.entity-name.health.threshold-ms |
Durasi maksimum dalam milidetik untuk kueri pemeriksaan kesehatan (min: 1) |
Source
| Property | Description |
|---|---|
entities.entity-name.source.type |
Jenis objek: table, view, atau stored-procedure |
entities.entity-name.source.object |
Nama objek database |
entities.entity-name.source.parameters |
Parameter untuk prosedur atau fungsi tersimpan |
entities.entity-name.source.key-fields |
Daftar bidang kunci primer untuk tampilan |
entities.entity-name.mappings |
Memetakan nama bidang API ke kolom database |
REST
| Property | Description |
|---|---|
entities.entity-name.rest.enabled |
Mengaktifkan REST untuk entitas ini |
entities.entity-name.rest.path |
Rute kustom untuk titik akhir REST |
entities.entity-name.rest.methods |
Metode REST yang diizinkan: get, post, put, patch, delete |
GraphQL
| Property | Description |
|---|---|
entities.entity-name.graphql.type |
Ketik nama atau objek dengan singular dan plural |
entities.entity-name.graphql.operation |
Jenis operasi: query atau mutation |
entities.entity-name.graphql.enabled |
Mengaktifkan GraphQL untuk entitas ini |
Permissions
| Property | Description |
|---|---|
entities.entity-name.permissions[].role |
String nama peran |
entities.entity-name.permissions[].actions |
Satu atau beberapa dari: create, read, update, delete, execute |
Relationships
| Property | Description |
|---|---|
entities.entity-name.relationships.relationship-name.cardinality |
one atau many |
entities.entity-name.relationships.relationship-name.target.entity |
Nama entitas target |
entities.entity-name.relationships.relationship-name.source.fields |
Bidang dari entitas ini yang digunakan dalam hubungan |
entities.entity-name.relationships.relationship-name.target.fields |
Bidang dari entitas target |
entities.entity-name.relationships.relationship-name.linking.object |
Gabungkan objek yang digunakan untuk hubungan banyak-ke-banyak |
entities.entity-name.relationships.relationship-name.linking.source.fields |
Bidang dari entitas sumber yang digunakan dalam gabungan |
entities.entity-name.relationships.relationship-name.linking.target.fields |
Bidang dari entitas target yang digunakan dalam gabungan |
Cache
| Property | Description |
|---|---|
entities.entity-name.cache.enabled |
Mengaktifkan penembolokan respons untuk entitas |
entities.entity-name.cache.ttl-seconds |
Cache time-to-live dalam hitungan detik |
Gambaran umum format
{
"entities": {
"{entity-name}": {
"rest": {
"enabled": <boolean> // default: true
"path": <string> // default: "{entity-name}"
"methods": ["GET", "POST"] // default: ["GET", "POST"]
},
"graphql": {
"enabled": <boolean> // default: true
"type": {
"singular": <string>,
"plural": <string>
},
"operation": "query" | "mutation" // default: "query"
},
"source": {
"object": <string>,
"type": "view" | "stored-procedure" | "table",
"key-fields": [<string>], // primary keys for the view
"parameters": { // only for stored-procedure
"<parameter-name>": <default-value>,
"<parameter-name>": <default-value>
}
},
"mappings": {
"<database-field-name>": <string>
},
"relationships": {
"<relationship-name>": {
"cardinality": "one" | "many",
"target.entity": <string>,
"source.fields": [<string>],
"target.fields": [<string>],
"linking.object": <string>,
"linking.source.fields": [<string>],
"linking.target.fields": [<string>]
}
},
"permissions": [
{
"role": "anonymous" | "authenticated" | <custom-role>,
"actions": ["create", "read", "update", "delete", "execute", "*"],
"fields": {
"include": [<string>],
"exclude": [<string>]
},
"policy": {
"database": <string>
}
}
]
}
}
}
Sumber (entitas nama entitas)
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
entities.{entity-name} |
source |
objek | ✔️ Ya | None |
Detail sumber database entitas.
Properti berlapis
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
entities.{entity-name}.source |
object |
string | ✔️ Ya | None |
entities.{entity-name}.source |
type |
enum (table, view, stored-procedure) |
✔️ Ya | None |
entities.{entity-name}.source |
key-fields |
larik string | ✔️ Ya* | None |
entities.{entity-name}.source |
parameters |
objek | ✔️ Ya** | None |
-
key-fieldshanya diperlukan ketikatypeadalahview. Nilai mewakili kunci primer.
**
parameters hanya diperlukan ketika type adalah stored-procedure dan hanya untuk parameter dengan nilai default. Jenis data parameter disimpulkan. Parameter tanpa default dapat dihilangkan.
Tip
Jika objek milik skema dbo, menentukan skema bersifat opsional. Selain itu, tanda kurung siku di sekitar nama objek (misalnya, dbo.Users vs. [dbo].[Users]) dapat digunakan jika diperlukan.
Format
{
"entities": {
"{entity-name}": {
"source": {
"object": <string>,
"type": <"view" | "stored-procedure" | "table">,
"key-fields": [ <string> ], // primary keys of the view
"parameters": { // only for option stored-procedure parameters
"<parameter-name-1>": <default-value>
"<parameter-name-2>": <default-value>
}
}
}
}
}
Izin (entitas nama entitas)
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
entities.permissions |
role |
string | ✔️ Ya | None |
String yang menentukan nama peran yang diterapkan izin.
Format
{
"entities": {
"{entity-name}": {
"permissions": [
{
"role": <"anonymous" | "authenticated" | "custom-role">
}
]
}
}
}
Example
Contoh ini mendefinisikan peran custom-role hanya read dengan izin pada User entitas.
{
"entities": {
"User": {
"permissions": [
{
"role": "custom-role",
"actions": ["read"]
}
]
}
}
}
Contoh penggunaan
GET https://localhost:5001/api/User
Authorization: Bearer <your_access_token>
X-MS-API-ROLE: custom-role
Tindakan (entitas nama entitas Izin string-array)
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
entities.permissions |
actions |
oneOf [string, array] | ✔️ Ya | None |
Array string yang merinci operasi apa yang diizinkan untuk peran terkait.
| Action | Operasi SQL |
|---|---|
* |
Semua tindakan |
create |
Sisipkan satu atau beberapa* baris |
read |
Pilih satu atau beberapa baris |
update |
Mengubah satu atau beberapa* baris |
delete |
Menghapus satu atau beberapa* baris |
execute |
Menjalankan prosedur tersimpan |
* Beberapa operasi saat ini hanya didukung di GraphQL.
Note
Untuk prosedur tersimpan, tindakan kartubebas (*) hanya meluas ke tindakan execute. Untuk tabel dan tampilan, tabel diperluas ke create, read, update, dan delete.
Format
{
"entities": {
"{entity-name}": {
"permissions": [
{
"actions": [ <string> ]
}
]
}
}
}
Example
{
"entities": {
"{entity-name}": {
"permissions": [
{
"actions": [ "*" ] // equivalent to create, read, update, delete
}
]
}
}
}
Format alternatif (hanya string, saat type=stored-procedure)
{
"entities": {
"{entity-name}": {
"permissions": [
{
"actions": <string>
}
]
}
}
}
Example
{
"entities": {
"{entity-name}": {
"permissions": [
{
"actions": "*" // equivalent to execute
}
]
}
}
}
Tindakan (entitas nama entitas Izin array objek)
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
entities.{entity-name}.permissions |
actions |
larik string | ✔️ Ya | None |
Array objek yang merinci operasi apa yang diizinkan untuk peran terkait.
Note
Untuk prosedur tersimpan, tindakan kartubebas (*) diperluas hanya ke execute. Untuk tabel/tampilan, tabel diperluas ke create, read, update, dan delete.
Properti berlapis
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
entities.{entity-name}.permissions.actions[] |
action |
string | ✔️ Ya | None |
entities.{entity-name}.permissions.actions[] |
fields |
objek | ❌ Tidak | None |
entities.{entity-name}.permissions.actions[] |
policy |
objek | ❌ Tidak | None |
entities.{entity-name}.permissions.actions[].policy |
database |
string | ✔️ Ya | None |
Format
{
"entities": {
"{entity-name}": {
"permissions": [
{
"role": <string>,
"actions": [
{
"action": <string>,
"fields": <array of strings>,
"policy": <object>
}
]
}
]
}
}
Example
Ini memberikan read izin kepada auditor entitas User , dengan pembatasan bidang dan kebijakan.
{
"entities": {
"User": {
"permissions": [
{
"role": "auditor",
"actions": [
{
"action": "read",
"fields": {
"include": ["*"],
"exclude": ["last_login"]
},
"policy": {
"database": "@item.IsAdmin eq false"
}
}
]
}
]
}
}
}
Catatan kebijakan
- Kebijakan mendukung operator OData seperti
eq. - Kebijakan mendukung predikat campuran menggunakan
anddanor. - Hanya didukung untuk tindakan:
create,read,update, dandelete. (Tidakexecute) - Kebijakan memfilter hasil tetapi tidak mencegah eksekusi kueri dalam database.
- Bidang harus menggunakan alias bidang, jika dipetakan.
Jenis (entitas nama entitas GraphQL)
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
entities.{entity-name}.graphql |
type |
objek | ❌ Tidak | {entity-name} |
Mengatur konvensi penamaan untuk entitas dalam skema GraphQL.
Format
{
"entities": {
"{entity-name}": {
"graphql": {
"type": {
"singular": "<string>",
"plural": "<string>"
}
}
}
}
}
Properti berlapis
| Parent | Property | Required | Type | Default |
|---|---|---|---|---|
entities.{entity-name}.graphql.type |
singular |
❌ Tidak | string | None |
entities.{entity-name}.graphql.type |
plural |
❌ Tidak | string | N/A (default ke nilai tunggal) |
Example
Configuration
{
"entities": {
"User": {
"graphql": {
"type": {
"singular": "User",
"plural": "Users"
}
}
}
}
}
Kueri GraphQL
{
Users {
items {
id
name
age
isAdmin
}
}
}
Respons GraphQL
{
"data": {
"Users": {
"items": [
{
"id": 1,
"name": "Alice",
"age": 30,
"isAdmin": true
},
{
"id": 2,
"name": "Bob",
"age": 25,
"isAdmin": false
}
// ...
]
}
}
}
Operasi (entitas nama entitas GraphQL)
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
entities.{entity-name}.graphql |
operation |
string enum | ❌ Tidak | mutation |
Menunjuk stored-procedure apakah operasi muncul di bawah Query atau Mutation.
Note
Ketika {entity-name}.type diatur ke stored-procedure, jenis executeXXX GraphQL baru dibuat secara otomatis. Properti ini operation mengontrol tempat jenis ini ditempatkan dalam skema GraphQL. Tidak ada dampak fungsional, hanya kebersihan skema.
Format
{
"entities": {
"{entity-name}": {
"graphql": {
"operation": "query" | "mutation"
}
}
}
}
Contoh: operasi
Kapan operation diatur ke query
type Query {
executeGetUserDetails(userId: Int!): GetUserDetailsResponse
}
Kapan operation diatur ke mutation
type Mutation {
executeGetUserDetails(userId: Int!): GetUserDetailsResponse
}
Diaktifkan (entitas nama entitas GraphQL)
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
entities.{entity-name}.graphql |
enabled |
boolean | ❌ Tidak | True |
Memungkinkan pengembang secara selektif menyertakan entitas dalam skema GraphQL.
Format
{
"entities": {
"{entity-name}": {
"graphql": {
"enabled": <true> (default) | <false>
}
}
}
}
REST (entitas nama entitas)
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
entities.{entity-name}.rest |
enabled |
boolean | ❌ Tidak | True |
entities.rest |
path |
string | ❌ Tidak | /{entity-name} |
entities.{entity-name}.rest |
methods |
larik string | ❌ Tidak* | POST |
* Properti methods hanya untuk stored-procedure titik akhir.
Format
{
"entities": {
"{entity-name}": {
"rest": {
"enabled": <true> (default) | <false>,
"path": <string; default: "{entity-name}">
}
}
}
}
Pemetaan (entitas nama entitas)
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
entities.{entity-name} |
mappings |
objek | ❌ Tidak | None |
Mengaktifkan alias kustom, atau nama yang diekspos, untuk bidang objek database.
Important
Untuk entitas dengan GraphQL diaktifkan, nama yang diekspos yang dikonfigurasi harus memenuhi persyaratan nama GraphQL.
Format
{
"entities": {
"{entity-name}": {
"mappings": {
"<field-1-name>": "<field-1-alias>",
"<field-2-name>": "<field-2-alias>",
"<field-3-name>": "<field-3-alias>"
}
}
}
}
Examples
Tabel Database
CREATE TABLE Books
(
id INT,
sku_title VARCHAR(50),
sku_status VARCHAR(50),
)
Configuration
{
"entities": {
"Books": {
...
"mappings": {
"sku_title": "title",
"sku_status": "status"
}
}
}
}
Cache (entitas nama entitas)
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
entities.{entity-name} |
cache |
objek | ❌ Tidak | None |
Mengaktifkan dan mengonfigurasi penembolokan untuk entitas.
Properti berlapis
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
entities.{entity-name}.cache |
enabled |
boolean | ❌ Tidak | False |
entities.{entity-name}.cache |
ttl-seconds |
integer | ❌ Tidak | - |
Format
{
"entities": {
"{entity-name}": {
"cache": {
"enabled": <true> (default) | <false>,
"ttl-seconds": <integer; default: 5>
}
}
}
}
Note
Ketika tidak ditentukan, ttl-seconds mewarisi nilai global yang ditetapkan di bawah runtime.cache.
Example
{
"entities": {
"Author": {
"cache": {
"enabled": true,
"ttl-seconds": 30
}
}
}
}
Hubungan (entitas nama entitas)
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
entities.{entity-name} |
relationships |
objek | ❌ Tidak | None |
Mengonfigurasi bagaimana entitas GraphQL terkait dengan entitas lain yang terekspos. Untuk informasi selengkapnya, lihat perincian hubungan penyusun API Data .
Note
Properti untuk setiap hubungan harus unik di semua hubungan untuk entitas tersebut relationship-name .
Properti berlapis
Properti ini digunakan dalam kombinasi yang berbeda tergantung pada kardinalitas hubungan.
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
entities.{entity-name}.relationships |
cardinality |
string | ✔️ Ya | None |
entities.{entity-name}.relationships |
target.entity |
string | ✔️ Ya | None |
entities.{entity-name}.relationships |
target.fields |
larik string | ❌ Tidak | None |
entities.{entity-name}.relationships |
source.fields |
larik string | ❌ Tidak | None |
entities.{entity-name}.relationships |
linking.object |
string | ❌ Tidak | None |
entities.{entity-name}.relationships |
linking.source.fields |
larik string | ❌ Tidak | None |
entities.{entity-name}.relationships |
linking.target.fields |
larik string | ❌ Tidak | None |
Format
{
"entities": {
"{entity-name}": {
"relationships": {
"<relationship-name>": {
"cardinality": "one" | "many",
"target.entity": "<string>",
"source.fields": ["<string>"],
"target.fields": ["<string>"],
"linking.object": "<string>",
"linking.source.fields": ["<string>"],
"linking.target.fields": ["<string>"]
}
}
}
}
}
| Relationship | Cardinality | Example |
|---|---|---|
| one-to-many | many |
Satu entitas kategori dapat berhubungan dengan banyak entitas todo |
| many-to-one | one |
Banyak entitas todo dapat berhubungan dengan satu entitas kategori |
| many-to-many | many |
Satu entitas todo dapat berhubungan dengan banyak entitas pengguna, dan satu entitas pengguna dapat berhubungan dengan banyak entitas todo |
Contoh: Kardinalitas satu-ke-satu
Masing-masing Profile terkait dengan tepat satu User, dan masing-masing User memiliki tepat satu terkait Profile.
{
"entities": {
"User": {
"relationships": {
"user_profile": {
"cardinality": "one",
"target.entity": "Profile",
"source.fields": [ "id" ],
"target.fields": [ "user_id" ]
}
}
},
"Profile": {
...
}
}
}
Skema GraphQL
type User
{
id: Int!
...
profile: Profile
}
Command-line
dab update User \
--relationship profile \
--target.entity Profile \
--cardinality one \
--relationship.fields "id:user_id"
Contoh: Kardinalitas satu ke banyak
Dapat Category memiliki satu atau beberapa entitas terkait Book , sementara masing-masing Book dapat memiliki satu entitas terkait Category.
{
"entities": {
"Book": {
...
},
"Category": {
"relationships": {
"category_books": {
"cardinality": "many",
"target.entity": "Book",
"source.fields": [ "id" ],
"target.fields": [ "category_id" ]
}
}
}
}
}
Skema GraphQL
type Category
{
id: Int!
...
books: [BookConnection]!
}
Baris perintah
dab update Category \
--relationship category_books \
--target.entity Book \
--cardinality many \
--relationship.fields "id:category_id"
Contoh: Kardinalitas banyak ke satu
Banyak Book entitas dapat memiliki satu terkait Category, sementara dapat Category memiliki satu atau beberapa entri terkait Book .
{
"entities": {
"Book": {
"relationships": {
"books_category": {
"cardinality": "one",
"target.entity": "Category",
"source.fields": [ "category_id" ],
"target.fields": [ "id" ]
}
},
"Category": {
...
}
}
}
}
Skema GraphQL
type Book
{
id: Int!
...
category: Category
}
Baris perintah
dab update Book \
--relationship books_category \
--target.entity "Category" \
--cardinality one \
--relationship.fields "category_id:id"
Contoh: Kardinalitas banyak ke banyak
Banyak Book entitas dapat memiliki banyak entitas terkait Author , sementara banyak Author entitas dapat memiliki banyak entri terkait Book .
Note
Hubungan ini dimungkinkan dengan tabel ketiga, dbo.books_authors, yang kita sebut sebagai objek penautan.
{
"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": {
...
}
}
}
}
Skema GraphQL
type Book
{
id: Int!
...
authors: [AuthorConnection]!
}
type Author
{
id: Int!
...
books: [BookConnection]!
}
Baris perintah
dab update Book \
--relationship books_authors \
--target.entity "Author" \
--cardinality many \
--relationship.fields "id:id" \
--linking.object "dbo.books_authors" \
--linking.source.fields "book_id" \
--linking.target.fields "author_id"
Kesehatan (entitas nama entitas)
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
entities.{entity-name} |
health |
objek | ❌ Tidak | None |
Mengaktifkan dan mengonfigurasi pemeriksaan kesehatan untuk entitas.
Properti berlapis
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
entities.{entity-name}.health |
enabled |
boolean | ❌ Tidak | true |
entities.{entity-name}.health |
first |
integer | ❌ Tidak | 100 |
entities.{entity-name}.health |
threshold-ms |
integer | ❌ Tidak | 1000 |
Example
{
"entities": {
"Book": {
"health": {
"enabled": true,
"first": 3,
"threshold-ms": 500
}
}
}
}
Note
Nilai first harus kurang dari atau sama dengan runtime.pagination.max-page-size pengaturan. Nilai yang lebih kecil membantu pemeriksaan kesehatan selesai lebih cepat.
Important
Prosedur tersimpan secara otomatis dikecualikan dari pemeriksaan kesehatan entitas karena memerlukan parameter dan mungkin tidak deterministik.