Membuat Titik Akhir GET dan POST
Tangani parameter jalur, string kueri, dan penguraian isi permintaan.
Membuat Titik Akhir GET dan POST adalah pelajaran R Academy gratis di CoddyKit. Ini adalah pelajaran 2 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar R Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus R Academy mencakup 4 pelajaran total.
Apa Itu Plumber?
plumber mengubah fungsi R biasa menjadi endpoint API HTTP menggunakan anotasi komentar khusus. Anotasikan fungsi dengan #* @get /path, lalu Plumber membuat rute GET yang memanggil fungsi tersebut dan mengembalikan hasilnya sebagai JSON.
Pasang dengan install.packages('plumber').
Endpoint GET Pertama Anda
API Plumber dasar berada dalam sebuah file (misalnya api.R). Anotasikan fungsi dengan #* @get yang diikuti jalur. Plumber secara otomatis membuat serial nilai yang dikembalikan fungsi menjadi JSON.
# api.R
# library(plumber)
#
# #* Return a greeting
# #* @get /hello
# function() {
# list(message = 'Hello from Plumber!')
# }
#
# Start with:
# pr <- plumb('api.R')
# pr$run(port = 8000)Parameter Jalur dengan Petunjuk Tipe
Sisipkan segmen jalur variabel menggunakan sintaks tanda kurung sudut: /users/<id:int>. Plumber menguraikan segmen tersebut dan meneruskannya sebagai argumen bertipe ke fungsi Anda. Tipe yang didukung mencakup int, dbl, dan chr.
# #* Get a user by ID
# #* @get /users/<id:int>
# function(id) {
# # id is already an integer
# list(
# user_id = id,
# name = paste('User', id)
# )
# }
#
# GET /users/42 => {"user_id":42, "name":"User 42"}Parameter Kueri dengan #* @param
Dokumentasikan parameter kueri dengan #* @param name Description. Nama parameter harus sama dengan nama argumen fungsi. Plumber membacanya secara otomatis dari string kueri — tidak diperlukan penguraian manual.
# #* Search users by name
# #* @param name The name to search for
# #* @param limit Maximum results to return
# #* @get /users/search
# function(name = '', limit = '10') {
# limit <- as.integer(limit)
# # query string: /users/search?name=Alice&limit=5
# list(query = name, max = limit)
# }Membuat Endpoint POST
Gunakan #* @post /path untuk endpoint yang menerima isi permintaan. Argumen khusus req memberikan akses ke objek permintaan mentah. Plumber meneruskannya secara otomatis ketika argumen fungsi bernama req.
# #* Create a new user
# #* @post /users
# function(req) {
# body <- jsonlite::fromJSON(req$postBody)
# # body$name, body$email are now available
# list(
# status = 'created',
# user_id = sample(1000:9999, 1),
# name = body$name
# )
# }Menguraikan Isi Permintaan
req$postBody berisi string JSON mentah dari isi POST. Uraikan dengan jsonlite::fromJSON(req$postBody) untuk mendapatkan daftar R bernama. Selalu validasi bidang yang wajib diisi sebelum memprosesnya.
# #* @post /orders
# function(req, res) {
# body <- jsonlite::fromJSON(req$postBody)
# if (is.null(body$product_id)) {
# res$status <- 400L
# return(list(error = 'product_id is required'))
# }
# list(
# order_id = as.integer(Sys.time()),
# product_id = body$product_id,
# quantity = body$quantity %||% 1
# )
# }Kode Status HTTP dengan res$status
Argumen res (yang juga disisipkan otomatis oleh Plumber) memungkinkan Anda menetapkan kode status respons HTTP. Tetapkan sebelum mengembalikan nilai: res$status <- 404L. Kode umum:
- 200 — OK (default)
- 201 — Dibuat
- 400 — Permintaan Buruk
- 404 — Tidak Ditemukan
- 500 — Kesalahan Internal Server
# #* @get /items/<id:int>
# function(id, res) {
# items <- list(
# list(id=1, name='Widget'),
# list(id=2, name='Gadget')
# )
# found <- Filter(function(x) x$id == id, items)
# if (length(found) == 0) {
# res$status <- 404L
# return(list(error = paste('Item', id, 'not found')))
# }
# found[[1]]
# }Mengembalikan Daftar Bernama sebagai JSON
Plumber membuat serial nilai yang dikembalikan R menjadi JSON menggunakan jsonlite. Daftar bernama menjadi objek JSON; daftar tanpa nama menjadi array JSON. Kembalikan daftar bernama untuk respons terstruktur.
# Named list => JSON object
# list(id=1, name='Alice') => {"id":1, "name":"Alice"}
#
# Unnamed list => JSON array
# list(1, 2, 3) => [1, 2, 3]
#
# Nested structures work too:
# list(
# user = list(id=1, name='Alice'),
# orders = list(list(id=101), list(id=102))
# )
# => {"user":{"id":1,"name":"Alice"}, "orders":[{"id":101},{"id":102}]}Objek Router Plumber
Muat file R beranotasi dengan plumb('api.R') untuk membuat objek router Plumber. Panggil pr$run(port = 8000) untuk memulai server. Dalam produksi, biasanya Anda memanggil pr_run(pr, host='0.0.0.0', port=8000).
# Standard plumber startup in api_start.R:
# library(plumber)
# pr <- plumb('api.R')
# pr$run(port = 8000, host = '0.0.0.0')
#
# Or with pipe style:
# plumb('api.R') |> pr_run(port = 8000)
#
# Test with:
# curl http://localhost:8000/helloMenangani Beberapa Metode HTTP
Satu jalur dapat mendukung beberapa metode dengan menulis fungsi beranotasi secara terpisah. Plumber mengarahkan permintaan ke fungsi yang tepat berdasarkan metode HTTP yang digunakan.
# #* List all products
# #* @get /products
# function() {
# list(products = list(list(id=1, name='Widget')))
# }
#
# #* Create a product
# #* @post /products
# function(req) {
# body <- jsonlite::fromJSON(req$postBody)
# list(created = TRUE, name = body$name)
# }Menguji Titik Akhir API Anda
Gunakan curl dari terminal atau httr2 dari R untuk menguji titik akhir saat server berjalan. httr2 memungkinkan Anda menulis pengujian yang dapat direproduksi bersama kode API.
# From terminal:
# curl http://localhost:8000/users/42
# curl -X POST http://localhost:8000/users \
# -H 'Content-Type: application/json' \
# -d '{"name":"Alice","email":"alice@example.com"}'
#
# From R:
# library(httr2)
# resp <- request('http://localhost:8000/users/42') |> req_perform()
# resp_body_json(resp)Pemeriksaan Singkat: Parameter Jalur
Bagaimana Anda mendeklarasikan parameter jalur bernama id yang harus diuraikan Plumber sebagai bilangan bulat?
Ringkasan Titik Akhir GET dan POST
Membangun titik akhir REST dengan Plumber:
#* @get /pathmembuat rute GET;#* @post /pathmembuat rute POST- Parameter jalur menggunakan sintaks
<name:type>(int,dbl,chr) - Parameter kueri otomatis diuraikan menjadi argumen fungsi yang sesuai
- Isi POST tersedia melalui
jsonlite::fromJSON(req$postBody) - Atur
res$statusuntuk respons HTTP selain 200 - Kembalikan daftar bernama — daftar tersebut otomatis diserialisasi menjadi objek JSON
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Membuat Titik Akhir GET dan POST” gratis?
Ya — teks lengkap “Membuat Titik Akhir GET dan POST” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus R Academy, upgrade ke CoddyKit PRO. Kursus R Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Membuat Titik Akhir GET dan POST”?
Tangani parameter jalur, string kueri, dan penguraian isi permintaan. Kamu berlatih R Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai R Academy?
Tidak diperlukan pengalaman sebelumnya. R Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 2 dari 4.
Berapa lama pelajaran “Membuat Titik Akhir GET dan POST” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran R Academy ini?
Ya. Setiap pelajaran R Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Pengantar Plumber dan REST
- Membuat Titik Akhir GET dan POST
- Autentikasi dan Keamanan API
- Menerapkan API Plumber ke Produksi