Delen via


Entities

Configuratie-instellingen voor database-entiteiten.

Health

Property Description
entities.entity-name.health.enabled Hiermee schakelt u statuscontroles in voor de entiteit (zowel REST- als GraphQL-eindpunten)
entities.entity-name.health.first Aantal rijen dat wordt geretourneerd in de statuscontrolequery (bereik: 1-500)
entities.entity-name.health.threshold-ms Maximale duur in milliseconden voor statuscontrolequery (min. 1)

Source

Property Description
entities.entity-name.source.type Objecttype: table, viewof stored-procedure
entities.entity-name.source.object Naam van het databaseobject
entities.entity-name.source.parameters Parameters voor opgeslagen procedures of functies
entities.entity-name.source.key-fields Lijst met primaire-sleutelvelden voor weergaven
entities.entity-name.mappings API-veldnamen toewijzen aan databasekolommen

REST

Property Description
entities.entity-name.rest.enabled Hiermee schakelt u REST in voor deze entiteit
entities.entity-name.rest.path Aangepaste route voor REST-eindpunt
entities.entity-name.rest.methods Toegestane REST-methoden: get, post, put, patchdelete

GraphQL

Property Description
entities.entity-name.graphql.type Typ de naam of het object met singular en plural
entities.entity-name.graphql.operation Bewerkingstype: query of mutation
entities.entity-name.graphql.enabled Hiermee schakelt u GraphQL in voor deze entiteit

Permissions

Property Description
entities.entity-name.permissions[].role Tekenreeks voor rolnaam
entities.entity-name.permissions[].actions Een of meer van: create, read, update, deleteexecute

Relationships

Property Description
entities.entity-name.relationships.relationship-name.cardinality one of many
entities.entity-name.relationships.relationship-name.target.entity Naam van de doelentiteit
entities.entity-name.relationships.relationship-name.source.fields Velden uit deze entiteit die in de relatie worden gebruikt
entities.entity-name.relationships.relationship-name.target.fields Velden van de doelentiteit
entities.entity-name.relationships.relationship-name.linking.object Join-object dat wordt gebruikt voor veel-op-veel-relaties
entities.entity-name.relationships.relationship-name.linking.source.fields Velden van de bronentiteit die wordt gebruikt in join
entities.entity-name.relationships.relationship-name.linking.target.fields Velden van de doelentiteit die wordt gebruikt in join

Cache

Property Description
entities.entity-name.cache.enabled Hiermee schakelt u het opslaan van antwoorden voor de entiteit in de cache in
entities.entity-name.cache.ttl-seconds Time-to-live cache in seconden

Overzicht van opmaak

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

Bron (entiteitsnaamentiteiten)

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

De gegevens van de databasebron van de entiteit.

Geneste eigenschappen

Parent Property Type Required Default
entities.{entity-name}.source object string ✔️ Ja None
entities.{entity-name}.source type enum (table, view, stored-procedure) ✔️ Ja None
entities.{entity-name}.source key-fields tekenreeksmatrix ✔️ Ja* None
entities.{entity-name}.source parameters object ✔️ Ja** None
  • key-fields is alleen vereist wanneer type dit is view. De waarde vertegenwoordigt de primaire sleutels.

** parameters is alleen vereist wanneer type en stored-procedure alleen voor parameters met standaardwaarden. Het gegevenstype van de parameter wordt afgeleid. Parameters zonder standaardwaarde kunnen worden weggelaten.

Tip

Als het object deel uitmaakt van het dbo schema, is het opgeven van het schema optioneel. Daarnaast kunnen vierkante haken rond objectnamen (bijvoorbeeld dbo.Users vs. [dbo].[Users]) worden gebruikt wanneer dat nodig is.

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

Machtigingen (entiteitsnaamentiteiten)

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

Een tekenreeks die de naam opgeeft van de rol waarop machtigingen van toepassing zijn.

Format

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

Example

In dit voorbeeld wordt de rol custom-role gedefinieerd met alleen read machtigingen voor de User entiteit.

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

Voorbeelden van gebruik

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

Acties (tekenreeksmatrixmachtigingen entiteitsnaamentiteiten)

Parent Property Type Required Default
entities.permissions actions oneOf [tekenreeks, matrix] ✔️ Ja None

Een tekenreeksmatrix waarin wordt beschreven welke bewerkingen zijn toegestaan voor de bijbehorende rol.

Action SQL-bewerking
* Alle acties
create Een of meer* rijen invoegen
read Een of meer rijen selecteren
update Een of meer* rijen wijzigen
delete Een of meer* rijen verwijderen
execute Een opgeslagen procedure uitvoeren

* Meerdere bewerkingen worden momenteel alleen ondersteund in GraphQL.

Note

Voor opgeslagen procedures wordt de actie jokerteken (*) alleen uitgebreid naar de execute actie. Voor tabellen en weergaven wordt deze uitgebreid naar create, read, updateen delete.

Format

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

Example

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

Alternatieve indeling (alleen tekenreeks, wanneer type=stored-procedure)

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

Example

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

Acties (entiteitsnaamentiteiten voor objectmatrixmachtigingen)

Parent Property Type Required Default
entities.{entity-name}.permissions actions tekenreeksmatrix ✔️ Ja None

Een objectmatrix waarin wordt beschreven welke bewerkingen zijn toegestaan voor de bijbehorende rol.

Note

Voor opgeslagen procedures wordt de actie jokerteken (*) uitgebreid tot alleen execute. Voor tabellen/weergaven wordt deze uitgebreid naar create, read, updateen delete.

Geneste eigenschappen

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

Format

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

Example

Hiermee verleent u read toestemming voor auditor de User entiteit, met veld- en beleidsbeperkingen.

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

Beleidsnotities

  • Beleidsregels ondersteunen OData-operators zoals eq.
  • Beleidsregels ondersteunen samengestelde predicaten met behulp van and en or.
  • Alleen ondersteund voor acties: create, read, updateen delete. (Niet execute)
  • Beleidsregels filteren resultaten, maar voorkomen niet dat query's worden uitgevoerd in de database.
  • Veld moet de veldalias gebruiken, indien toegewezen.

Type (GraphQL entity-name entities)

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

Hiermee stelt u de naamconventie voor een entiteit in het GraphQL-schema in.

Format

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

Geneste eigenschappen

Parent Property Required Type Default
entities.{entity-name}.graphql.type singular ❌ Nee string None
entities.{entity-name}.graphql.type plural ❌ Nee string N/B (standaard ingesteld op enkelvoudige waarde)

Example

Configuration

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

GraphQL-query

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

GraphQL-antwoord

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

Bewerking (GraphQL entity-name entities)

Parent Property Type Required Default
entities.{entity-name}.graphql operation opsommingstekenreeks ❌ Nee mutation

Hiermee wordt aangegeven of de stored-procedure bewerking wordt weergegeven onder of QueryMutation.

Note

Wanneer {entity-name}.type dit is ingesteld stored-procedure, wordt automatisch een nieuw GraphQL-type executeXXX gemaakt. Met deze operation eigenschap bepaalt u waar dit type in het GraphQL-schema wordt geplaatst. Er is geen functionele impact, alleen schema-hygiëne.

Format

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

Voorbeeld: bewerking

Wanneer operation is ingesteld op query

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

Wanneer operation is ingesteld op mutation

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

Ingeschakeld (GraphQL entity-name entities)

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

Hiermee kunnen ontwikkelaars selectief entiteiten opnemen in het GraphQL-schema.

Format

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

REST (entiteitsnaamentiteiten)

Parent Property Type Required Default
entities.{entity-name}.rest enabled boolean ❌ Nee True
entities.rest path string ❌ Nee /{entity-name}
entities.{entity-name}.rest methods tekenreeksmatrix ❌ Nee* POST

* De methods eigenschap is alleen voor stored-procedure eindpunten.

Format

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

Toewijzingen (entiteitsnaamentiteiten)

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

Hiermee schakelt u aangepaste aliassen of weergegeven namen in voor databaseobjectvelden.

Important

Voor entiteiten waarvoor GraphQL is ingeschakeld, moet de geconfigureerde weergegeven naam voldoen aan de GraphQL-naamvereisten.

Format

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

Examples

Databasetabel

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

Configuration

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

Cache (entiteitsnaamentiteiten)

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

Hiermee schakelt en configureert u caching voor de entiteit.

Geneste eigenschappen

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

Format

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

Note

Wanneer deze niet is opgegeven, ttl-seconds neemt u de globale waarde die is ingesteld onder runtime.cache.

Example

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

Relaties (entiteitsnaamentiteiten)

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

Hiermee configureert u hoe GraphQL-entiteiten zijn gerelateerd aan andere weergegeven entiteiten. Zie voor meer informatie uitsplitsing van relaties van data-API-opbouwfuncties.

Note

De relationship-name eigenschap voor elke relatie moet uniek zijn voor alle relaties voor die entiteit.

Geneste eigenschappen

Deze eigenschappen worden gebruikt in verschillende combinaties, afhankelijk van de relatiekardinaliteit.

Parent Property Type Required Default
entities.{entity-name}.relationships cardinality string ✔️ Ja None
entities.{entity-name}.relationships target.entity string ✔️ Ja None
entities.{entity-name}.relationships target.fields tekenreeksmatrix ❌ Nee None
entities.{entity-name}.relationships source.fields tekenreeksmatrix ❌ Nee None
entities.{entity-name}.relationships linking.object string ❌ Nee None
entities.{entity-name}.relationships linking.source.fields tekenreeksmatrix ❌ Nee None
entities.{entity-name}.relationships linking.target.fields tekenreeksmatrix ❌ Nee 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 Eén categorieentiteit kan betrekking hebben op veel takentiteiten
many-to-one one Veel takentiteiten kunnen betrekking hebben op één categorieentiteit
many-to-many many Een todo-entiteit kan betrekking hebben op veel gebruikersentiteiten en één gebruikersentiteit kan betrekking hebben op veel todo-entiteiten

Voorbeeld: Een-op-een-kardinaliteit

Elk Profile is gerelateerd aan precies één User, en elk User heeft precies één gerelateerd Profile.

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

GraphQL-schema

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

Command-line

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

Voorbeeld: Een-op-veel-kardinaliteit

Een Category kan een of meer gerelateerde Book entiteiten hebben, terwijl elk Book een gerelateerde Categoryentiteit kan hebben.

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

GraphQL-schema

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

Opdrachtregel

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

Voorbeeld: Veel-op-een-kardinaliteit

Veel Book entiteiten kunnen één gerelateerde Categoryhebben, terwijl een Category of meer gerelateerde Book items kan bevatten.

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

GraphQL-schema

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

Opdrachtregel

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

Voorbeeld: Veel-op-veel-kardinaliteit

Veel Book entiteiten kunnen veel gerelateerde Author entiteiten hebben, terwijl veel Author entiteiten veel gerelateerde Book items kunnen hebben.

Note

Deze relatie is mogelijk met een derde tabel, dbo.books_authorswaarnaar we verwijzen als het koppelingsobject.

{
  "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-schema

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

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

Opdrachtregel

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"

Status (entiteitsnaamentiteiten)

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

Hiermee schakelt en configureert u statuscontroles voor de entiteit.

Geneste eigenschappen

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

Example

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

Note

De first waarde moet kleiner dan of gelijk zijn aan de runtime.pagination.max-page-size instelling. Kleinere waarden helpen de statuscontroles sneller te voltooien.

Important

Opgeslagen procedures worden automatisch uitgesloten van entiteitsstatuscontroles omdat ze parameters vereisen en mogelijk niet deterministisch zijn.