Bagikan melalui


Pemilihan bidang (Proyeksi) di REST

Proyeksi hanya membantu Anda mengembalikan apa yang sebenarnya dibutuhkan klien Anda. Payload yang lebih kecil meningkatkan performa, mengurangi biaya jaringan, dan mengurangi overhead penguraian sisi klien. Penyusun API Data (DAB) mengimplementasikan proyeksi untuk REST melalui $select parameter kueri.

Nota

Nama parameter kueri REST (termasuk $select) peka huruf besar/kecil. Nama bidang juga peka huruf besar/kecil berdasarkan apa yang Anda konfigurasi atau terekspos.

Buka versi GraphQL dokumen ini.

Pilihan dasar

Pola

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

Jika $select dihilangkan, DAB mengembalikan semua bidang peran penelepon berwenang untuk membaca (tunduk pada include konfigurasi dan exclude dan izin tingkat bidang). Tidak ada token kartubebas seperti *; menghilangkan $select adalah bagaimana Anda meminta bentuk penuh yang diizinkan.

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

Kolom internal vs respons

Anda tidak diharuskan untuk memproyeksikan kunci primer atau mengurutkan bidang. Jika dihilangkan, mereka tidak muncul dalam respons JSON. Namun, DAB dapat secara internal mengambil kolom tambahan yang diperlukan untuk menerapkan kebijakan keamanan (filter tingkat baris, masker bidang) dan menangani kursor paginasi ($after / nextLink).

Nota

Kolom yang diambil secara internal ini dihapus sebelum respons kecuali Anda secara eksplisit memintanya.

Example

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

SQL Konseptual

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;

Jawaban

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

Pelajari selengkapnya tentang penomoran halaman dan kata kunci setelah.

Kolom internal tambahan dan baris pemeriksaan keenam tidak terlihat dalam payload.

Prosedur yang disimpan

Untuk entitas yang didukung prosedur tersimpan, $select tidak ditafsirkan sebagai klausul proyeksi. Sebaliknya, pasangan kunci/nilai string kueri (kecuali parameter sistem yang dikenali seperti $filter, , $orderbydll.) diperlakukan sebagai parameter prosedur tersimpan. $select tidak berpengaruh; tataan hasil prosedur menentukan bentuk.

Konfigurasi contoh

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

Lihat juga

Konsep REST GraphQL Tujuan
Projection $select items Pilih bidang mana yang akan dikembalikan
Penyaringan $filter saringan Membatasi baris menurut kondisi
Pengurutan $orderby orderBy Tentukan urutan pengurutan
Ukuran halaman $first first Membatasi jumlah item per halaman
Kelanjutan $after sesudah Lanjutkan dari halaman terakhir menggunakan kursor

Nota

Kata kunci REST dimulai dengan $, mengikuti konvensi OData.