Bagikan melalui


Cara memanggil titik akhir REST

Penyusun API Data (DAB) menyediakan API web RESTful yang memungkinkan Anda mengakses tabel, tampilan, dan prosedur tersimpan dari database yang terhubung. Setiap objek database yang diekspos didefinisikan sebagai entitas dalam konfigurasi runtime.

Secara default, DAB menghosting titik akhir REST di:

https://{base_url}/api/{entity}

Nota

Semua komponen jalur dan parameter kueri sensitif terhadap huruf besar/kecil.

Kata kunci yang didukung di penyusun API Data

Konsep REST Kegunaan
Proyeksi $select Pilih bidang mana yang akan dikembalikan
Penyaringan $filter Membatasi baris menurut kondisi
Pengurutan $orderby Tentukan urutan pengurutan
Ukuran halaman $first Batasi jumlah item per halaman
Kelanjutan $after Lanjutkan dari halaman terakhir

Struktur dasar

Untuk memanggil REST API, buat permintaan menggunakan pola ini:

{HTTP method} https://{base_url}/{rest-path}/{entity}

Contoh membaca semua rekaman dari book entitas:

GET https://localhost:5001/api/book

Responsnya adalah objek JSON dengan value array. Penomoran halaman dan informasi kesalahan hanya muncul jika berlaku.

Nota

Secara default, DAB mengembalikan hingga 100 item per kueri kecuali dikonfigurasi sebaliknya (runtime.pagination.default-page-size).

GET https://localhost:5001/api/book

Sukses:

{
  "value": [
    { "id": 1, "title": "Dune", "year": 1965, "pages": 412 },
    { "id": 2, "title": "Foundation", "year": 1951, "pages": 255 }
  ]
}

Berhasil dengan paginasi:

{
  "value": [
    { "id": 1, "title": "Dune", "year": 1965, "pages": 412 },
    { "id": 2, "title": "Foundation", "year": 1951, "pages": 255 }
  ],
  "nextLink": "https://localhost:5001/api/book?$after=WyJCb29rMiJd"
}

Hasil kosong (item tidak ditemukan):

{
  "value": []
}

Nota

Permintaan GET untuk kunci primer yang tidak ada mengembalikan 200 OK dengan array kosong value —bukan 404 Not Found. Periksa array kosong untuk menentukan apakah item ada.

Jenis kueri

Setiap entitas REST mendukung pengumpulan dan pembacaan rekaman tunggal.

Pengoperasian Deskripsi
GET /api/{entity} Mengembalikan daftar rekaman
GET /api/{entity}/{primary-key-column}/{primary-key-value} Mengembalikan satu rekaman menurut kunci primer

Contoh mengembalikan satu rekaman:

GET /api/book/id/1010

Contoh mengembalikan banyak:

GET /api/book

Memfilter hasil

$filter Gunakan parameter kueri untuk membatasi rekaman mana yang dikembalikan.

GET /api/book?$filter=title eq 'Foundation'

Kueri ini mengembalikan semua buku yang judulnya sama dengan "Foundation."

Filter dapat mencakup operator logis untuk kueri yang lebih kompleks:

GET /api/book?$filter=year ge 1970 or title eq 'Dune'

Untuk informasi selengkapnya, lihat referensi argumen $filter.

Mengurutkan hasil

Parameter $orderby menentukan bagaimana rekaman diurutkan.

GET /api/book?$orderby=year desc, title asc

Ini mengembalikan buku yang diurutkan berdasarkan year menurun, lalu berdasarkan title.

Untuk informasi selengkapnya, lihat referensi argumen $orderby.

Membatasi hasil {#first-and-after}

Parameter $first membatasi berapa banyak rekaman yang dikembalikan dalam satu permintaan.

GET /api/book?$first=5

Ini mengembalikan lima buku pertama, diurutkan berdasarkan kunci primer secara default. Anda juga dapat menggunakan $first=-1 untuk meminta ukuran halaman maksimum yang dikonfigurasi, yang defaultnya adalah 100 item. Konfigurasikan batas ini dengan runtime.pagination.default-page-size dalam file konfigurasi Anda.

Untuk informasi selengkapnya, lihat referensi argumen $first.

Melanjutkan hasil

Untuk mengambil halaman berikutnya, gunakan $after dengan token kelanjutan dari respons sebelumnya.

GET /api/book?$first=5&$after={continuation-token}

Token $after mengidentifikasi tempat kueri terakhir berakhir. Untuk informasi selengkapnya, lihat referensi argumen $after.

Pemilihan bidang (proyeksi)

Gunakan $select untuk mengontrol bidang mana yang disertakan dalam respons.

GET /api/book?$select=id,title,price

Ini hanya mengembalikan kolom yang ditentukan. Jika bidang hilang atau tidak dapat diakses, DAB mengembalikan 400 Bad Request.

Untuk informasi selengkapnya, lihat referensi argumen $select.

Memodifikasi data

REST API juga mendukung operasi buat, perbarui, dan hapus tergantung pada izin entitas.

Metode Action
POST Membuat item baru
PUT Ganti item yang sudah ada (atau buat jika hilang)
PATCH Perbarui item yang sudah ada (atau buat jika hilang)
DELETE Menghapus item menurut kunci utama

Penting

Perilaku upsert (insert-if-missing) PUT dan PATCH hanya berfungsi ketika database mengizinkan nilai kunci primer eksplisit. Untuk tabel dengan kunci yang dibuat secara otomatis (seperti IDENTITY kolom di SQL Server atau SERIAL di PostgreSQL), PUT atau PATCH ke kunci yang tidak ada mengembalikan 404 Not Found karena database menolak sisipan eksplisit ke dalam kolom yang dibuat secara otomatis. Gunakan POST untuk membuat rekaman pada tabel dengan kunci yang dibuat secara otomatis, atau gunakan PUT dan PATCH tanpa kunci untuk memungkinkan DAB menetapkan kunci secara otomatis.

Membuat rekaman baru

Gunakan POST untuk membuat item baru.

POST https://localhost:5001/api/book
Content-Type: application/json

{
  "id": 2000,
  "title": "Leviathan Wakes",
  "year": 2011,
  "pages": 577
}

Perbarui data yang ada

Gunakan PATCH untuk memperbarui bidang tertentu pada item yang sudah ada.

PATCH https://localhost:5001/api/book/id/2000
Content-Type: application/json

{
  "id": 2000,
  "title": "Leviathan Wakes",
  "year": 2011,
  "pages": 577
}

Hapus sebuah catatan

Gunakan DELETE untuk menghapus item menurut kunci primer.

DELETE https://localhost:5001/api/book/id/2000

Jalur REST tingkat lanjut dengan subdirektori

Nota

Fungsionalitas Pembuat API Data 2.0 yang dijelaskan di bagian ini saat ini dalam pratinjau dan mungkin berubah sebelum ketersediaan umum. Untuk informasi selengkapnya, lihat Apa yang baru dalam versi 2.0.

Jalur REST entitas dapat menyertakan garis miring ke depan untuk membuat segmen URL gaya subdirektori. Konfigurasi ini memungkinkan struktur URL hierarkis yang lebih ekspresif untuk API Anda.

Konfigurasikan jalur subdirektori di properti entitas rest.path :

{
  "entities": {
    "ShoppingCartItem": {
      "source": "dbo.ShoppingCartItem",
      "rest": {
        "path": "shopping-cart/item"
      }
    }
  }
}

Konfigurasi ini menghasilkan titik akhir:

GET /api/shopping-cart/item

DAB menggunakan pencocokan awalan terpanjang untuk perutean, sehingga jalur yang lebih spesifik dicocokkan sebelum yang lebih pendek. Untuk keamanan, validasi memblokir pola traversal lintasan (seperti ..), garis miring terbalik, dan pemisah yang dikodekan persen.

Untuk informasi selengkapnya, lihat konfigurasi jalur REST.

PUT dan PATCH tanpa kunci untuk kunci primer yang dibuat secara otomatis

Nota

Fungsionalitas Pembuat API Data 2.0 yang dijelaskan di bagian ini saat ini dalam pratinjau dan mungkin berubah sebelum ketersediaan umum. Untuk informasi selengkapnya, lihat Apa yang baru dalam versi 2.0.

Ketika semua kolom kunci utama untuk entitas dibuat secara otomatis (misalnya, IDENTITY kolom di SQL Server), Anda dapat mengirim permintaan PUT dan PATCH tanpa menentukan kunci utama di URL. DAB secara otomatis menetapkan kunci selama penyisipan.

PUT /api/Book
Content-Type: application/json

{
  "title": "My New Book",
  "publisher_id": 1234
}

Permintaan ini membuat rekaman baru Book dengan kunci primer yang dibuat secara otomatis.

Aturan untuk operasi tanpa kunci

  • Semua kolom kunci primer yang dihilangkan harus dibuat secara otomatis. Jika ada kolom kunci yang dihilangkan tidak dibuat secara otomatis, permintaan gagal.
  • Untuk kunci primer komposit, Anda masih harus menyediakan bagian kunci yang tidak dibuat secara otomatis di URL.
  • Prosedur tersimpan tidak terpengaruh oleh fitur ini. Mereka terus menggunakan penanganan parameter mereka sendiri.
  • Dokumen OpenAPI mencerminkan operasi tanpa kunci pada jalur entitas dasar (misalnya, PUT /api/Book tanpa segmen kunci).

Kompresi respons HTTP

Nota

Fungsionalitas Pembuat API Data 2.0 yang dijelaskan di bagian ini saat ini dalam pratinjau dan mungkin berubah sebelum ketersediaan umum. Untuk informasi selengkapnya, lihat Apa yang baru dalam versi 2.0.

DAB mendukung kompresi respons HTTP untuk mengurangi ukuran payload dan meningkatkan kecepatan transfer. Konfigurasikan kompresi di bagian runtime.compression file konfigurasi Anda:

{
  "runtime": {
    "compression": {
      "level": "optimal"
    }
  }
}

Tingkat kompresi yang tersedia:

Tingkat Deskripsi
optimal Menyeimbangkan rasio dan kecepatan kompresi (disarankan untuk sebagian besar skenario)
fastest Memprioritaskan kecepatan kompresi di atas rasio
none Menonaktifkan pemadatan

Untuk informasi selengkapnya tentang mengonfigurasi kompresi, lihat konfigurasi kompresi runtime.