Aracılığıyla paylaş


Entities

Veritabanı varlıkları için yapılandırma ayarları.

Health

Property Description
entities.entity-name.health.enabled Varlık için sistem durumu denetimlerini etkinleştirir (hem REST hem de GraphQL uç noktaları)
entities.entity-name.health.first Sistem durumu denetimi sorgusunda döndürülen satır sayısı (aralık: 1-500)
entities.entity-name.health.threshold-ms Sistem durumu denetimi sorgusu için milisaniye cinsinden en uzun süre (min: 1)

Source

Property Description
entities.entity-name.source.type Nesne türü: table, viewveya stored-procedure
entities.entity-name.source.object Veritabanı nesnesinin adı
entities.entity-name.source.parameters Saklı yordamlar veya işlevler için parametreler
entities.entity-name.source.key-fields Görünümler için birincil anahtar alanlarının listesi
entities.entity-name.mappings API alan adlarını veritabanı sütunlarıyla eşleme

REST

Property Description
entities.entity-name.rest.enabled Bu varlık için REST'i etkinleştirir
entities.entity-name.rest.path REST uç noktası için özel yol
entities.entity-name.rest.methods İzin verilen REST yöntemleri: get, post, put, patch, delete

GraphQL

Property Description
entities.entity-name.graphql.type ve ile singular ad veya nesne yazın plural
entities.entity-name.graphql.operation İşlem türü: query veya mutation
entities.entity-name.graphql.enabled Bu varlık için GraphQL'i etkinleştirir

Permissions

Property Description
entities.entity-name.permissions[].role Rol adı dizesi
entities.entity-name.permissions[].actions Bir veya daha fazla: create, read, update, delete, execute

Relationships

Property Description
entities.entity-name.relationships.relationship-name.cardinality one veya many
entities.entity-name.relationships.relationship-name.target.entity Hedef varlığın adı
entities.entity-name.relationships.relationship-name.source.fields İlişkide kullanılan bu varlıktaki alanlar
entities.entity-name.relationships.relationship-name.target.fields Hedef varlıktan alanlar
entities.entity-name.relationships.relationship-name.linking.object Çoka çok ilişkiler için kullanılan birleştirme nesnesi
entities.entity-name.relationships.relationship-name.linking.source.fields Birleştirmede kullanılan kaynak varlıktaki alanlar
entities.entity-name.relationships.relationship-name.linking.target.fields Birleştirmede kullanılan hedef varlıktaki alanlar

Cache

Property Description
entities.entity-name.cache.enabled Varlık için yanıt önbelleğe almayı etkinleştirir
entities.entity-name.cache.ttl-seconds Yaşam süresini saniyeler içinde önbelleğe alma

Biçime genel bakış

{
  "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>
          }
        }
      ]
    }
  }
}

Kaynak (varlık-adı varlıkları)

Parent Property Type Required Default
entities.{entity-name} source object ✔️ Evet None

Varlığın veritabanı kaynak ayrıntıları.

İç içe özellikler

Parent Property Type Required Default
entities.{entity-name}.source object string ✔️ Evet None
entities.{entity-name}.source type sabit listesi (table, view, stored-procedure) ✔️ Evet None
entities.{entity-name}.source key-fields dize dizisi ✔️ Evet* None
entities.{entity-name}.source parameters object ✔️ Evet** None
  • key-fields yalnızca olduğunda typeviewgereklidir. değeri birincil anahtarları temsil eder.

** parameters yalnızca varsayılan değerlere sahip parametreler için ve olduğunda typestored-procedure gereklidir. Parametresinin veri türü çıkarılır. Varsayılan olmayan parametreler atlanabilir.

Tip

Nesne dbo şemasına aitse, şemanın belirtilmesi isteğe bağlıdır. Ayrıca, gerektiğinde nesne adlarının etrafındaki köşeli ayraçlar (örneğin, dbo.Users vs. [dbo].[Users]) kullanılabilir.

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>
        }
      }
    }
  }
}

İzinler (varlık-adı varlıkları)

Parent Property Type Required Default
entities.permissions role string ✔️ Evet None

İzinlerin uygulandığı rolün adını belirten dize.

Format

{
  "entities": {
    "{entity-name}": {
      "permissions": [
        {
          "role": <"anonymous" | "authenticated" | "custom-role">
        }
      ]
    }
  }
}

Example

Bu örnek, rolü custom-role yalnızca read varlık üzerinde User izinlere sahip olarak tanımlar.

{
  "entities": {
    "User": {
      "permissions": [
        {
          "role": "custom-role",
          "actions": ["read"]
        }
      ]
    }
  }
}

Kullanım örnekleri

GET https://localhost:5001/api/User
Authorization: Bearer <your_access_token>
X-MS-API-ROLE: custom-role

Eylemler (dize dizisi İzinleri varlık-adı varlıkları)

Parent Property Type Required Default
entities.permissions actions oneOf [dize, dizi] ✔️ Evet None

İlişkili rol için izin verilen işlemlerin ayrıntılarını içeren bir dize dizisi.

Action SQL İşlemi
* Tüm eylemler
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

* Şu anda yalnızca GraphQL'de birden çok işlem desteklenmektedir.

Note

Saklı yordamlar için joker karakter (*) eylemi yalnızca execute eylemine genişletir. Tablolar ve görünümler için create, read, updateve deleteolarak genişletir.

Format

{
  "entities": {
    "{entity-name}": {
      "permissions": [
        {
          "actions": [ <string> ]
        }
      ]
    }
  }
}

Example

{
  "entities": {
    "{entity-name}": {
      "permissions": [
        {
          "actions": [ "*" ] // equivalent to create, read, update, delete
        }
      ]
    }
  }
}

Alternatif biçim (yalnızca dize, ne zaman type=stored-procedure)

{
  "entities": {
    "{entity-name}": {
      "permissions": [
        {
          "actions": <string>
        }
      ]
    }
  }
}

Example

{
  "entities": {
    "{entity-name}": {
      "permissions": [
        {
          "actions": "*" // equivalent to execute
        }
      ]
    }
  }
}

Eylemler (nesne dizisi İzinleri varlık-adı varlıkları)

Parent Property Type Required Default
entities.{entity-name}.permissions actions dize dizisi ✔️ Evet None

İlişkili rol için izin verilen işlemlerin ayrıntılarını gösteren bir nesne dizisi.

Note

Saklı yordamlar için joker karakter (*) eylemi yalnızca executegenişletir. Tablolar/görünümler için, create, read, updateve deleteolarak genişletir.

İç içe özellikler

Parent Property Type Required Default
entities.{entity-name}.permissions.actions[] action string ✔️ Evet None
entities.{entity-name}.permissions.actions[] fields object ❌ Hayır None
entities.{entity-name}.permissions.actions[] policy object ❌ Hayır None
entities.{entity-name}.permissions.actions[].policy database string ✔️ Evet None

Format

{
  "entities": {
    "{entity-name}": {
      "permissions": [
        {
          "role": <string>,
          "actions": [
            {
              "action": <string>,
              "fields": <array of strings>,
              "policy": <object>
            }
          ]
        }
      ]
    }
  }

Example

Bu, alan ve ilke kısıtlamalarıyla varlık üzerinde read izni auditor verirUser.

{
  "entities": {
    "User": {
      "permissions": [
        {
          "role": "auditor",
          "actions": [
            {
              "action": "read",
              "fields": {
                "include": ["*"],
                "exclude": ["last_login"]
              },
              "policy": {
                "database": "@item.IsAdmin eq false"
              }
            }
          ]
        }
      ]
    }
  }
}

İlke notları

  • İlkeler gibi eqOData işleçlerini destekler.
  • İlkeler ve andkullanarak or bileşik koşullarını destekler.
  • Yalnızca eylemler için desteklenir: create, read, updateve delete. (Değil execute)
  • İlkeler sonuçları filtreler ancak veritabanında sorgu yürütmeyi engellemez.
  • Alan, eşlenmişse alan diğer adını kullanmalıdır.

Tür (GraphQL varlık-adı varlıkları)

Parent Property Type Required Default
entities.{entity-name}.graphql type object ❌ Hayır {entity-name}

GraphQL şemasındaki bir varlık için adlandırma kuralını ayarlar.

Format

{
  "entities": {
    "{entity-name}": {
      "graphql": {
        "type": {
          "singular": "<string>",
          "plural": "<string>"
        }
      }
    }
  }
}

İç içe özellikler

Parent Property Required Type Default
entities.{entity-name}.graphql.type singular ❌ Hayır string None
entities.{entity-name}.graphql.type plural ❌ Hayır string Yok (varsayılan olarak tekil değer kullanılır)

Example

Configuration

{
  "entities": {
    "User": {
      "graphql": {
        "type": {
          "singular": "User",
          "plural": "Users"
        }
      }
    }
  }
}

GraphQL sorgusu

{
  Users {
    items {
      id
      name
      age
      isAdmin
    }
  }
}

GraphQL yanıtı

{
  "data": {
    "Users": {
      "items": [
        {
          "id": 1,
          "name": "Alice",
          "age": 30,
          "isAdmin": true
        },
        {
          "id": 2,
          "name": "Bob",
          "age": 25,
          "isAdmin": false
        }
        // ...
      ]
    }
  }
}

İşlem (GraphQL varlık-adı varlıkları)

Parent Property Type Required Default
entities.{entity-name}.graphql operation sabit listesi dizesi ❌ Hayır mutation

İşlemin stored-procedure veya Queryaltında Mutation görünüp görünmediğini tanımlar.

Note

{entity-name}.type olarak ayarlandığındastored-procedure, otomatik olarak yeni bir GraphQL türü executeXXX oluşturulur. Bu operation özellik, bu türün GraphQL şemasına yerleştirildiği yeri denetler. İşlevsel bir etki yoktur, yalnızca şema hijyeni vardır.

Format

{
  "entities": {
    "{entity-name}": {
      "graphql": {
        "operation": "query" | "mutation"
      }
    }
  }
}

Örnek: işlem

Ne zaman operation olarak ayarlanır? query

type Query {
  executeGetUserDetails(userId: Int!): GetUserDetailsResponse
}

Ne zaman operation olarak ayarlanır? mutation

type Mutation {
  executeGetUserDetails(userId: Int!): GetUserDetailsResponse
}

Etkin (GraphQL varlık-adı varlıkları)

Parent Property Type Required Default
entities.{entity-name}.graphql enabled boolean ❌ Hayır True

Geliştiricilerin GraphQL şemasına varlıkları seçmeli olarak eklemesine olanak tanır.

Format

{
  "entities": {
    "{entity-name}": {
      "graphql": {
        "enabled": <true> (default) | <false>
      }
    }
  }
}

REST (varlık-adı varlıkları)

Parent Property Type Required Default
entities.{entity-name}.rest enabled boolean ❌ Hayır True
entities.rest path string ❌ Hayır /{entity-name}
entities.{entity-name}.rest methods dize dizisi ❌ Hayır* POST

methods* Özelliği yalnızca uç noktalar içindirstored-procedure.

Format

{
  "entities": {
    "{entity-name}": {
      "rest": {
        "enabled": <true> (default) | <false>,
        "path": <string; default: "{entity-name}">
      }
    }
  }
}

Eşlemeler (varlık-adı varlıkları)

Parent Property Type Required Default
entities.{entity-name} mappings object ❌ Hayır None

Veritabanı nesnesi alanları için özel diğer adları veya kullanıma sunulan adları etkinleştirir.

Important

GraphQL'in etkinleştirildiği varlıklar için, kullanıma sunulan adın GraphQL adı gereksinimlerini karşılaması gerekir.

Format

{
  "entities": {
    "{entity-name}": {
      "mappings": {
        "<field-1-name>": "<field-1-alias>",
        "<field-2-name>": "<field-2-alias>",
        "<field-3-name>": "<field-3-alias>"
      }
    }
  }
}

Examples

Veritabanı Tablosu

CREATE TABLE Books
(
  id INT,
  sku_title VARCHAR(50),
  sku_status VARCHAR(50),
)

Configuration

{
  "entities": {
    "Books": {
      ...
      "mappings": {
        "sku_title": "title",
        "sku_status": "status"
      }
    }
  }
}

Önbellek (varlık-adı varlıkları)

Parent Property Type Required Default
entities.{entity-name} cache object ❌ Hayır None

Varlık için önbelleğe almayı etkinleştirir ve yapılandırr.

İç içe özellikler

Parent Property Type Required Default
entities.{entity-name}.cache enabled boolean ❌ Hayır False
entities.{entity-name}.cache ttl-seconds integer ❌ Hayır -

Format

{
  "entities": {
    "{entity-name}": {
      "cache": {
        "enabled": <true> (default) | <false>,
        "ttl-seconds": <integer; default: 5>
      }
    }
  }
}

Note

Belirtilmediğinde altında ttl-seconds ayarlanan runtime.cachegenel değeri devralır.

Example

{
  "entities": {
    "Author": {
      "cache": {
        "enabled": true,
        "ttl-seconds": 30
      }
    }
  }
}

İlişkiler (varlık-adı varlıkları)

Parent Property Type Required Default
entities.{entity-name} relationships object ❌ Hayır None

GraphQL varlıklarının diğer kullanıma sunulan varlıklarla nasıl ilişkili olduğunu yapılandırır. Daha fazla bilgi için bkz. Veri API'si oluşturucu ilişkileri dökümü.

Note

relationship-name Her ilişkinin özelliği, bu varlığa ait tüm ilişkilerde benzersiz olmalıdır.

İç içe özellikler

Bu özellikler, ilişki kardinalitesine bağlı olarak farklı birleşimlerde kullanılır.

Parent Property Type Required Default
entities.{entity-name}.relationships cardinality string ✔️ Evet None
entities.{entity-name}.relationships target.entity string ✔️ Evet None
entities.{entity-name}.relationships target.fields dize dizisi ❌ Hayır None
entities.{entity-name}.relationships source.fields dize dizisi ❌ Hayır None
entities.{entity-name}.relationships linking.object string ❌ Hayır None
entities.{entity-name}.relationships linking.source.fields dize dizisi ❌ Hayır None
entities.{entity-name}.relationships linking.target.fields dize dizisi ❌ Hayır 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 Bir kategori varlığı birçok yapılacaklar varlığıyla ilişkilendirilebilir
many-to-one one Birçok yapılacaklar varlığı bir kategori varlığıyla ilişkilendirilebilir
many-to-many 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

Örnek: Bire bir kardinalite

Her Profile biri tam olarak bir Userile ilişkilidir ve her User birinin tam olarak bir ilişkili Profilevardır.

{
  "entities": {
    "User": {
      "relationships": {
        "user_profile": {
          "cardinality": "one",
          "target.entity": "Profile",
          "source.fields": [ "id" ],
          "target.fields": [ "user_id" ]
        }
      }
    },
    "Profile": {
      ...
    }
  }
}

GraphQL şeması

type User
{
  id: Int!
  ...
  profile: Profile
}

Command-line

dab update User \
  --relationship profile \
  --target.entity Profile \
  --cardinality one \
  --relationship.fields "id:user_id"

Örnek: Bire çok kardinalitesi

A Category ile ilgili bir veya daha fazla varlık Book olabilirken, her Book birinin ilgili Categorybir varlığı olabilir.

{
  "entities": {
    "Book": {
      ...
    },
    "Category": {
      "relationships": {
        "category_books": {
          "cardinality": "many",
          "target.entity": "Book",
          "source.fields": [ "id" ],
          "target.fields": [ "category_id" ]
        }
      }
    }
  }
}

GraphQL şeması

type Category
{
  id: Int!
  ...
  books: [BookConnection]!
}

Komut satırı

dab update Category \
  --relationship category_books \
  --target.entity Book \
  --cardinality many \
  --relationship.fields "id:category_id"

Örnek: Çoka bir kardinalitesi

Birçok Book varlığın ilgili Categorybir öğesi olabilirken, bir Category varlığın bir veya daha fazla ilişkili Book girdisi olabilir.

{
  "entities": {
    "Book": {
      "relationships": {
        "books_category": {
          "cardinality": "one",
          "target.entity": "Category",
          "source.fields": [ "category_id" ],
          "target.fields": [ "id" ]
        }
      },
      "Category": {
        ...
      }
    }
  }
}

GraphQL şeması

type Book
{
  id: Int!
  ...
  category: Category
}

Komut satırı

dab update Book \
  --relationship books_category \
  --target.entity "Category" \
  --cardinality one \
  --relationship.fields "category_id:id"

Örnek: Çoka çok kardinalitesi

Birçok Book varlığın birçok ilişkili Author varlığı olabilirken, birçok Author varlığın birçok ilgili Book girdisi olabilir.

Note

Bu ilişki, dbo.books_authorsbağlama nesnesi olarak adlandırdığımız üçüncü bir tabloyla mümkündür.

{
  "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": {
        ...
      }
    }
  }
}

GraphQL şeması

type Book
{
  id: Int!
  ...
  authors: [AuthorConnection]!
}

type Author
{
  id: Int!
  ...
  books: [BookConnection]!
}

Komut satırı

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"

Sistem durumu (varlık-adı varlıkları)

Parent Property Type Required Default
entities.{entity-name} health object ❌ Hayır None

Varlık için sistem durumu denetimlerini etkinleştirir ve yapılandırr.

İç içe özellikler

Parent Property Type Required Default
entities.{entity-name}.health enabled boolean ❌ Hayır true
entities.{entity-name}.health first integer ❌ Hayır 100
entities.{entity-name}.health threshold-ms integer ❌ Hayır 1000

Example

{
  "entities": {
    "Book": {
      "health": {
        "enabled": true,
        "first": 3,
        "threshold-ms": 500
      }
    }
  }
}

Note

Değer first , ayardan küçük veya buna eşit runtime.pagination.max-page-size olmalıdır. Daha küçük değerler, sistem durumu denetimlerinin daha hızlı tamamlanmasına yardımcı olur.

Important

Saklı yordamlar, parametre gerektirdiğinden ve belirleyici olmayabileceği için varlık durumu denetimlerinin dışında tutulur.