Compartilhar via


Ordenando resultados em REST ($orderby)

A ordenação define a sequência de registros retornados e sustenta a paginação estável. No REST, o DAB (Construtor de API de Dados) usa o $orderby parâmetro de consulta para classificar os resultados antes de $first aplicar ou $after. Se você omitir $orderby, o DAB usará como padrão a classificação pela chave primária (crescente).

Observação

Para chaves primárias compostas, o DAB é pedido pela sequência de colunas do banco de dados.

Acesse a versão do GraphQL deste documento.

Visão geral

Conceito Description
Parâmetro de consulta $orderby
Tokens de direção asc, desc
Ordem padrão Chave primária crescente
Ordem de vários campos Lista de campos separados por vírgulas
Tie-break Campos de chave primária restantes acrescentados automaticamente

Padrão de uso

GET /api/{entity}?$orderby=FieldA [asc|desc], FieldB desc

Example

Peça livros por ano decrescente, depois título crescente.

GET /api/books?$orderby=year desc, title asc&$first=5

SQL conceitual

SELECT TOP (5)
  id,
  sku_title AS title,
  year
FROM dbo.books
ORDER BY year DESC, sku_title ASC, id ASC;

Resposta de exemplo

{
  "value": [
    { "id": 7, "title": "Dune Messiah", "year": 1969 },
    { "id": 6, "title": "Dune", "year": 1965 },
    { "id": 3, "title": "Foundation", "year": 1951 },
    { "id": 1, "title": "I, Robot", "year": 1950 },
    { "id": 8, "title": "The Martian Chronicles", "year": 1950 }
  ]
}

Regras

Regra Detalhes
Delimitador Vírgula + espaço em branco opcional
Palavras-chave de direção asc (padrão), desc
Diferenciação de maiúsculas e minúsculas Os nomes de campo diferenciam maiúsculas de minúsculas
Campo desconhecido Retorna 400 Invalid orderby column requested
Sintaxe incompatível Retorna 400 OrderBy property is not supported.

Erros de exemplo

Nome do campo inválido:

400 Invalid orderby column requested: publishedYear

Token sem suporte:

400 OrderBy property is not supported.

Interação com $select

Quando você classifica por um campo não presente, $selecto DAB o busca internamente para ordenação ou criação de cursor, mas omite-o do conteúdo final.

Configuração relevante

{
  "entities": {
    "Book": {
      "source": {
        "object": "dbo.books",
        "type": "table"
      },
      "mappings": {
        "sku_title": "title"
      }
    }
  }
}

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

Conceito REST GraphQL Propósito
Projection $select items Escolher quais campos retornar
Filtragem $filter filtro 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 depois Continuar da última página usando um cursor

Observação

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