Partilhar via


Seleção de campo (Projeção) em REST

A projeção ajuda você a devolver apenas o que o seu cliente realmente precisa. Cargas úteis menores melhoram o desempenho, reduzem os custos de rede e reduzem a sobrecarga de análise do lado do cliente. O Data API builder (DAB) implementa a projeção para REST por meio do $select parâmetro query.

Observação

Os nomes dos parâmetros de consulta REST (incluindo $select) diferenciam maiúsculas de minúsculas. Os nomes de campo também diferenciam maiúsculas de minúsculas com base no que você configurou ou expôs.

Vá para a versão GraphQL deste documento.

Seleção básica

Padrão

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

Se $select for omitido, o DAB retornará todos os campos que a função do chamador está autorizada a ler (sujeito a include e exclude permissões de configuração e nível de campo). Não há um token curinga como *se omitisse $select é como você solicita a forma total permitida.

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

Colunas internas vs de resposta

Não é necessário projetar campos de chave primária ou ordenação. Se omitidos, eles não aparecem na resposta JSON. No entanto, o DAB pode buscar internamente colunas extras necessárias para impor políticas de segurança (filtros de nível de linha, máscaras de campo) e manipular cursores de paginação ($after / nextLink).

Observação

Essas colunas buscadas internamente são removidas antes da resposta, a menos que você as solicite explicitamente.

Example

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

SQL conceitual

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;

Resposta

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

Saiba mais sobre paginação e a palavra-chave after.

As colunas internas extras e a sexta linha de sonda não são visíveis na carga útil.

Procedimentos armazenados

Para entidades com suporte de procedimento armazenado, $select não é interpretado como uma cláusula de projeção. Em vez disso, os pares chave/valor da cadeia de caracteres de consulta (exceto parâmetros de sistema reconhecidos como $filter, $orderby, etc.) são tratados como parâmetros de procedimento armazenado. $select não produz efeitos; O conjunto de resultados do procedimento define a forma.

Configuração de exemplo

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

Consulte também

Concept REST GraphQL Propósito
Projection $select items Escolha quais campos retornar
Filtering $filter filtrar Restringir linhas por condição
Classificação $orderby orderBy Definir a ordem de classificação
Tamanho da página $first first Limitar o número de itens por página
Continuação $after após Continue a partir da última página usando um cursor

Observação

As palavras-chave REST começam com $, seguindo as convenções OData.