Sdílet prostřednictvím


Výběr pole (projekce) v REST

Projekce vám pomůže vrátit jenom to, co váš klient skutečně potřebuje. Menší datové části zlepšují výkon, snižují náklady na síť a snižují náklady na analýzu na straně klienta. Tvůrce rozhraní DATA API (DAB) implementuje projekci rest prostřednictvím parametru $select dotazu.

Poznámka:

V názvech parametrů dotazu REST (včetně $select) se rozlišují malá a velká písmena. V závislosti na tom, co jste nakonfigurovali nebo odhalili, rozlišují se v názvech polí také malá a velká písmena.

Přejděte do verze GraphQL tohoto dokumentu.

Základní výběr

Vzor

GET /api/{entity}?$select=FieldA,FieldB,FieldC

Pokud $select tento argument vynecháte, vrátí DAB všechna pole, která má role volajícího oprávnění ke čtení (s výhradou include a konfigurací a exclude oprávněními na úrovni pole). Neexistuje žádný zástupný token, například *– vynechání $select je způsob vyžádání úplného povoleného obrazce.

Examples

# Return all accessible fields
GET /api/author

# Return only first_name
GET /api/author?$select=first_name

# Return only first_name and last_name
GET /api/author?$select=first_name,last_name

Interní sloupce vs. odpovědi

Pole primárního klíče ani řazení nemusíte projektovat. Pokud tento parametr vynecháte, nezobrazí se v odpovědi JSON. DAB ale může interně načítat další sloupce potřebné k vynucení zásad zabezpečení (filtry na úrovni řádků, masky polí) a zpracování kurzorů stránkování ($after / nextLink).

Poznámka:

Tyto interně načtené sloupce se před odpovědí odeberou, pokud je explicitně nepožádáte.

Example

GET /api/book?$select=id,title&$orderby=publisher_id desc&$first=5

Koncepční SQL

SELECT TOP (6) -- first (5) + 1 probe row for paging
  [b].[id],
  [b].[sku_title] AS title
FROM dbo.books AS [b]
ORDER BY [b].[publisher_id] DESC, [b].[id] ASC;

Odezva

{
  "value": [
    { "id": 101, "title": "Example 1" },
    { "id": 77,  "title": "Example 2" },
    { "id": 42,  "title": "Example 3" },
    { "id": 33,  "title": "Example 4" },
    { "id": 5,   "title": "Example 5" }
  ],
  "nextLink": "..."
}

Přečtěte si další informace o stránkování a po klíčovém slově.

Další interní sloupce a šestý řádek sondy nejsou v datové části viditelné.

Uložené procedury

U entit založených na uložených procedurách $select není interpretována jako klauzule projekce. Místo toho se páry klíč/hodnota řetězce dotazu (s výjimkou rozpoznaných systémových parametrů jako $filter, $orderbyatd.) považují za parametry uložené procedury. $select nemá žádný účinek; sada výsledků procedury definuje obrazec.

Příklad konfigurace

{
  "runtime": {
    "pagination": {
      "default-page-size": 100,
      "max-page-size": 100000
    }
  },
  "entities": {
    "Book": {
      "source": {
        "type": "table",
        "object": "dbo.books"
      },
      "mappings": {
        "sku_title": "title",
        "sku_price": "price"
      },
      "relationships": {
        "book_category": {
          "cardinality": "one",
          "target.entity": "Category",
          "source.fields": [ "category_id" ],
          "target.fields": [ "id" ]
        }
      }
    },
    "Category": {
      "source": {
        "type": "table",
        "object": "dbo.categories"
      },
      "relationships": {
        "category_books": {
          "cardinality": "many",
          "target.entity": "Book",
          "source.fields": [ "id" ],
          "target.fields": [ "category_id" ]
        }
      }
    }
  }
}

Viz také

Koncepce REST GraphQL Účel
Projection $select items Výběr polí, která se mají vrátit
Filtering $filter filtr Omezení řádků podle podmínky
Řazení $orderby orderBy Definování pořadí řazení
Velikost stránky $first first Omezení počtu položek na stránku
Pokračování $after po Pokračovat z poslední stránky pomocí kurzoru

Poznámka:

Klíčová slova REST začínají následujícími konvencemi $OData.